web-dev-qa-db-ja.com

mysqldumpがエラー1143で返される理由: 'show table status like

次のコマンドを実行してmysqldumpを作成しました

mysqldump -ubackup -psomething --single-transaction --quick somedatabase | gzip > 4_19.gz

作成されたダンプの60%(Zipファイルのチェックサイズを推定)の後に次のエラーが発生しました。

mysqldump: Couldn't execute 'show table status like 'customer\_cohort\_paid'': SELECT command denied to user ''@'%' for column 'customer_id' in table 'sales_order' (1143)

空白のユーザーの権限の問題について述べているuser ''@'%'。さらに、grantsユーザーのbackupは次のとおりです。

mysql> show grants for 'backup'@'%';
+------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for backup@%                                                                                                                            |
+------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON *.* TO 'backup'@'%' IDENTIFIED BY PASSWORD '*SOMETHING' |
+------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

何が悪いのですか?

5

これに関するバグレポートがあります: mysqldump: 'show table status'を実行できませんでした:SELECTコマンドがユーザーに拒否されました 。驚いたことに、それはまったくバグではありません。ここに理由があります:

customer_cohort_paid mightはビューです。ユーザーがビューを作成したものは、mysql.userに表示されなくなります。これにより、そのようなビューはダンプできなくなります。

あなたは2つのことのうちの1つを行うことができます

提案#1

-fで強制的にダンプします

mysqldump -f -ubackup -psomething --single-transaction --quick somedatabase | gzip > 4_19.gz

ダンプを強制してダンプファイルにビューを表示させることができる場合は、それを編集することをお勧めします(以前の投稿を参照してください 多くのビューでDEFINERを変更してください または他の投稿 変更方法Mysqlのビューの定義者?

[〜#〜] warning [〜#〜]:いずれかの拡張INSERTコマンドに構文の問題があるか、データが適切にエスケープまたはカプセル化されている場合、何百ものその1つのINSERTの行がロードされない場合があります。

提案#2

ビューを作成した元のユーザーを見つけ、そのユーザーを再作成します

このクエリを実行:select * from mysql.tables_priv;

これにより、すべてのテーブルレベルおよび列レベルの付与が表示されます。最初の3つの列を見て、そのユーザーを再度作成するためのGRANTコマンドを見つけます。

6
RolandoMySQLDBA