mysql版本升级后如何验证数据库是否正常_mysql验证流程

来源:这里教程网 时间:2026-02-28 20:49:55 作者:

检查 MySQL 服务状态和基础连接

升级后第一件事不是查数据,而是确认服务进程是否真正跑起来了,且能被客户端连上。

systemctl status mysql
service mysqld status
看状态;用
mysql -u root -p
尝试本地登录。常见失败原因包括:socket 路径变更(新版可能默认用
/var/run/mysqld/mysqld.sock
)、
skip-networking
仍启用、或
bind-address
锁死了本地访问。

验证关键系统表和权限是否可读

登录后立刻执行

SELECT 1;
SELECT USER(), VERSION();
,确认会话上下文正常。接着检查
information_schema
mysql
库能否查询:
SELECT COUNT(*) FROM information_schema.TABLES;
SELECT COUNT(*) FROM mysql.user;
。如果报错
Table 'mysql.user' doesn't exist
或提示
plugin column doesn't exist
,说明
mysql_upgrade
没运行或失败——这是升级后最常被跳过的一步。

运行 mysql_upgrade 并关注输出中的 WARNING

MySQL 5.7 升 8.0 后必须手动运行

mysql_upgrade
(8.0.16+ 已弃用,但 5.7→8.0.15 及更早仍需);而 8.0.x 小版本升级(如 8.0.28→8.0.33)通常不再需要。运行时加
--verbose --force
,重点看输出里有没有
WARNING
行,比如:
Warning: The user table is not updated
Column 'password_last_changed' doesn't exist
—— 这类提示往往意味着权限表结构未同步,后续建用户或改密码会出错。

抽样验证业务表的可读性和字符集兼容性

不要全量 SELECT,挑几个典型表:含中文字段的、用

utf8mb4
的、有 JSON 列的、带全文索引的。执行
SHOW CREATE TABLE `t_order`;
看 DDL 是否完整;再
SELECT id, title FROM t_order LIMIT 1;
确认无乱码、无截断。特别注意:若原库用
utf8
(即
utf8mb3
),升级后
SHOW VARIABLES LIKE 'character_set%'
character_set_server
默认变成
utf8mb4
,但旧表的列级字符集不会自动改,插入四字节 emoji 可能失败,得手动
ALTER TABLE ... CONVERT TO CHARACTER SET utf8mb4;

最容易被忽略的是存储过程和触发器里的 SQL_MODE 兼容性——比如旧版允许

GROUP BY
不包含所有非聚合字段,新版 strict mode 下直接报错;还有
sys
schema 是否自动安装(8.0 默认启用,5.7 没这库),会影响部分监控脚本。

相关推荐