kfm*_*e04 41 mysql mysqldump permissions
当我运行 mysqldump 时,出现错误:
mysqldump: Got error: 1449: The user specified as a definer ('root'@'foobar') does not exist when using LOCK TABLES
Run Code Online (Sandbox Code Playgroud)
这是有道理的,因为它foobar是一台不再存在的旧机器。
如何将所有表的定义器更改为 'root'@'localhost'?
Abd*_*naf 38
我认为您尝试转储的数据库包含用户在以 root@'foobar' 身份登录时定义的过程/方法。
现在的解决方案是您必须替换该过程/方法的定义者
然后您可以生成没有错误的转储。
你可以这样做..
UPDATE `mysql`.`proc` p SET definer = 'root@localhost' WHERE definer='root@foobar'
Run Code Online (Sandbox Code Playgroud)
小心,因为这将更改所有数据库的所有定义器。
尝试一下....!
2012 年 2 月 9 日更新
正如我看到的@gbn 给出的链接,这是@Rolando 给出的答案,也可以是案例。请访问链接
编辑 @RolandoMySQLDBA 2011-12-16 11:20 EDT
虽然有风险,但这个答案很好。只是为了澄清:您可以在查询中指定数据库,如下所示:
UPDATE `mysql`.`proc` p SET definer = 'root@localhost' WHERE definer='root@foobar' AND db='whateverdbyouwant';
Run Code Online (Sandbox Code Playgroud)
小智 36
更易于使用的--single-transaction开关:
mysqldump --single-transaction -u username -p db > db.sql
Run Code Online (Sandbox Code Playgroud)
导出数据库的所有视图<DB>:
mysql -BNe "SELECT TABLE_NAME FROM TABLES WHERE TABLE_SCHEMA = '<DB>' AND TABLE_TYPE = 'VIEW'" \
information_schema | xargs mysqldump --single-transaction --no-data <DB> >views.sql
Run Code Online (Sandbox Code Playgroud)
或者:
mysql -BNe "SELECT TABLE_NAME FROM VIEWS WHERE TABLE_SCHEMA = '<DB>'" \
information_schema | xargs mysqldump --single-transaction --no-data <DB> >views.sql
Run Code Online (Sandbox Code Playgroud)
编辑views.sql并重新创建它们:
cat views.sql | mysql <DB>
Run Code Online (Sandbox Code Playgroud)
必要时指定-u并-p切换。