菜鸟科技网

MySQL配置命令有哪些核心参数?

核心配置文件位置

MySQL 会在启动时自动查找配置文件,查找顺序如下(越往后的优先级越高):

MySQL配置命令有哪些核心参数?-图1
(图片来源网络,侵删)

Linux / macOS 系统:

  1. /etc/my.cnf (系统级全局配置)
  2. /etc/mysql/my.cnf (系统级,某些发行版如 Ubuntu/Debian 会用这个)
  3. SYSCONFDIR/my.cnf (编译时指定的目录,通常是 /usr/local/etc/my.cnf)
  4. DATADIR/my.cnf (数据目录下的配置文件,特定于该实例)
  5. ~/.my.cnf (当前用户的主目录下的配置文件,仅对当前用户有效)

Windows 系统:

  1. C:\my.ini (最常见)
  2. C:\ProgramData\MySQL\MySQL Server X.X\my.ini (较新版本的 MySQL 安装路径)
  3. C:\Program Files\MySQL\MySQL Server X.X\my.ini (另一个常见位置)

提示: 你可以在 MySQL 命令行中使用以下命令查看当前服务器正在使用的配置文件:

SHOW VARIABLES LIKE 'config_file';

配置文件基本结构

my.cnf 文件由多个部分([section])组成,每个部分包含一组 key = value 的配置项。

MySQL配置命令有哪些核心参数?-图2
(图片来源网络,侵删)
  • [client]: 适用于所有客户端程序(如 mysql, mysqldump)。
  • [mysql]: 仅适用于 mysql 命令行客户端。
  • [mysqld]: 最重要的部分,用于配置 MySQL 服务器(mysqld 进程)。
  • [mysqld_safe]: 用于启动 mysqld 服务器的安全脚本。
  • [mysqldump]: 专门用于 mysqldump 客户端的配置。
  • [server]: [mysqld] 的别名,不推荐使用,请直接用 [mysqld]

示例结构:

# 这是注释
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
# 这里是服务器配置
port = 3306
socket = /tmp/mysql.sock
datadir = /var/lib/mysql
pid-file = /var/run/mysqld/mysqld.pid
[mysql]
# 这里是 mysql 命令行客户端的配置
auto-rehash = 1
prompt = (\u@\h) [\d]>\

常用 [mysqld] 配置项详解

这是最核心的部分,决定了服务器的性能、安全和行为。

连接与网络

参数 说明 推荐值/示例
port 服务器监听的 TCP/IP 端口。 3306
bind-address 绑定服务器到哪个 IP 地址。0.0.0 表示监听所有可用 IP。 0.0.0 (允许外部连接) 或 0.0.1 (仅本地)
max_connections 服务器允许的最大并发连接数。 根据服务器内存和负载调整,200 是一个保守值。
max_connect_errors 一个客户端在短时间内连续连接失败达到此次数后,服务器会暂时拒绝其连接。 100
back_log 在主线程繁忙时,可以排队等待的连接请求数。 50 或更高,取决于 max_connections
socket 用于本地连接的 Unix 套接字文件路径。 /tmp/mysql.sock/var/run/mysqld/mysqld.sock

内存管理 (非常关键)

参数 说明 推荐值/示例
innodb_buffer_pool_size 最重要的性能参数,InnoDB 存储引擎缓存数据和索引的内存大小,建议设置为系统可用内存的 50%-80%。 4G (如果服务器有 8GB 内存)
key_buffer_size MyISAM 存储引擎的索引缓存大小,如果主要使用 InnoDB,可以设置得较小或为 0。 256M (MyISAM 专用)
sort_buffer_size 排序操作使用的缓冲区大小,太大可能导致内存耗尽。 2M
join_buffer_size 执行 JOIN 操作时使用的缓冲区大小。 2M
read_buffer_size / read_rnd_buffer_size 顺序读取和随机读取的缓冲区大小。 8M
query_cache_size MySQL 8.0 已移除,在旧版本中用于缓存查询结果。 (MySQL 8.0+ 不需要)
max_allowed_packet 服务器允许接收的最大数据包大小,影响大文本、大字段的插入和更新。 64M

存储引擎与日志

参数 说明 推荐值/示例
default_storage_engine 默认的存储引擎。强烈建议使用 InnoDB InnoDB
innodb_log_file_size InnoDB 重做日志文件的大小,较大的值可以减少事务提交时的 I/O 操作,但增加崩溃恢复时间。 1G
innodb_log_buffer_size InnoDB 日志缓冲区大小,事务提交前,日志会先写到这里。 16M
slow_query_log 是否启用慢查询日志。 1 (开启)
slow_query_log_file 慢查询日志文件路径。 /var/log/mysql/slow-query.log
long_query_time 查询执行时间超过此秒数(秒,可精确到微秒)则被记录为慢查询。 2 (记录超过 2 秒的查询)
log_queries_not_using_indexes 将未使用索引的查询也记录到慢查询日志中。 1 (开启,便于优化)
general_log 是否启用通用查询日志。非常消耗性能,生产环境慎用 0 (关闭)
general_log_file 通用查询日志文件路径。 /var/log/mysql/general.log

