The user specified as a definer ('root'@'%') does not exist when using LOCK TABLES
用MySQL的导出语句或备份时的异常
在Linux下:
mysqldump -hlocalhost -uroot -prootdatabasename > /home/myfile/seattle.sql
在Windows下:
mysqldump -hlocalhost -uroot -prootdatabasename> e:/myfile/seattle.sql
出现了如下问题:
mysqldump: Got error: 1449: The user specified as a definer ('root'@'%') does not exist when using LOCK TABLES
分析后发现,是因为存储过程的创建是seattle用户定义者,而现在备份的是用root用户。
还有数据库在使用状态,所以导出数据时报错,不是存储过程定义者就需要锁表
--lock-all-tables,-x
在开始导出之前,提交请求锁定所有数据库中的所有表,以保证数据的一致性。
mysqldump: Got error: 1449: The user specified as a definer ('root'@'%') does not exist when using LOCK TABLES这是一个全局读锁,并且自动关闭 --single-transaction 和 --lock-tables 选项。
在mysqldump时使用 -x 选项解决此问题。
解决方案有两种:
第一种:直接加参数
mysqldump -hlocalhost -uroot -proot -x databasename> e:/myfile/seattle.sql
再执行导出就OK
----------------------------------------------------------------------------------------------------------------
第二种:赋予当前导出者seattle所有的权限
只要给seattle用户再添加一个对全部host都有可以访问的权限
操作如下:
登陆mysql
mysql -u root -proot
mysql >grant all privileges on *.* to seattle@"%"identified by "123";
mysql >flush privileges;
在cmd执行导出就OK
----------------------------------------------------------------------------------------------------------------
以上问题可以得出,创建存储过程如果默认参数在备份时有局限性。