Mysql
為什麼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)
我究竟做錯了什麼?
對此有一個錯誤報告:mysqldump: Couldn’t execute ‘show table status’: SELECT command denied to user。令人驚訝的是,這根本不是一個錯誤。這就是為什麼:
customer_cohort_paid might
成為一個觀點。無論使用者創建了該視圖,都不再在mysql.user
. 這樣做是使這種觀點無法被拋棄。你可以做兩(2)件事之一
建議 #1
強制轉儲
-f
mysqldump -f -ubackup -psomething --single-transaction --quick somedatabase | gzip > 4_19.gz
如果您可以強制轉儲以使視圖出現在轉儲文件中,您可能需要對其進行編輯(請參閱我的舊文章Modify DEFINER on Many Views或另一個How do I change the DEFINER of a VIEW in Mysql?)
警告:如果任何一個擴展 INSERT 命令存在語法問題或不正確地轉義或封裝數據,則可能無法載入該 INSERT 中的數百行。
建議 #2
找出創建視圖的原始使用者,並重新創建該使用者
執行此查詢:
select * from mysql.tables_priv;
這將顯示所有表級和列級授權。查看前三列並找出再次創建該使用者的 GRANT 命令。