MySQL 8 配置文件详解
MySQL 8 的配置文件(my.cnf或my.ini)是MySQL服务器启动时读取的主要配置文件,它包含了服务器运行所需的各种参数设置。以下是MySQL 8配置文件的详细解析:
配置文件位置
MySQL 8 会按照以下顺序查找配置文件:
/etc/my.cnf
/etc/mysql/my.cnf
~/.my.cnf
(用户特定配置)- 通过
--defaults-file
参数指定的文件
配置文件结构
配置文件通常分为多个部分,用方括号[]
标识:
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock[mysqld]
# 服务器配置选项[mysqld_safe]
# 安全相关选项[mysql]
# MySQL客户端选项[mysqldump]
# 备份工具选项
核心配置参数详解
基础配置
[mysqld]
# 服务器标识
server-id = 1 # 复制环境中唯一标识服务器# 网络配置
port = 3306 # 监听端口
bind-address = 127.0.0.1 # 绑定IP地址
skip-networking = 0 # 是否禁用网络连接# 文件路径
datadir = /var/lib/mysql # 数据目录
socket = /var/run/mysqld/mysqld.sock # Unix socket文件
pid-file = /var/run/mysqld/mysqld.pid # PID文件位置
tmpdir = /tmp # 临时目录# 字符集设置
character-set-server = utf8mb4 # 默认字符集
collation-server = utf8mb4_unicode_ci # 默认排序规则
内存相关配置
[mysqld]
# 缓冲池配置(重要)
innodb_buffer_pool_size = 4G # InnoDB缓冲池大小,通常设为物理内存的50-70%
innodb_buffer_pool_instances = 8 # 缓冲池实例数,提高并发性# 连接相关
max_connections = 200 # 最大连接数
thread_cache_size = 10 # 线程缓存大小# 排序和临时表
sort_buffer_size = 2M # 每个排序线程分配的缓冲区大小
join_buffer_size = 2M # 连接操作缓冲区大小
tmp_table_size = 64M # 临时表内存大小
max_heap_table_size = 64M # 内存表最大大小
InnoDB存储引擎配置
[mysqld]
# InnoDB基础配置
innodb_file_per_table = ON # 每个表使用单独的表空间文件
innodb_flush_method = O_DIRECT # I/O刷新方式
innodb_log_file_size = 256M # 重做日志文件大小
innodb_log_buffer_size = 16M # 重做日志缓冲区大小
innodb_flush_log_at_trx_commit = 1 # 事务提交时日志刷新方式(1最安全)# InnoDB高级配置
innodb_read_io_threads = 8 # 读I/O线程数
innodb_write_io_threads = 8 # 写I/O线程数
innodb_io_capacity = 2000 # IOPS能力估计
innodb_io_capacity_max = 4000 # 最大IOPS
innodb_buffer_pool_dump_at_shutdown = ON # 关闭时保存缓冲池状态
innodb_buffer_pool_load_at_startup = ON # 启动时加载缓冲池状态
日志配置
[mysqld]
# 错误日志
log_error = /var/log/mysql/error.log # 错误日志路径
log_error_verbosity = 3 # 错误日志详细程度(1-3)# 慢查询日志
slow_query_log = 1 # 启用慢查询日志
slow_query_log_file = /var/log/mysql/mysql-slow.log # 慢查询日志路径
long_query_time = 2 # 慢查询阈值(秒)
log_queries_not_using_indexes = 1 # 记录未使用索引的查询# 二进制日志(复制和恢复)
log_bin = /var/log/mysql/mysql-bin.log # 二进制日志路径
binlog_format = ROW # 二进制日志格式(ROW/STATEMENT/MIXED)
binlog_expire_logs_seconds = 2592000 # 日志过期时间(30天)
sync_binlog = 1 # 每次事务都同步二进制日志
安全相关配置
[mysqld]
# 安全设置
local_infile = OFF # 禁用LOAD DATA LOCAL INFILE
skip_name_resolve = ON # 禁用DNS解析
secure_file_priv = /var/lib/mysql-files # 限制文件导入导出位置
default_authentication_plugin = mysql_native_password # 默认认证插件# SSL配置
ssl-ca = /etc/mysql/ca.pem
ssl-cert = /etc/mysql/server-cert.pem
ssl-key = /etc/mysql/server-key.pem
require_secure_transport = ON # 要求安全连接
性能优化配置
[mysqld]
# 查询缓存(MySQL 8.0已移除查询缓存)
# query_cache_type = 0
# query_cache_size = 0# 表定义缓存
table_open_cache = 4000 # 表定义缓存数量
table_definition_cache = 2000 # 表定义信息缓存# 其他优化
innodb_stats_on_metadata = OFF # 禁用统计信息自动更新
innodb_adaptive_hash_index = ON # 启用自适应哈希索引
innodb_print_all_deadlocks = ON # 记录所有死锁信息
MySQL 8 新增配置项
[mysqld]
# MySQL 8新增特性
default_collation_for_utf8mb4 = utf8mb4_0900_ai_ci # 新的默认排序规则
log_error_services = 'log_filter_internal; log_sink_json' # 日志服务组件
binlog_group_commit_sync_delay = 100 # 组提交延迟(微秒)
binlog_group_commit_sync_no_delay_count = 10 # 最大等待事务数
注意事项
- 修改配置文件后需要重启MySQL服务才能生效
- 可以使用
mysqld --verbose --help
查看所有可用选项 - 动态参数可以通过
SET GLOBAL
命令修改而无需重启 - 建议使用
mysqld --defaults-file=/path/to/my.cnf --help --verbose
检查配置是否正确 - MySQL 8.0移除了查询缓存(query cache)相关配置
最佳实践
- 根据服务器内存大小合理设置
innodb_buffer_pool_size
- 生产环境建议启用二进制日志和慢查询日志
- 安全相关配置应根据实际需求严格设置
- 定期检查并优化配置参数
- 使用MySQL配置向导工具(如MySQLTuner)获取优化建议
以上是MySQL 8配置文件的主要参数详解,实际配置应根据具体应用场景和服务器硬件资源进行调整。