最近遇到一则重启 MySQL 数据库无法正常启动的情况,日志报错如下
2022-12-08T18:01:27.892389+08:00 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel. 2022-12-08T18:01:27.895035+08:00 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/zcloud' in the path is accessible to all OS users. Consider choosing a different directory. 2022-12-08T18:01:27.898277+08:00 0 [ERROR] [MY-000067] [Server] unknown variable 'foreign_key_checks=0'. 2022-12-08T18:01:27.899041+08:00 0 [ERROR] [MY-010119] [Server] Aborting
尝试在参数文件修改为foreign-key-checks=0 (将下划线修改为中华线)也是无法正常启动。参数文件中去掉foreign_key_checks=0参数,数据库可以正常启动,
数据库启动之后 通过
set global foreign_key_checks=0;和set session foreign_key_checks=0;都可以手动进行参数设置的,如下测试
mysql> show variables like '%foreign_key_checks%';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| foreign_key_checks | ON |
+--------------------+-------+
1 row in set (0.00 sec)
mysql> set global foreign_key_checks=0;
Query OK, 0 rows affected (0.00 sec)
mysql> set session foreign_key_checks=0;
Query OK, 0 rows affected (0.00 sec)
但是写入参数文件,数据库重启之后无法正常启动,报unknown variable 的错误,然后数据库直接无法启动。
查看官方手册
https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_foreign_key_checks
及 https://dev.mysql.com/doc/refman/8.0/en/server-system-variable-reference.html
发现foreign_key_checks参数说明了不能通过参数文件启动。同时发现 MySQL 8.0 有 119 个参数不支持写入参数文件。 照抄如下:有 119 个参数不支持写入参数文件,虽然官方没有明确说明为什么不能写入参数文件,通过请教 Kevin崔Oracle ACE Associate:破坏数据库一些数据安全之类一些参数不允许写入参数文件。
解决方案
参数文件去掉foreign_key_checks=0,数据库启动之后通过set global foreign_key_checks=0配置参数。
参考文档
Server System Variables#sysvar_foreign_key_checks
Server System Variable Reference




