版权说明: 本文由博主keep丶原创,转载请注明出处。
原文地址: https://blog.csdn.net/qq_38688267/article/details/117745441
场景介绍
安装MySQL8后,从MySQL5.7中使用mysqldump
命令备份数据,然后同步到MySQL8中。具体命令如下:
mysqldump -uroot -p --all-databases > /root/dump.sql
然后通过source
命令将数据导入到MySQL8中,导入完成后,查询Table列表时,MySQL8报错:Mysql Error:The user specified as a definer (‘mysql.infoschema’@’localhost’) does not exist
。
寻找网络上的解决方案
稍微靠谱一点的方案:https://blog.wmsay.com/article/44。但是还是没有解决我的问题。。。
自己解决
仔细思考后觉得问题可能出在dump.sql
上,因为我直接是指定了--all-databases
所有库,可能将mysql、infomation_schema
等库都备份出来了,然后导致MySQL8的这些库的数据被覆盖,从而导致报错。
为了证实我的想法,我在本地试用了一下mysqldump --all-databases
命令,看了下里面的数据:
使用mysqldump --all-databases
会备份mysql
库
不会备份infomation_schema、performance_schema
库。
最后解决
原因是mysql
库数据MySQL5.7的数据覆盖,肯定会有问题。索性重新安装一下MySQL8。然后重新Dump一份数据,指定需要Dump的库:
mysqldump -uroot -p --databases mydb1 mydb2 > /root/dump.sql
总结
使用mysqldump
时,不要偷懒使用--all-databases
参数,要使用--databases DB1 DB2 DB3
的方式指定。使用mysqldump --all-databases
会备份mysql
库,容易出问题!