次のコマンドを実行して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)
何が悪いのですか?
これに関するバグレポートがあります: mysqldump: 'show table status'を実行できませんでした:SELECTコマンドがユーザーに拒否されました 。驚いたことに、それはまったくバグではありません。ここに理由があります:
customer_cohort_paid might
はビューです。ユーザーがビューを作成したものは、mysql.user
に表示されなくなります。これにより、そのようなビューはダンプできなくなります。
あなたは2つのことのうちの1つを行うことができます
-f
で強制的にダンプします
mysqldump -f -ubackup -psomething --single-transaction --quick somedatabase | gzip > 4_19.gz
ダンプを強制してダンプファイルにビューを表示させることができる場合は、それを編集することをお勧めします(以前の投稿を参照してください 多くのビューでDEFINERを変更してください または他の投稿 変更方法Mysqlのビューの定義者? )
[〜#〜] warning [〜#〜]:いずれかの拡張INSERTコマンドに構文の問題があるか、データが適切にエスケープまたはカプセル化されている場合、何百ものその1つのINSERTの行がロードされない場合があります。
ビューを作成した元のユーザーを見つけ、そのユーザーを再作成します
このクエリを実行:select * from mysql.tables_priv;
これにより、すべてのテーブルレベルおよび列レベルの付与が表示されます。最初の3つの列を見て、そのユーザーを再度作成するためのGRANTコマンドを見つけます。