安全性

参数 说明 推荐值/示例
skip-networking 禁用 TCP/IP 连接,只允许本地 Unix 套接字连接。增强安全性 1 (如果不需要远程连接)
skip-name-resolve 禁用 DNS 查询,连接时只使用 IP 地址,可以提高连接速度。 1
default_authentication_plugin 设置默认的认证插件,推荐使用 caching_sha2_password (MySQL 8.0+)。 caching_sha2_password
validate_password.policy 密码策略强度(0=LOW, 1=MEDIUM, 2=STRONG)。 1 (中等强度)

其他重要配置

参数 说明 推荐值/示例
datadir 数据文件存储的目录。 /var/lib/mysql
tmpdir 服务器创建临时文件的目录。 /tmp
character-set-server 服务器默认的字符集。强烈建议使用 utf8mb4 utf8mb4
collation-server 服务器默认的排序规则。 utf8mb4_0900_ai_ci
explicit_defaults_for_timestamp 控制 TIMESTAMP 列的默认行为,MySQL 5.6.6+ 默认为 ON。 ON (推荐)
sql_mode 定义 SQL 语法的行为模式。STRICT_TRANS_TABLES 是必须的,它启用严格模式。 STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

配置示例

示例 1:开发/测试环境 (4GB 内存)

这个配置平衡了性能和资源占用。

[mysqld]
# 基础配置
port = 3306
socket = /tmp/mysql.sock
pid-file = /var/run/mysqld/mysqld.pid
datadir = /var/lib/mysql
character-set-server = utf8mb4
collation-server = utf8mb4_0900_ai_ci
# 安全性
default_authentication_plugin = caching_sha2_password
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
# 内存管理 (4GB 内存)
innodb_buffer_pool_size = 2G
key_buffer_size = 256M
sort_buffer_size = 2M
join_buffer_size = 2M
read_buffer_size = 8M
read_rnd_buffer_size = 8M
max_allowed_packet = 64M
# InnoDB 优化
innodb_log_file_size = 512M
innodb_log_buffer_size = 16M
# 日志
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
log_queries_not_using_indexes = 1
general_log = 0
[client]
port = 3306
socket = /tmp/mysql.sock

示例 2:生产环境 (16GB+ 内存,高并发)

这个配置针对高性能和稳定性进行了优化。

MySQL配置命令有哪些核心参数?-图3
(图片来源网络,侵删)
[mysqld]
# 基础配置
port = 3306
socket = /var/run/mysqld/mysqld.sock
pid-file = /var/run/mysqld/mysqld.pid
datadir = /data/mysql
character-set-server = utf8mb4
collation-server = utf8mb4_0900_ai_ci
# 安全性
default_authentication_plugin = caching_sha2_password
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
# 内存管理 (16GB 内存,留给 OS 和其他应用)
innodb_buffer_pool_size = 10G  # 通常是内存的 60-70%
key_buffer_size = 128M         # MyISAM 很少用
max_connections = 500           # 根据预估并发数调整
max_connect_errors = 100
sort_buffer_size = 4M
join_buffer_size = 4M
read_buffer_size = 16M
read_rnd_buffer_size = 16M
max_allowed_packet = 128M
# InnoDB 优化 (为高并发和大数据量设计)
innodb_log_file_size = 2G      # 较大的日志文件,减少 I/O
innodb_log_buffer_size = 64M   # 较大的日志缓冲区
innodb_flush_log_at_trx_commit = 2 # 平衡性能与数据安全 (1为最安全,2为性能更好)
innodb_file_per_table = 1      # 每个表一个 .ibd 文件,便于管理和回收空间
# 日志
slow_query_log = 1
slow_query_log_file = /data/mysql/logs/slow.log
long_query_time = 1
log_queries_not_using_indexes = 1
general_log = 0
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock

如何应用配置更改

  1. 修改配置文件: 使用 vinano 或其他文本编辑器修改 my.cnf 文件。

  2. 检查语法: 在重启前,可以使用 mysqld--help --verbose 选项或 my_print_defaults 命令来检查配置文件是否有语法错误。

    # 检查 mysqld 配置
    mysqld --help --verbose | grep 'Default options'
    # 检查 my_print_defaults
    my_print_defaults mysqld
  3. 重启 MySQL 服务: 使新配置生效。

    • 使用 systemd (现代 Linux 系统):
      sudo systemctl restart mysqld
    • 使用 service 命令:
      sudo service mysql restart
    • Windows (通过服务管理器或命令行):
      net stop mysql
      net start mysql
  4. 验证配置: 登录 MySQL,使用 SHOW VARIABLES LIKE 'parameter_name'; 命令检查参数是否已更新。

    SHOW VARIABLES LIKE 'innodb_buffer_pool_size';

希望这份详细的指南能帮助您更好地配置 MySQL!

分享:
扫描分享到社交APP
上一篇
下一篇