MySQL5.7配置优化
以下是、 MySQL 5.7 完整配置文件 (my.cnf
) 示例。这个配置文件适用于使用 GTID 复制、启用二进制日志、优化缓冲区和缓存,并配置慢查询日志等常见场景。
[client]
port=3306
socket=/data/mysql/data/mysql.sock
[mysqld]
server-id=1
log-bin=mysql-bin
binlog_format=row
binlog-row-image=full
expire_logs_days=7
gtid_mode=on
log-slave-updates=on
enforce-gtid-consistency=true
port=3306
datadir=/data/mysql/data
basedir=/data/mysql
socket=/data/mysql/data/mysql.sock
user=mysql
log-error=/data/mysql/data/mysql-error.log
pid-file=/data/mysql/data/mysqld.pid
ft_min_word_len=1
explicit_defaults_for_timestamp=true
symbolic-links=0
lower_case_table_names=1
skip-name-resolve
innodb_buffer_pool_size=8G
key_buffer_size=32M
join_buffer_size=2M
sort_buffer_size=4M
read_buffer_size=4M
read_rnd_buffer_size=16M
myisam_sort_buffer_size=128M
query-cache-size=0
query_cache_type=0
tmp_table_size=1G
max_heap_table_size=1G
thread_cache_size=64
slow-query-log=on
slow-launch-time=2
slow-query-log-file=/data/mysql/data/mysql-slow.log
log-slow-admin-statements
table-open-cache=1024
max-connections=2000
max_connect_errors=5000
innodb_flush_log_at_trx_commit=2
max_allowed_packet=300M
collation-server=utf8mb4_general_ci
init-connect='SET NAMES utf8mb4'
character-set-server=utf8mb4
skip-character-set-client-handshake
log_bin_trust_function_creators=1
sql-mode="NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
group_concat_max_len=2000
innodb_print_all_deadlocks=1
replicate-ignore-db=mysql
配置文件说明:
-
端口与 socket:
port=3306
和socket=/data/mysql/data/mysql.sock
是常见的设置,用于定义 MySQL 服务的监听端口和 socket 文件位置。
-
二进制日志与复制:
- 启用了 GTID 模式 (
gtid_mode=on
)、二进制日志 (log-bin=mysql-bin
) 和行格式日志 (binlog_format=row
),以支持高效和一致的复制。
- 启用了 GTID 模式 (
-
数据目录:
datadir=/data/mysql/data
和basedir=/data/mysql
指定了 MySQL 的数据和基本目录。
-
错误日志与慢查询日志:
log-error
和slow-query-log
设置确保 MySQL 的运行状态和慢查询记录到指定文件中,方便后续的性能调优。
-
缓存与缓冲区:
- 配置了
innodb_buffer_pool_size=8G
和其他缓存参数,以优化内存使用和查询性能。
- 配置了
-
连接与线程:
- 限制了最大连接数
max-connections=2000
,以防止过多的连接导致服务器资源耗尽。
- 限制了最大连接数
-
字符集:
- 配置了 UTF-8 字符集(
utf8mb4
),适用于大多数语言环境,并支持全 Unicode 字符集(包括表情符号)。
- 配置了 UTF-8 字符集(
-
跳过 DNS 解析:
skip-name-resolve
跳过了主机名解析,这可以加速连接建立,特别是在大量并发连接的环境下。
-
其他优化:
innodb_flush_log_at_trx_commit=2
提供了性能与安全性之间的折中。replicate-ignore-db=mysql
避免复制 MySQL 系统数据库中的数据。
适应性与调优:
- 内存:根据你的实际内存和工作负载,调整
innodb_buffer_pool_size
和其他内存相关的参数。 - 连接数:根据实际使用情况,调整
max-connections
,以平衡连接需求和系统资源。 - 日志文件:确保你有足够的磁盘空间来存储二进制日志和慢查询日志,必要时调整日志保留时间和日志文件大小。
这个配置文件应该覆盖了大多数常见的 MySQL 5.7 使用场景,并进行了适度的优化。如果有特殊的需求,还可以进一步定制和调整。