mysql5.0升级8.0完成后,服务器重启引发"#1449 - The user specified as a definer ('mysql.infoschema'@'localhost') does not exist"异常小结

这篇具有很好参考价值的文章主要介绍了mysql5.0升级8.0完成后,服务器重启引发"#1449 - The user specified as a definer ('mysql.infoschema'@'localhost') does not exist"异常小结。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

遇到的问题:

问题一:ERROR 1449 (HY000): The user specified as a definer ('mysql.infoschema'@'localhost') does not exist

异常原因:未知
  • 解决办法:

  验证指定的用户('mysql.infoschema'@'localhost')是否存在于mysql数据库中

  SELECT User FROM mysql.user WHERE User = 'mysql.infoschema' AND Host = 'localhost';

如果用户不存在,可以使用以下命令创建该用户文章来源地址https://www.toymoban.com/news/detail-746978.html

  CREATE USER 'mysql.infoschema'@'localhost';
如果用户已经存在,但没有必要的权限,则可以使用grant语句授予所需的权限
  GRANT ALL PRIVILEGES ON *.* TO 'mysql.infoschema'@'localhost';
如果SQL语句要求对特定表具有SELECT权限,则可以使用以下命令
  GRANT SELECT ON database_name.table_name TO 'mysql.infoschema'@'localhost';

问题二:执行CREATE USER 'mysql.infoschema'@'localhost';时出现 ERROR 1726 (HY000): Storage engine 'MyISAM' does not support system tables. [mysql.db]

异常原因:"mysql.db"系统表的存储引擎和mysql指定的存储引擎不一致;
  • 解决办法:
       查询mysql指定的存储引擎是InnoDB还是MyISAM,具体查询方式根据自己的环境查询,我的环境是docker-compose创建docker镜像的方式部署,通过yaml文件将my.cnf文件挂载进去,具体在my.cnf的default-storage-engine=INNODB字段;
    执行以下sql切换表的存储引擎,或者在my.cnf文件里更改存储引擎为你表相应的存储引擎.
    	# 查询db表的存储引擎是什么
    		SHOW TABLE STATUS LIKE 'db';
      # 切换其他相关表的存储引擎
      	alter table mysql.user ENGINE=InnoDB;
    		alter table mysql.db ENGINE=InnoDB;
    		alter table mysql.tables_priv ENGINE=InnoDB;
    		alter table mysql.columns_priv ENGINE=InnoDB;
    		alter table mysql.procs_priv ENGINE=InnoDB;
    		alter table mysql.proxies_priv ENGINE=InnoDB;
    
    切换引擎时可能会导致数据库重,所以以上每个引擎请单独执行。

问题三: 执行完成后再次运行"CREATE USER 'mysql.infoschema'@'localhost';"创建用户时,出现user表数据宽度不一样的问题。

异常原因:user表切换引擎导致表结构更改,无法完整创建用户
  • 解决办法:
      找一个干净的相同版本的mysql,从里面将user表里的数据转换成sql语句(备份),再删除有问题数据库的user表,执行sql(恢复).

问题四: 执行完成后mysql连接会断开,报密码错误。

异常原因:由于user表时copy过来的,密码本身是被特定算法加密的,user表中的加密后的密钥还原回来后并不是原密码,无法将密码正确存储与还原,导致密码错误。
  • 解决办法:
    在my.cnf文件里面加入skip_grant_tables跳过密码验证。

问题五:加入后无效或无法跳过密码验证

异常原因:未知
  • 解决办法:
    将原设备的mysq的data数据文件copy到另外一台真实的设备,并且在真机原生安装mysql,将数据库映射到原data数据,通过真机自身的命令行使用--skip_grant_tables执行启动,跳过密码登陆,再将数据全量备份,重置原设备的数据库,再重新将原数据导回,问题解决。

到了这里,关于mysql5.0升级8.0完成后,服务器重启引发"#1449 - The user specified as a definer ('mysql.infoschema'@'localhost') does not exist"异常小结的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包