想换一个版本的mysql,把原有数据库里面的数据备份。
mysqldump -uxxx -pxxx -A>mysql0106.bak
mysqldump: Got error: 1449: The user specified as a definer (‘wj’@'%’) does not exist when using LOCK TABLES
但却报mysqldump: Got error: 1449错误,而且出现的用户名wj,数据库中并不存在。很多人通过给这个莫名的用户赋予权限从而能够成功导出数据。
于是:grant all on *.* to 'wj'@'%';
果然数据能够成功导出。将导出文件再次导入数据库,并删除wj用户,数据又不能正常导出。
查看,导出文件中,有这样一行
/*!50013 DEFINER=`wj`@`%` SQL SECURITY DEFINER */
将wj用root或其它有相应权限的用户代替,将导出文件再次导入数据库,并删除wj用户,数据能正常导出。
为什么会这样,以及为什么会涉及到wj用户产生,可能和导出数据的设置有关。
查看错误日志,发现很多[Warning] IP address could not be resolved
根本原因是
主控服务器的网卡属性的DNS不好,或都受控域名的DNS无法解析。
修改/etc/resolv.conf中对应的ip和DNS配置或是修改my.cnf
[mysqld]
skip-name-resolve
skip-host-cache