web-dev-qa-db-ja.com

mysqldumpとビューの問題

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バージョン:mysql-community-server-5.5.37-4.el6.x86_64
  • OS:CentOS 6.5

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 SECURITYDEFINERです。

+------------------------------------------------------------------------------------------------------------------+
| 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   |
+------------------+--------------+
5
favadi

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は通常のように進みました。

3
David B

鉱山は、存在しないビューに作成ビューを表示できなかったため、ジョブが終了しました。だから私はこれら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
0
user153465