MySQLのバックアップにmysqldump
を使用すると、次のエラーが発生しました。
mysqldump --all-databases --routines >> all.sql
mysqldump: Couldn't execute 'show table status like 'hdkien'': SELECT command denied to user 'tungbt'@'192.168.12.197' for column 'id' in table 'hdcn_hd' (1143)
hdkien
はビューです
CREATE ALGORITHM=UNDEFINED DEFINER=`tungbt`@`192.168.12.197` SQL SECURITY DEFINER VIEW `hdcn`.`hdkien` AS (...striped...)
ユーザーtungbt
@ 192.168.12.197
にはすでにテーブルhdcn_hd
を選択する権限があり、ビューhdkien
から問題なく選択できます。
mysql> select * from hdkien limit 1;
+------+-----------+
| id | shd |
+------+-----------+
| 876 | ADFADFA1 |
+------+-----------+
より詳しい情報:
mysql-community-server-5.5.37-4.el6.x86_64
mysqldump
の実行中にエラーが発生したのはなぜですか。どうすれば解決できますか?
更新1(2014/04/17)
ユーザー'root'@'localhost'
でmysqldump
を実行します。
mysql> show grants for 'root'@'localhost';
+----------------------------------------------------------------------------------------------------------------------------------------+
| Grants for root@localhost |
+----------------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '...striped...' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |
+----------------------------------------------------------------------------------------------------------------------------------------+
ユーザー'tungbt'@'192.168.12.197'
はビューhdcn.hdkien
の定義者です(そしてSQL SECURITY
はDEFINER
です。
+------------------------------------------------------------------------------------------------------------------+
| Grants for [email protected] |
+------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'tungbt'@'192.168.12.197' IDENTIFIED BY PASSWORD '...striped...' |
| GRANT ALL PRIVILEGES ON `hdcn`.* TO 'tungbt'@'192.168.12.197' |
+------------------------------------------------------------------------------------------------------------------+
更新2
$ mysql -ANe"SELECT USER(),CURRENT_USER()"
+----------------+----------------+
| root@localhost | root@localhost |
+----------------+----------------+
更新
mysql> SELECT COUNT(1) MySQLGrantsCount,VERSION() MySQLVersion FROM information_schema.columns WHERE table_schema='mysql' AND table_name='user';
+------------------+--------------+
| MySQLGrantsCount | MySQLVersion |
+------------------+--------------+
| 42 | 5.5.37-log |
+------------------+--------------+
Rootとして私のビューでmysqldumpを実行できないという同様の問題がありました。
mysqldump: Couldn't execute 'show create table `v_view01`': View 'my_db.v_view01' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them (1356)
私の場合は、基礎となるスキーマが変更されたため、それに依存していたビューは無効になりました。 rootとしてダンプを実行していても、「またはビューの呼び出し元に権限がありません...」と表示されます。解決策は簡単でした:
drop view v_view01
ビューはすでに古くなっているので、私はそれを単にドロップし、それからmysqldumpは通常のように進みました。
鉱山は、存在しないビューに作成ビューを表示できなかったため、ジョブが終了しました。だから私はこれら2つのことをしました:
create or replace view v_view01 as select * from any_table;
drop view v_view01;
より大きな問題は、デフォルトでmysqldump
エラーで停止することです-恐ろしい考え!!!
他のすべての適切なテーブルをバックアップする必要がある場合は、オプション--force
と次のようなオプションを追加してください...
mysqldump -u root -p${MP} --all-databases --lock-tables --debug-info --comments --dump-date --force --events --routines --add-drop-table --add-locks --log-error=/somewhere/mysqldump.err >all_db.`date "+%Y%m%d%H%M"`.sql