MySQL从8.0.35升级至8.0.36后无法启动,提示sys/sys_config表空间缺失
MySQL从8.0.35升级至8.0.36后无法启动,提示sys/sys_config表空间缺失
遇到这种情况别慌,咱们一步步拆解问题并解决。首先得理清根源:你之前从MySQL 5.7升级到8.0时,系统默认的sys库可能没正确创建,或者后续被误删了;而这次升级到8.0.36时,MySQL的升级脚本需要访问sys.sys_config表来完成升级流程,结果找不到对应的表空间文件,直接导致启动失败。
下面是具体的解决步骤:
1. 先停止MySQL服务(如果它还在启动循环的话)
systemctl stop mysql
2. 在你的datadir下创建sys目录并设置正确权限
从你的my.cnf能看到datadir路径是/mnt/HC_Volume_9595394/mysql/,执行以下命令:
mkdir /mnt/HC_Volume_9595394/mysql/sys chown mysql:mysql /mnt/HC_Volume_9595394/mysql/sys
3. 以跳过权限检查的方式临时启动MySQL
这样能让你不用密码就能连接数据库,手动创建缺失的表:
mysqld_safe --skip-grant-tables &
4. 连接到MySQL并创建sys_config表
打开新的终端窗口,直接连接MySQL:
mysql
然后执行升级脚本里失败的那段建表SQL:
CREATE TABLE IF NOT EXISTS sys.sys_config ( variable VARCHAR(128) PRIMARY KEY, value VARCHAR(128), set_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, set_by VARCHAR(128) ) ENGINE = InnoDB;
5. (可选但建议)插入默认的sys配置数据
为了避免后续出现其他潜在问题,把sys库的默认配置数据补进去:
INSERT INTO sys.sys_config (variable, value) VALUES ('diagnostics.allow_i_s_tables', 'OFF'), ('diagnostics.include_raw', 'OFF'), ('ps_thread_trx_info.max_length', '65535'), ('statement_performance_analyzer.limit', '100'), ('statement_performance_analyzer.view', 'NULL'), ('statement_truncate_len', '64');
6. 正常关闭并重启MySQL服务
先关闭临时启动的MySQL进程:
mysqladmin shutdown
然后正常启动服务:
systemctl start mysql
做完这些操作,MySQL应该就能正常启动了。后续记得升级前一定要备份好datadir里的所有数据,避免类似的意外情况再次发生。
备注:内容来源于stack exchange,提问作者clarkk
相关产品推荐
相关产品推荐

