Mysqldumpを実行すると、エラーが発生します。
mysqldump: Got error: 1449: The user specified as a definer ('root'@'foobar') does not exist when using LOCK TABLES
foobar
はもはや存在しないレガシーマシンであるため、これは理にかなっています。
すべてのテーブルの定義者を 'root' @ 'localhost'に変更するにはどうすればよいですか?
ダンプしようとしているデータベースには、root @ 'foobar'としてログインしているときにユーザーが定義したプロシージャ/メソッドが含まれていると思います。
今の解決策は、そのプロシージャ/メソッドの定義者を置き換える必要があることです
その後、エラーなしでダンプを生成できます。
あなたはこのようにすることができます...
UPDATE `mysql`.`proc` p SET definer = 'root@localhost' WHERE definer='root@foobar'
これにより、すべてのデータベースのすべての定義者が変更されるため、注意してください。
それを試してみてください....!
2012年2月9日更新
私が@Roblandによって与えられた答えである@gbnによって与えられたリンクを見たように、それはケースにもなり得ます。 リンクにアクセスしてください
EDIT by @RolandoMySQLDBA 2011-12-16 11:20 EDT
危険ですが、この答えは良いです。明確にするために、次のようにクエリでデータベースを指定できます。
UPDATE `mysql`.`proc` p SET definer = 'root@localhost' WHERE definer='root@foobar' AND db='whateverdbyouwant';
--single-transaction
スイッチの使いやすさ:
mysqldump --single-transaction -u username -p db > db.sql
最も迅速な解決策は、既存のユーザーとの競合が発生しない限り、存在するように定義者を再作成することです。
CREATE USER 'root'@'foobar';
データベースのすべてのビューをエクスポート<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
または:
mysql -BNe "SELECT TABLE_NAME FROM VIEWS WHERE TABLE_SCHEMA = '<DB>'" \
information_schema | xargs mysqldump --single-transaction --no-data <DB> >views.sql
views.sql
を編集して再作成します。
cat views.sql | mysql <DB>
必要に応じて、-u
および-p
スイッチを指定します。