日志文件中的“数据字典升级”后 MySQL 8 不会启动

Posted

技术标签:

【中文标题】日志文件中的“数据字典升级”后 MySQL 8 不会启动【英文标题】:MySQL 8 won't start after "Data dictionary upgrading" in log file 【发布时间】:2019-09-14 17:30:26 【问题描述】:

我正在运行 mysql 8,当我尝试重新启动它时,它突然决定关闭并且不再回来。

在日志中我可以看到这个事件是原因。

但是,我不知道这意味着什么?或者为什么会突然发生这种情况?

2019-04-25T06:36:58.622078Z 0 [Warning] [MY-010909] [Server] /usr/sbin/mysqld: Forcing close of thread 86  user: 'root'.
2019-04-25T06:37:01.363106Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.15)  MySQL Community Server - GPL.
2019-04-25T06:37:04.074285Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.16) starting as process 26628
2019-04-25T06:37:04.077268Z 0 [Warning] [MY-013242] [Server] --character-set-server: 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
2019-04-25T06:37:04.077300Z 0 [Warning] [MY-013244] [Server] --collation-server: 'utf8_unicode_ci' is a collation of the deprecated character set UTF8MB3. Please consider using UTF8MB4 with an appropriate collation instead.
2019-04-25T06:37:04.084875Z 0 [Warning] [MY-012363] [InnoDB] innodb-page-size has been changed from the default value 16384 to 65536.
2019-04-25T06:37:14.212106Z 1 [System] [MY-011090] [Server] Data dictionary upgrading from version '80014' to '80016'.
2019-04-25T06:37:15.910395Z 1 [ERROR] [MY-013178] [Server] Execution of server-side SQL statement 'UPDATE mysql.index_partitions ip JOIN mysql.tablespaces ts ON ts.id = ip.tablespace_id JOIN mysql.table_partitions p ON p.id = ip.partition_id JOIN mysql.tables t ON t.id = p.table_id JOIN mysql.indexes i ON i.table_id = t.id SET ts.options=CONCAT(IFNULL(ts.options,''), IF(LOWER(GET_DD_PROPERTY_KEY_VALUE(t.options,'encrypt_type'))='y' , 'encryption=Y;','encryption=N;')) WHERE t.tablespace_id IS NULL AND i.tablespace_id IS NULL AND p.tablespace_id IS NULL AND ts.engine='InnoDB' AND GET_DD_PROPERTY_KEY_VALUE(t.options,'encrypt_type') IS NOT NULL AND GET_DD_PROPERTY_KEY_VALUE(ts.options,'encryption') IS NULL ' failed with error code = 1267, error message = 'Illegal mix of collations (utf8_general_ci,COERCIBLE) and (utf8_unicode_ci,COERCIBLE) for operation '=''.
2019-04-25T06:37:15.988488Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
2019-04-25T06:37:15.988789Z 0 [ERROR] [MY-010119] [Server] Aborting
2019-04-25T06:37:17.250580Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.16)  MySQL Community Server - GPL.

【问题讨论】:

是否进行了任何自动更新或修补? "[ERROR] [MY-013178] [Server] 执行服务器端 SQL 语句 'UPDATE mysql.index_partitions ip failed with error code = 1267, error message = 'Illegal mix of collat​​ion (utf8_general_ci ,COERCIBLE) 和 (utf8_unicode_ci,COERCIBLE) 用于操作 '=''。”检查字符集***.com/questions/55846631/… 我不知道 不是答案,但如果不是相同的问题,我也有类似的问题。服务器昨晚自动更新到80016,现在无法启动。它无法为我运行 mysql.general_log 的创建查询。显然,这是第一个能够自动更新的版本,因为 DBA 必须在以前的版本上手动运行 mysql_upgrade。 尝试手动运行 mysql_upgrade 看看是否有帮助。我在调试模式下将数据库转储到我的数据库上,所以不能尝试那个 ATM。 【参考方案1】:

将my.cnf中的“utf”替换为“utf8mb4”并重启mysql。

例如我的mysql配置

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
collation-server = utf8mb4_unicode_ci
character-set-server = utf8mb4

more reading

【讨论】:

感谢解决了最初的问题,然后我不得不这样做gist.github.com/rjha/9012d6a077e79f9d3aa31497044fd765 这并没有解决我的问题 :( @MrJ

以上是关于日志文件中的“数据字典升级”后 MySQL 8 不会启动的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL 8 日志系统到底比MYSQL 5.X 好在哪里

windows下mysql-8.0.13主从同步配置方案(读写分离)

windows下mysql-8.0.13主从同步配置方案(读写分离)

mysql开记二进制日志即配置my.cnf中的log_bin参数后无法正常启动,求高手解答!

mysql日志主从复制

linux版mysql安装后mysql的日志文件找不到