-
--報錯信息:
-
2018-06-07T19:52:26.943083+08:00 0 [System] [MY-010116] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.11) starting as process 37992
-
100 200
-
100 200
-
2018-06-07T19:52:31.581790+08:00 1 [ERROR] [MY-011087] [Server] Different lower_case_table_names settings for server ('0') and data dictionary ('1').
-
2018-06-07T19:52:31.582111+08:00 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
-
2018-06-07T19:52:31.582140+08:00 0 [ERROR] [MY-010119] [Server] Aborting
-
2018-06-07T19:52:33.348638+08:00 0 [System] [MY-010910] [Server] /usr/local/mysql/bin/mysqld: Shutdown complete (mysqld 8.0.11) MySQL Community Server - GPL.
-
-
--背景知識:
-
MySQL8.0 新增了data dictionary的概念,數據初始化的時候在linux下默認使用lower-case-table-names=0的參數,數據庫啟動的時候讀取的my.cnf文件中的值。若二者值不一致則在mysql的錯誤日志中記錄報錯信息。
-
-
在MySQL 5.7之前則允許數據庫初始化和啟動的值不一致且以啟動值為准。
-
在MySQL 官方提供的RPM包中默認是使用lower- case-table-names=0,不太適合生產環境部署。在生產環境建議使用官方的二進制包。
-
--官方解釋:
-
After initialization, is is not allowed to change this setting.So "lower_case_table_names" needs to be set together with --initialize .
-
--解決辦法:
-
在mysql數據庫初始化的時候指定不區分大小寫,在數據庫實例啟動的時候也要指定不區分大小寫。即數據庫初始化時lower_case_table_names的值和數據庫啟動時的值需要一樣。
-
在實際開發生產的應用中多是不區分大小寫的即lower- case-table-names=1。
-
--操作步驟:
-
/usr/local/mysql/bin/mysqld --user=mysql --lower- case-table-names=1 --initialize-insecure --basedir=/usr/local/mysql --datadir=/data/mysql/node1
-
my.cnf
-
[mysqld]
-
lower_case_table_names = 1
-
-
若初始化和啟動值不一樣則會在錯誤日志中有如下提示:
-
[ERROR] [MY- 011087] [Server] Different lower_case_table_names settings for server ('1') and data dictionary ('0').
-
[ERROR] [MY-011087] [Server] Different lower_case_table_names settings for server ('0') and data dictionary ('1').
-
--參考資料:
-
https://bugs.mysql.com/bug.php?id=90695