You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:16:25