搭建 MySQL 服务时,合理的配置能显著提升数据库的稳定性、性能和安全性。以下是几个关键配置项及注意事项,适用于生产环境或对性能有要求的场景。
1. 字符集与排序规则
确保数据库默认字符集设置为 utf8mb4,以支持完整的 UTF-8 编码(如 emoji 表情)。
- 在配置文件(my.cnf 或 my.ini)中设置: character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci - 建议客户端连接也使用 utf8mb4,避免乱码问题。2. 存储引擎选择
默认使用 InnoDB 引擎,它支持事务、行级锁和外键,适合大多数业务场景。
- 确保配置中启用 InnoDB: default-storage-engine = InnoDB - 避免使用已废弃的 MyISAM 引擎,尤其在需要数据安全和并发写入的场景。3. 内存与缓存配置
合理分配内存资源可大幅提升查询性能。
- innodb_buffer_pool_size:最重要的参数之一,建议设置为主机内存的 50%~70%(例如 16GB 内存可设为 10G)。 - key_buffer_size:仅对 MyISAM 有效,若不用 MyISAM 可调小(如 16M)。 - query_cache_type 和 query_cache_size:MySQL 8.0 已移除查询缓存,如使用旧版本需谨慎启用,高并发下可能成为瓶颈。4. 日志配置
日志对故障排查和数据恢复至关重要。
- 启用错误日志: log-error = /var/log/mysql/error.log - 生产环境建议开启慢查询日志,便于性能优化: slow_query_log = 1 slow_query_log_file = /var/log/mysql/slow.log long_query_time = 2 - 二进制日志(binlog)用于主从复制和数据恢复: log-bin = /var/log/mysql/mysql-bin server-id = 1(主从复制必需) binlog-format = ROW(推荐格式)5. 安全性配置
避免使用默认配置带来的安全风险。
- 修改 root 用户默认密码,并限制远程登录: ALTER USER 'root'@'localhost' IDENTIFIED BY '强密码'; - 删除匿名用户和测试数据库: DROP DATABASE IF EXISTS test; DELETE FROM mysql.user WHERE User=''; - 配置 bind-address,避免监听所有 IP(除非需要远程访问): bind-address = 127.0.0.1(本地访问) 或指定内网IP,避免暴露到公网6. 连接与超时设置
根据应用负载调整连接数和超时时间。
- max_connections:根据并发需求设置(如 500~2000),过高可能耗尽系统资源。 - wait_timeout 和 interactive_timeout:控制空闲连接存活时间,建议设为 300~600 秒。 - skip-name-resolve:跳过 DNS 反向解析,提升连接速度并减少潜在故障。基本上就这些。根据实际硬件和业务需求微调,上线前做好压力测试和备份策略。
