web-dev-qa-db-ja.com

MysqlでVIEWのDEFINERを変更するにはどうすればよいですか?

Mysqldumpを実行すると、エラーが発生します。

mysqldump: Got error: 1449: The user specified as a definer ('root'@'foobar') does not exist when using LOCK TABLES

foobarはもはや存在しないレガシーマシンであるため、これは理にかなっています。

すべてのテーブルの定義者を 'root' @ 'localhost'に変更するにはどうすればよいですか?

36
kfmfe04

ダンプしようとしているデータベースには、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';
33
Abdul Manaf

--single-transactionスイッチの使いやすさ:

mysqldump --single-transaction -u username -p db > db.sql
36
rod

最も迅速な解決策は、既存のユーザーとの競合が発生しない限り、存在するように定義者を再作成することです。

CREATE USER 'root'@'foobar';

18
ColinM

データベースのすべてのビューをエクスポート<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スイッチを指定します。

5
x-yuri