mysqldump 和視圖的問題
用於
mysqldump
備份 MySQL 時,出現以下錯誤。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
- 作業系統:CentOS 6.5
為什麼我在執行時遇到錯誤,我該
mysqldump
如何解決?更新 1 (2014/04/17)
我
mysqldump
與使用者一起執行'root'@'localhost'
。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 tungbt@192.168.12.197 | +------------------------------------------------------------------------------------------------------------------+ | 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 | +----------------+----------------+
更新 3
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 | +------------------+--------------+
您需要擁有SHOW VIEW 權限。我在 2013 年 12 月寫過這篇文章:獲取 MySQL 數據庫模式備份所需的最低權限是什麼?
在那篇文章中,我展示了 mysqldump 的這些最低權限
- 選擇
- SHOW VIEW(如果任何數據庫有視圖)
- TRIGGER(如果任何表有一個或多個觸發器)
- LOCK TABLES(如果您使用顯式
--lock-tables
)你應該執行這個命令:
SHOW GRANTS FOR tungbt@192.168.12.197;
如果
SHOW VIEW
不存在,這就是原因。更新 2014-04-16 23:06 EDT
當你這樣做時
mysqldump --all-databases --routines >> all.sql
我看到你沒有指定使用者和密碼。在這種情況下,您沒有以
root@localhost
. 您必須明確指定 root 使用者mysqldump -uroot -p --all-databases --routines >> all.sql
您將看到密碼提示。輸入 root@localhost 密碼,您就可以關閉並執行了。
您也可以指定密碼
mysqldump -uroot -ppassword --all-databases --routines >> all.sql
試一試 !!!
瘋狂的建議
如果您正在使用
.~/my.cnf
但仍然出現錯誤,您可能會在錯誤 #70907 mysqldump 中遇到這種情況:無法執行 ‘show table status’: SELECT command denied to user ‘如果配置文件是
.~/my.cnf
真的/root/.my.cnf
,可能你沒有以 Linux root 身份登錄。您可能必須執行 sudo。請執行此命令
mysql -ANe"SELECT USER(),CURRENT_USER()"
如果您沒有看到
root@localhost
兩次,那麼您的身份驗證不正確。在
.my.cnf
您需要確保使用者和密碼在該[client]
部分下[client] user=root password=rootpassword
不在本
[mysql]
節下。更新 2014-04-17 13:53 EDT
我不禁查看該錯誤報告並想知道以下內容:既然您有 DEFINER=
tungbt
@192.168.12.197
,那麼 root@localhost 的行為可能類似於tungbt
@192.168.12.197
嗎?我這樣說是因為根據CREATE VIEW 上的 MySQL 文件:At view definition time, the view creator must have the privileges needed to use the top-level objects accessed by the view. For example, if the view definition refers to table columns, the creator must have some privilege for each column in the select list of the definition, and the SELECT privilege for each column used elsewhere in the definition.
您可以將視圖的定義器更改為 root@localhost 並再次嘗試 mysqldump