发现 CentOS 7 下升级 MySQL5.7.23 的一个坑, 以前面升级到 MySQL 5.7.23 的一个集群为例
在我们环境下打开文件描述符个数的参数 open_files_limit 在 MySQL 5.6.21 下都统一配置为 65535, 而 CentOS 7 系统下安装 MySQL5.7.23 的 open_files_limit 参数的默认值为 5000
否则像分区表数量较多的集群, 打开的文件个数过大时, 数据库就会报错.
原因如下:
1,CentOS 7 安装 MySQL5.7.23, 服务管理发生了变化, 从 sysvinit(service MySQL start) 变化为 systemd(systemctl start mysqld.service)
2,CentOS 7 下 Limit 的配置由下面配置文件来决定
全局设置:/etc/systemd/system.conf(如 DefaultLimitNOFILE=65535)
服务设置:[Service] 默认值为 5000, 应该将 LimitNOFILE 修改为 65535
[测试]
1, 全局配置文件 / etc/systemd/system.conf
2,service 配置文件 / usr/lib/systemd/system/mysqld.service
3,MySQL 配置文件 / etc/my.cnf
[结论]
1, 当以 systemd 管理 MySQL 服务时, 在下面 3 个配置文件中同时制定 open_files_limit 参数时, 最终会以 service 配置文件为准
2, 当 service 相关配置值注释掉时, 会以全局配置文件为准
[解决方案]
1, 单台修复方法, 按下面步骤
- # 修改配置
- VIM /usr/lib/systemd/system/mysqld.service
- # 重载
- systemctl daemon-reload
- # 重启服务生效
- systemctl restart mysqld@replica01.service
2, 安装包修复方法, 修改下面两个源文件, 将 5000 增加到 65535, 重新打包发布, 这样新版本默认会保持与 MySQL5.6.21 相同的配置
来源: http://www.linuxidc.com/Linux/2018-10/154979.htm