遇到了一個錯誤mysqldump: Couldn't execute 'show create table `CONCURRENCY_ERRORS`': Table INVOICE_OLD.CONCURRENCY_ERRORS' doesn't exist (1146)
###### WARNING ######
Errors reported during AutoMySQLBackup execution.. Backup failed
Error log below..
Error: Couldn't read status information for table CONCURRENCY_ERRORS ()
mysqldump: Couldn't execute 'show create table `CONCURRENCY_ERRORS`': Table INVOICE_OLD.CONCURRENCY_ERRORS' doesn't exist (1146)
Error: Couldn't read status information for table CONCURRENCY_ERRORS ()
mysqldump: Couldn't execute 'show create table `CONCURRENCY_ERRORS`': Table INVOICE_OLD.CONCURRENCY_ERRORS' doesn't exist (1146)
數據庫的版本為: 5.5.22-enterprise-commercial-advanced MySQL Enterprise Server - Advanced Edition (Commercial)
如下所示,查詢不了該表的定義以及數據(都提示該表不存在),但是使用show table like命令又能看到該表。
mysql> USE INVOICE_OLD;
Database changed
mysql> show tables like '%CONCURRENCY_ERRORS%';
+----------------------------------------------+
| Tables_in_INVOICE_OLD (%CONCURRENCY_ERRORS%) |
+----------------------------------------------+
| CONCURRENCY_ERRORS |
+----------------------------------------------+
1 row in set (0.73 sec)
mysql> select count(1) from CONCURRENCY_ERRORS;
ERROR 1146 (42S02): Table 'INVOICE_OLD.CONCURRENCY_ERRORS' doesn't exist
mysql> desc CONCURRENCY_ERRORS;
ERROR 1146 (42S02): Table 'INVOICE_OLD.CONCURRENCY_ERRORS' doesn't exist
mysql>
查看對應表的.frm文件(.frm文件是用來保存每個數據表的元數據(meta)信息,包括表結構的定義等),如下所示,發現該文件是存在的。
mysql> show variables like '%datadir%';
+---------------+------------------+
| Variable_name | Value |
+---------------+------------------+
| datadir | /u01/mysql/data/ |
+---------------+------------------+
1 row in set (0.23 sec)
mysql> exit
Bye
-bash-3.2$ cd /u01/mysql/data
-bash-3.2$ ls CONCURRENCY_ERRORS*
CONCURRENCY_ERRORS.frm
Google查了一下資料,發現這個可能是一個bug來的(詳情請見鏈接https://bugs.mysql.com/bug.php?id=65670 ) 因為這個數據庫其實早就遷移走,數據庫也被我重命名了。檢查發現遷移后的數據庫里面,該表沒有任何數據。於是我嘗試從數據庫的數據目錄刪除了CONCURRENCY_ERRORS.frm文件,備份就不會出現這種情況了。但是沒有搞清楚這種情況出現的前因后果。

