一、innodb_buffer_pool_size
即我们 innodb 的缓冲池,默认值才128 兆。
假设你有一台 32G 的服务器,如果使用默认值,就相当于你买了一个大别墅,结果只让你用一个小厕所。
数据库读数据老得往硬盘跑,慢如蜗牛。
建议该参数设置为总内存的 70%,数据缓存够了,速度直接起飞。
二、innodb_io_capacity
它控制着 lnnodb 刷脏页的能力,默认值才 200。
现在都是 SSD 的世界了,它还以为自己在机械硬盘呢?
建议通过 fio 等工具测试自己的磁盘 IOPS,然后设置为该参数的值。
三、innodb_lock_wait_timeout 和 interactive-timeout
这两个参数设置长时间未操作自动断开连接,默认为 8 个小时,这实在是太长了。
interactive-timeout:指 MySQL 服务器关闭交互式连接前等待的秒数。交互式连接通常指通过 MySQL 客户端(如命令行工具)连接数据库的会话,这类连接在 mysql_real_connect() 函数中使用了 CLIENT_INTERACTIVE 选项。
innodb_lock_wait_timeout:指 MySQL 服务器关闭非交互式连接前等待的秒数。非交互式连接通常指通过程序(如 JDBC、Python 等)连接数据库的会话。
这相当于是睡着的连接,占着茅坑不拉屎,配置文件统一修改为 600,即超过 10 分钟自动释放闲置连接 ,避免连接不够用的尴尬。
四、character_set_server
character_set_server 代表我们数据库的文字编码,默认值是 latin1。
这玩意儿既不支持表情,又不支持生僻字,生产环境强烈建议修改为 utf8mb4。
一次性可以搞定服务器数据库,表的字符集,从此告别乱码的烦恼。
五、server_id
server_id 是我们数据库的身份证,默认值是 0。
主从复制架构里面,每个数据库的实例 ID 是不能相同的。
六、log_bin
log_bin 是我们数据库的黑匣子日志,MySQL5.7 默认是关闭的,8.0 默认是开启的。
开启后会记录所有的数据操作,主从复制、数据恢复全依赖于 binlog 目志,生产环境强烈建议开启。
七、binlog_ format
binlog_ format 是我们 binlog 日志的记录模式,默认值是 row。
statement 模式记的是 SQL,遇到 uuid,now 这种函数很可能会造成主从数据不一致,强烈建议生产环境保持 row 格式。
八、expire_logs_days
expire_logs_days 是给我们的 binlog 定个有效期,默认值是 0,代表的是永不删除。
设置好该参数之后既能兼顾数据库的恢复又能节省磁盘空间,可谓是一举两得。
九、慢查询开关slow_query_log
慢查询开关默认是关闭的,慢查询跑疯了都找不到凶手,线上环境强烈建议开启。
十、慢查询阀值long_query_time
慢查询阀值意思是超过多少秒的 SQL 才被认定是慢 SQL ,默认是 10 秒,等 10 秒用户早跑光了。
线上环境改成 1 秒,超过 1 秒的 SQL 直接记录,早发现早优化。
十一、表名区分大小写lower_case_table_names
这个参数有三个可能的值:
0(默认值):表名存储为定义时的大小写,区分大小写。
1:表名存储为小写,不区分大小写。
2:表名存储为定义时的大小写,但不区分大小写(在某些文件系统上不区分大小写的情况下有用)。
在 Linux 平台默认值为 0,表名区分大小写,比较时大小写也是敏感的。
开发写表小 t1 和大 T1 居然是两张表,极容易出错,从跨系统、编码效率、运维角度来说,强烈建议该参数设置为 1,即表名不区分大小写。MySQL 8.0 必须在初始化数据库设置好参数,后面就改不了了。
十二、最大连接数max_connections
最大连接数默认值为 151,访问量一上来就报 too many connection 的报错,跟餐厅抢座一样。
正确的做法是先查历史峰值,设成峰值的 1.5 倍即可。
十三、查询语句超时阀值max_execution_time
查询语句超时阀值,查询语句执行的时间,超过阀值MySQL将自动终止该 SQL 的执行,默认值为 0,不超时,代表一条烂 SQL 的查询能跑到天荒地老,直接把数据库拖死。
生产环境强烈建议修改为 1 万毫秒。
mysql 第34章 默认配置的N个坑