今天在使用mysql時,遇到了一個非常奇怪的問題,我的一個關鍵數(shù)據(jù)表突然不見了,查詢和操作相關表的語句都報錯了,甚至數(shù)據(jù)庫也無法正常啟動。
mysql>SELECT * FROM the_missing_table; ERROR 1146 (42S02): Table 'database.the_missing_table' doesn't exist
我非常焦急地想找到這張數(shù)據(jù)表,查看數(shù)據(jù)庫中有哪些表:
mysql>SHOW TABLES; +---------------------+ | Tables_in_database | +---------------------+ | another_table | | one_more_table | +---------------------+ 2 rows in set (0.01 sec)
可見,確實沒有那張消失的數(shù)據(jù)表。
我開始猜測是不是之前的一些操作,誤刪掉了這張表,但是數(shù)據(jù)庫中的binlog在保證數(shù)據(jù)完整性的前提下記錄了所有的操作日志,所以我想通過binlog來尋找數(shù)據(jù)表丟失的原因。
mysqlbinlog binlog.000001 >binlog_analysis.txt
經(jīng)過一番查詢和比對,我終于發(fā)現(xiàn)了一個開啟了GTID復制的從節(jié)點,它在進行刪表操作時誤刪掉了那張表,并導致主從同步異常。
通過重新創(chuàng)建被刪除的匯總表,然后將其同步到從節(jié)點,最終解決了我的刪表問題,同時也得以恢復主從同步。
這件事讓我深刻體會到了備份和容災的重要性,更要注意數(shù)據(jù)庫操作的細節(jié),嚴格掌控數(shù)據(jù)庫權限。