参考文档:
服务器系统变量https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html
MySQL 8.0 中的新功能https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.htmlMySQL 8.0 中添加、弃用或删除的服务器和状态变量和选项
https://dev.mysql.com/doc/refman/8.0/en/added-deprecated-removed.htmlInnoDB启动选项和系统变量
https://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html
mysql8.0.40版本最新配置
mysql.cnf配置文件
# 客户端程序连接MySQL服务器的相关配置
# 官网配置地址https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html
# MySQL 8.0 中添加、弃用或删除的服务器和状态变量和选项https://dev.mysql.com/doc/refman/8.0/en/added-deprecated-removed.html
[client]
# 客户端默认字符集,用于设置客户端与服务器通信时使用的字符编码
# 默认值:取决于系统环境,通常为 latin1
# 建议值:utf8mb4,以支持更广泛的字符,特别是在处理多语言数据时
default-character-set=utf8mb4
[mysql]
# MySQL命令行客户端的默认字符集,与[client]中的设置类似
# 默认值:取决于系统环境,通常为 latin1
# 建议值:utf8mb4
default-character-set=utf8mb4
[mysqld]
#Mysql服务的唯一编号 每个mysql服务Id需唯一
server-id = 1
# 127.0.0.1 可以绑定ip地址或者仅允许本地访问,默认情况下我们只接受来自主机的连接
#bind-address = 127.0.0.1
bind-address=0.0.0.0
# 服务器监听的网络端口号,用于接收客户端的连接请求
# 默认值:3306
# 建议值:如果没有端口冲突且无需特殊配置,保持默认值 3306
port=3306
# 设置时区
default-time-zone = '+8:00'
# default-time-zone = 'Asia/Shanghai'
# 服务器使用的本地套接字文件路径,用于本地客户端的连接
# 默认值:/tmp/mysql.sock(不同系统可能有所不同)
# 建议值:保持默认或根据系统实际情况调整,例如 /var/lib/mysql/mysql.sock
socket=/var/lib/mysql/mysql.sock
# 服务器运行时所使用的用户,以特定用户身份运行服务器以确保安全性和权限管理
# 默认值:mysql
# 建议值:保持默认的 mysql 用户
user=mysql
# 数据库文件的存储目录,包括数据文件、日志文件等
# 默认值:/var/lib/mysql(不同系统可能有所不同)
# 建议值:根据实际磁盘存储布局和需求设置,确保有足够的空间和合适的权限
datadir=/var/lib/mysql
# 错误日志的路径和文件名,记录服务器启动、运行和停止过程中的错误信息、警告信息等
# 默认值:主机名.err,位于数据目录下
# 建议值:设置为一个便于查看和管理的路径,如 /var/log/mysql/error.log
log-error=/var/log/mysql/error.log
# 慢查询日志的路径和文件名,记录执行时间超过阈值的 SQL 查询语句
# 默认值:未启用(需手动配置开启)
# 建议值:设置为一个便于分析的路径,如 /var/log/mysql/slow.log
slow_query_log_file=/var/log/mysql/slow.log
# 是否启用慢查询日志,0 表示禁用,1 表示启用
# 默认值:0
# 建议值:在开发和生产环境中,通常建议启用,以便进行性能优化
slow_query_log=1
# 慢查询的时间阈值,单位为秒,超过该时间的查询将被记录到慢查询日志中
# 默认值:10
# 建议值:根据系统性能和应用需求设置,一般在 1 - 5 秒之间
long_query_time=2
#检索的行数必须达到此值才可被记为慢查询
# 默认值:0
min_examined_row_limit=10
# 最大连接数,限制同时连接到服务器的客户端数量
# 默认值:151(不同版本可能略有差异)
# 建议值:根据应用的并发连接需求设置,一般为几百到数千,需考虑服务器资源
max_connections=2000
# 一个连接在空闲多长时间后自动关闭,单位为秒
# 默认值:28800(8 小时)
# 建议值:根据应用的连接使用模式设置,一般在 60 - 600 秒之间,避免资源浪费
wait_timeout=600
# 交互式客户端连接空闲超时时间,单位为秒,类似 wait_timeout,但针对交互式客户端
# 默认值:28800(8 小时)
# 建议值:一般与 wait_timeout 设置相同或根据实际情况微调
interactive_timeout=600
#默认值 (macOS)2
#默认值 (Unix) 0
#默认值(Windows) 1
#如果设置为 0,则表名将按指定方式存储,并且比较区分大小写。如果设置为 1,则表名将以小写形式存储在磁盘上,并且比较不区分大小写。如果设置为 2,则表名将按给定方式存储,但以小写形式进行比较
lower_case_table_names=1
# 默认的存储引擎,选择数据库表使用的默认存储引擎
# 默认值:InnoDB
# 建议值:InnoDB,因其支持事务和外键等特性,适用于大多数应用场景
default-storage-engine=InnoDB
# InnoDB缓冲池的大小,用于缓存数据页和索引页,提高读写性能
# 默认值:取决于服务器内存大小和系统设置,一般较小
# 建议值:根据服务器内存大小设置,通常为服务器内存的 50% - 70%,例如服务器有 8G 内存,可设置为 4G - 5.6G 左右
innodb_buffer_pool_size=1G
# InnoDB缓冲池实例的数量,将缓冲池划分为多个实例可以提高并发性能
# 默认值:8 (or 1 if innodb_buffer_pool_size < 1GB)
# 建议值:如果服务器有多核处理器且内存较大,可以设置为与 CPU 核心数相同或接近,例如 4 或 8
innodb_buffer_pool_instances=4
# InnoDB日志缓冲区大小,用于临时存储重做日志信息
# 默认值:16M(不同版本可能略有差异)
# 建议值:一般在 8M - 64M 之间,根据服务器内存和写入负载调整
innodb_log_buffer_size=16M
# InnoDB文件打开数量限制,控制 InnoDB 能够同时打开的文件数量
# 默认值:300(不同版本可能略有差异)
# 建议值:根据系统资源和数据库应用情况设置,一般在 1000 - 5000 之间
innodb_open_files=1000
# 用于设置 InnoDB 线程的并发数量,控制 InnoDB 内部的并发操作
# 默认值:0(被解释为无限并发(无限制))
# 建议值:如果服务器有多核处理器,可以设置为 CPU 核心数的 1 - 2 倍,例如 4 或 8
innodb_thread_concurrency=4
# 用于设置 InnoDB 数据页的大小,可选值有 4K、8K、16K、32K、64K
# 默认值:16K
# 建议值:一般保持默认值 16K,除非有特殊的存储需求和性能优化需求
innodb_page_size=16K
# 用于设置 InnoDB 自适应哈希索引的启用状态
# 默认值:1(启用)
# 建议值:一般保持启用状态,除非在特定的性能测试中发现问题,可以尝试禁用(设置为 0)
innodb_adaptive_hash_index=1
# 用于设置 InnoDB 双写缓冲区的启用状态,双写缓冲区用于保证数据的完整性
# 默认值:1(启用)
# 建议值:一般保持启用状态,除非对性能有极致追求且能接受一定的数据风险,可以尝试禁用(设置为 0)
innodb_doublewrite=1
# 用于设置 InnoDB 锁等待超时时间,单位为秒,当一个事务等待锁的时间超过该值时,会回滚事务
# 默认值:50
# 建议值:根据应用的并发事务情况设置,一般在 30 - 120 秒之间
innodb_lock_wait_timeout=50
# 用于设置 InnoDB 回滚段的数量,回滚段用于事务的回滚操作
# 默认值:128(不同版本可能略有差异)
# 建议值:根据并发事务的数量进行调整,一般在 64 - 256 之间
innodb_rollback_segments=128
# 用于设置 InnoDB 预读的方式和数量,预读可以提高数据读取的效率
# 默认值:56
# 建议值:可以根据数据库的访问模式进行调整,例如设置为随机预读(random read-ahead)或调整预读的数量
innodb_read_ahead_threshold=56
# 用于设置 InnoDB 脏页刷新的频率和方式,脏页是指内存中已修改但未写入磁盘的数据页
# 默认值:0
# 设置为 0 则禁用 innodb_flush_neighbors。同一范围内的脏页不会被刷新。
# 设置为 1 会刷新同一范围内的连续脏页。
# 设置为 2 会刷新相同范围内的脏页。
innodb_flush_neighbors=1
# MyISAM表在进行索引重建或排序操作时使用的缓冲液大小,影响 MyISAM 表的索引操作性能
# 默认值:8M(不同版本可能略有差异)
# 建议值:根据服务器内存和 MyISAM 表的使用情况设置,一般在 32M - 256M 之间
myisam_sort_buffer_size=64M
# MyISAM存储引擎的键缓存大小,用于缓存 MyISAM 表的索引块,提高索引访问速度
# 默认值:8M(不同版本可能略有差异)
# 建议值:根据 MyISAM 表的数量和索引大小设置,一般在 16M - 128M 之间
key_buffer_size=32M
# 临时表空间的相关配置,用于存储临时表的数据
# 临时表空间的存储目录
tmpdir=/tmp
# 用于设置 MySQL 服务器的字符集
# 默认值:latin1
# 建议值:utf8mb4,以支持更广泛的字符集
character-set-server=utf8mb4
# 用于设置排序规则
# 默认值:latin1_swedish_ci
# 建议值:utf8mb4_general_ci 或 utf8mb4_unicode_ci,根据具体需求选择
collation-server=utf8mb4_general_ci
#设置client连接mysql时的字符集,防止乱码
init_connect=SET NAMES utf8mb4
# 用于设置线程缓存的大小,线程缓存可以减少线程创建和销毁的开销
# 默认值:-1(表示自动调整大小;不要分配该文字值)
# 默认值基于以下公式,上限为 100:8 + (max_connections / 100)
# 建议值:根据服务器的并发连接情况设置,一般在 10 - 100 之间
# thread_cache_size=20
# 用于设置表的打开缓存数量,减少表打开和关闭的开销,所有线程打开的表数。增加此值会增加mysqld所需 的文件描述符数
# 默认值:4000
# 建议值:根据服务器上同时打开的表的数量进行调整,一般在 100 - 1000 之间
table_open_cache=1000
# 用于设置每个连接的排序缓冲区大小,用于排序操作
# 默认值:256K
# 建议值:根据排序操作的复杂度和数据量设置,一般在 1M - 4M 之间
sort_buffer_size=2M
# 用于设置每个连接的读缓冲区大小,用于优化表扫描操作
# 默认值:128K
# 建议值:根据表的数据量和读取频率设置,一般在 512K - 2M 之间
read_buffer_size=2M
# 用于设置每个连接的二进制日志缓存大小,用于存储未提交的二进制日志事件
# 默认值:32K
# 建议值:如果有大量的二进制日志记录操作,可以适当增大,例如 64K - 256K
binlog_cache_size=64K
# 用于设置每个连接的临时表大小限制,防止单个连接创建过大的临时表\
# 定义存储引擎创建的内部内存临时表的最大大小MEMORY(从 MySQL 8.0.28 开始)TempTable 。如果内部内存临时表超出此大小,则会自动转换为磁盘上的内部临时表
# 默认值:16M
# 建议值:根据应用程序中临时表的使用情况设置,一般在 32M - 128M 之间
tmp_table_size=32M
# 用于设置内存中临时表的总大小限制,当所有连接的临时表总大小超过该值时,会将临时表转换为磁盘临时表
# 默认值:16M
# 建议值:根据服务器内存和应用程序的临时表使用情况设置,一般在 64M - 256M 之间
max_heap_table_size=64M
# 用于设置连接的超时时间,单位为秒,当连接建立后在该时间内没有活动则会被关闭
# 默认值:10(秒)
# 建议值:根据应用的连接使用模式设置,一般在 300 - 1800 秒之间
connect_timeout=300
# 用于设置网络相关的缓冲区大小,优化网络传输性能
# 默认值:100k
# 接收缓冲区大小
net_buffer_length=16K
# 发送缓冲区大小
# 默认值:60秒
net_write_timeout=60
# 读取缓冲区大小
# 默认值:30秒
net_read_timeout=60
# 用于设置 MySQL 服务器的安全模式,限制一些危险的操作
# 默认值:ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ZERO_IN_DATE NO_ZERO_DATE ERROR_FOR_DIVISION_BY_ZERO NO_ENGINE_SUBSTITUTION
# 建议值:在生产环境中,如果对安全性有较高要求
# 文档地址:https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
# 用于设置 InnoDB 事务隔离级别,可选值有 READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE
# 默认值:REPEATABLE READ
# 建议值:根据应用的事务隔离需求设置,一般在并发度较高且对数据一致性要求不是特别严格的场景下,可以选择 READ COMMITTED;在对数据一致性要求较高的场景下,选择 REPEATABLE READ 或 SERIALIZABLE
transaction_isolation=REPEATABLE-READ
# 用于设置 MySQL 服务器的系统变量,例如可以设置一些全局的参数或调整某些特定的行为
[mysqldump]
# 设置备份时的最大允许数据包大小,防止因数据量过大导致备份失败
# 默认值:16M
# 建议值:根据数据库中最大表的大小进行调整,例如 64M 或更大,如果备份大表时出现问题可适当增大
max_allowed_packet=32M
[mysqladmin]
# 设置连接 MySQL 服务器时的超时时间,单位为秒
# 默认值:无(取决于系统设置)
# 建议值:根据网络环境和操作需求设置,一般在 10 - 60 秒之间
connect_timeout=30
[mysqlcheck]
# 设置检查和修复表时的最大允许数据包大小
# 默认值:16M
# 建议值:根据数据库中表的大小进行调整,一般在 32M - 128M 之间
max_allowed_packet=64M
[mysqlimport]
# 设置导入数据时的最大允许数据包大小
# 默认值:16M
# 建议值:根据要导入的数据文件大小进行调整,一般在 32M - 128M 之间
max_allowed_packet=64M