升级MySQL 5.7至8.0后启动报错:mysql.infoschema@localhost不存在
解决MySQL 5.7升级至8.0后重启报错:定义者'mysql.infoschema'@'localhost'不存在
我之前从MySQL 5.7升级到8.0的时候也踩过这个一模一样的坑,跟你唠唠原因和具体的解决办法:
问题根源
MySQL 8.0对系统元数据的管理做了架构调整——专门新增了mysql.infoschema这个系统账号,用来负责information_schema库的表空间操作,而MySQL 5.7里根本没有这个账号。如果升级过程中,要么是升级脚本没完整执行,要么是手动迁移数据时遗漏了系统账号的创建,就会触发这个报错。
一步步解决问题
1. 跳过权限检查启动MySQL
现在正常启动会报错,得先以安全模式启动,绕开权限验证:
# 先停掉当前异常的MySQL服务 systemctl stop mysqld # 启动安全模式,同时关闭网络连接避免外部风险 mysqld_safe --skip-grant-tables --skip-networking &
2. 创建并授权缺失的系统账号
直接登录MySQL(不需要输入密码),执行以下SQL:
mysql -u root # 创建mysql.infoschema账号,注意MySQL 8.0默认用caching_sha2_password认证插件 CREATE USER 'mysql.infoschema'@'localhost' IDENTIFIED WITH caching_sha2_password BY ''; # 授予该账号对information_schema库的全部权限,这是它的本职工作 GRANT ALL PRIVILEGES ON information_schema.* TO 'mysql.infoschema'@'localhost'; # 刷新权限让配置立即生效 FLUSH PRIVILEGES;
3. 恢复正常启动
先关闭安全模式的进程,再正常启动MySQL:
# 关闭安全模式下的MySQL实例 mysqladmin -u root shutdown # 正常启动服务 systemctl start mysqld
额外提醒
- 升级时一定要严格遵循官方流程:先做全量数据备份,再用官方推荐的升级工具(比如MySQL 8.0里可以用
mysqld --upgrade=FORCE确保系统表和账号被正确更新) - 如果是用rpm/deb包管理器安装的MySQL,升级过程通常会自动处理系统账号,但手动编译或数据迁移的场景很容易出现这类问题
- 别随便修改
mysql.infoschema这个账号的权限,它是MySQL内部管理元数据的专用账号,乱改可能引发其他系统故障
内容的提问来源于stack exchange,提问作者stackzhao
相关产品推荐
相关产品推荐

