在执行sql脚本时,没有注意到sql脚本文件包含了对mysql 原始数据库的操作,执行了脚本。
脚本执行成功之后,登录或链接数据库查看数据时报错:
The user specified as a definer (‘mysql.infoschema’@‘localhost’) does not exist.
解决问题思路一:(无效)
登录到mysql数据库发现,执行 show databases 时报如上错误。
既然提示在localhost 上缺少 mysql.infoschema用户,那就创建一个:
create user 'mysql.infoschema'@'localhost' identified by '123456';
但是执行此命令时,会报错:
Storage engine 'MyISAM' does not support system tables. [mysql.user]
后来又尝试更改engine类型,继续创建用户,依然不行,此方法行不通。
解决问题思路二:(无效)
尝试删除mysql database; 从其他备份的数据库中把mysql 复制过来。
drop database mysql;
无法删除mysql,mysql下的某些表无法拒绝访问。
解决问题思路三:(亲测可用)
最终通过强制更新mysql数据库解决,通过强制更新能够修复mysql中的表关系。
更新过程中没有提示,不知道什么时候更新完,我是过了二十分钟才重新启动的服务。
问题玩美解决。
最佳方案,不必重装,原始数据都在,只是修复了mysql 库中的表关系,以及用户信息等。
net stop mysql;
mysqld --upgrade=FORCE;
net start mysql;
之所以执行sql脚本是为了用mycat 实现分库分表,附上mycat 相关命令:
安装mycat前需要先安装jdk和mysql。mycat1.6版本建议使用的jdk是1.7以上版本,mysql建议使用5.6版本(我这里使用是MySQL8)。
安装完jdk和mysql后,进入mycat解压目录下的bin目录。
在打开的cmd命令行窗口中,执行如下命令安装mycat(注意需要管理员账户登录,如果不是请使用管理员身份运行cmd打开命令行窗口,执行如下指令会提示报错):
mycat.bat install
可以使用如下命令启动mycat服务
mycat.bat start
启动后可以通过如下命令查看mycat的运行状态:
mycat.bat status
可以使用如下命令停止mycat服务
mycat.bat stop