升级MySQL 8后执行show databases报ERROR 1356错误求助
MySQL 8升级后
show databases;报错1356的原因及解决办法 可能原因
- 升级过程中information_schema系统库的
SCHEMATA视图损坏,或视图依赖的表、权限出现异常 - 旧版本(如5.x)系统表结构与MySQL 8不兼容,升级时未完成完整的系统表迁移更新
- 当前执行语句的用户缺少访问
information_schema.SCHEMATA的权限,或视图定义者(definer)权限失效
解决办法
1. 强制重新升级系统表(先备份数据)
停止MySQL服务,以强制升级参数启动服务,让MySQL重新同步系统表结构:
# 停止服务(以systemd为例) systemctl stop mysqld # 强制升级启动 mysqld --upgrade=FORCE --user=mysql &
启动完成后,正常重启服务,再执行show databases;测试。
2. 重建SCHEMATA视图
登录root账户,手动重建损坏的视图:
DROP VIEW IF EXISTS information_schema.SCHEMATA; CREATE DEFINER=`mysql.infoschema`@`localhost` VIEW SCHEMATA AS SELECT CATALOG_NAME, SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME, SQL_PATH FROM mysql.db WHERE SCHEMA_NAME NOT IN ('mysql', 'information_schema', 'performance_schema', 'sys') UNION ALL SELECT 'def' AS CATALOG_NAME, SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME, NULL AS SQL_PATH FROM mysql.information_schema.schemata;
执行后刷新权限:FLUSH PRIVILEGES;,再测试语句。
3. 修复用户权限
确保当前用户拥有访问information_schema的权限:
GRANT SELECT ON information_schema.* TO '你的用户名'@'你的主机地址'; FLUSH PRIVILEGES;
如果是root用户出现问题,可重新授予全局权限:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;
4. 检查数据目录权限
确保MySQL运行用户(通常为mysql)对数据目录拥有完整读写权限:
chown -R mysql:mysql /var/lib/mysql chmod -R 750 /var/lib/mysql
修改后重启MySQL服务。
内容的提问来源于stack exchange,提问作者Naz Tursunkul
相关产品推荐
相关产品推荐

