MySQL 8 提供了许多配置选项,允许用户根据具体需求调整数据库服务器的行为。以下是一些常见的配置文件属性及其说明,这些配置通常位于 /etc/my.cnf
或 /etc/mysql/my.cnf
文件中,以及 /etc/my.cnf.d/
或 /etc/mysql/my.cnf.d/
目录下的文件中。
基本配置
-
[mysqld]
此部分用于 mysqld 服务的选项。 -
port = 3306
MySQL 服务器监听的端口号,默认是 3306。 -
bind-address = 0.0.0.0
服务器绑定的IP地址。使用0.0.0.0
表示接受所有IPv4地址的连接。 -
datadir = /var/lib/mysql
数据库文件的存储目录。 -
socket = /var/lib/mysql/mysql.sock
MySQL 进程间通信使用的 socket 文件路径。
安全配置
-
skip-grant-tables
在没有密码的情况下启动 MySQL,这对于丢失 root 密码的恢复过程很有用。生产环境中应谨慎使用。 -
ssl-cipher =
用于指定 SSL 加密时使用的密码套件。 -
skip-networking
禁止通过网络连接到 MySQL。如果数据库只通过本地应用访问,启用此选项可以增强安全性。 -
require_secure_transport = ON
要求客户端连接使用安全传输(SSL/TLS)。如果你的数据库连接需要经过不安全的网络,考虑启用此选项。
性能调优
-
innodb_buffer_pool_size = 128M
InnoDB 存储引擎的缓冲池大小。这是影响 MySQL 性能最重要的设置之一。 -
innodb_log_file_size = 50M
InnoDB 日志文件的大小,影响数据库的恢复时间和写入性能。 -
innodb_flush_log_at_trx_commit = 1
控制日志写入磁盘的策略,平衡性能和数据完整性。 -
max_connections = 151
允许的最大连接数。根据系统资源和需求进行调整。 -
query_cache_size = 0
在 MySQL 8.0 中,查询缓存被默认禁用(设置为0),因为它可能导致性能问题。 -
table_open_cache = 2000
打开表的数量的缓存大小。增大此值可以提高数据库操作的速度,特别是在操作许多表的应用中。 -
thread_cache_size
用于缓存线程的数量。合理设置此值可以减少线程创建和销毁的开销,提升系统性能。 -
tmp_table_size
和max_heap_table_size
控制内存临时表的最大大小。对于执行大量复杂查询(如大量的JOIN操作)的数据库,增加这些值可能会提高性能。 -
innodb_flush_method
设置 InnoDB 的数据写入磁盘的方法。不同的设置会影响性能和数据的一致性。 -
innodb_lock_wait_timeout
InnoDB 在回滚事务前等待获取锁的时间。对于高并发的应用,可能需要调整此值以减少锁争用。
日志管理
-
general_log = 0
是否启用通用查询日志。默认关闭,因为它会记录所有的 MySQL 查询并影响性能。 -
slow_query_log = 1
是否启用慢查询日志,用于记录执行时间超过long_query_time
秒的查询。 -
slow_query_log_file = /var/log/mysql/mysql-slow.log
慢查询日志文件的路径。 -
long_query_time = 2
定义什么样的查询应该被认为是慢查询,单位是秒。 -
log_error
错误日志文件的路径,用于记录启动、运行或停止mysqld时遇到的问题。 -
audit_log_policy
配置审计日志策略,允许记录数据库活动,对于满足合规要求非常有用。
复制相关
-
server-id = 1
服务器的唯一ID,复制设置中需要。 -
log_bin = /var/log/mysql/mysql-bin.log
二进制日志文件的位置,用于复制和数据恢复。 -
binlog_format = row
二进制日志的格式,row
、statement
和mixed
之间选择。
其他配置
-
character-set-server = utf8mb4
服务器的默认字符集,utf8mb4
是推荐的字符集,支持更多的 Unicode 字符。 -
collation-server = utf8mb4_unicode_ci
服务器的默认排序规则。 -
lower_case_table_names
设置表名的大小写敏感性。在 Windows 上通常设置为 1,而在 Linux 上设置为 0 或 2,根据文件系统的区分大小写能力而定。 -
max_allowed_packet
定义 MySQL 网络协议中单个数据包的最大大小。对于大量大型查询或大型行操作,可能需要增加此值。 -
group_replication
配置组复制,作为 MySQL 高可用性和扩展性解决方案的一部分。
备份和恢复
-
expire_logs_days
自动删除二进制日志文件的天数。设置此参数可以帮助管理磁盘空间。 -
binlog_expire_logs_seconds
MySQL 8.x 引入的新配置项,以秒为单位自动删除二进制日志文件,提供比expire_logs_days
更精细的控制。
复制和高可用性
-
gtid_mode = ON
启用全局事务标识符(GTID),简化复制和故障恢复过程。 -
enforce_gtid_consistency
确保只有可以安全创建GTID的事务才会执行,有助于保持复制的一致性。 -
slave_parallel_type
和slave_parallel_workers
在从服务器上配置并行复制,可以显著提高复制性能和吞吐量。