標籤:根據 sql語句 roo 手冊 日誌 檔案的 事務 show 開發
如果不小心對資料庫進行誤操作,而又沒有及時備份怎麼辦?這恐怕是廣大的coder經常遇到的一類問題。
我今天就因為不小心刪除了某個資料庫,但最後的備份是1個禮拜前的,唯一能解決的辦法就是通過mysqlbinlog來恢複了。解決方案如下:
如果MySQL伺服器啟用了二進位日誌,你可以使用mysqlbinlog工具來恢複從指定的時間點開始(例如,從你最後一次備份)直到現在或另一個指定的時間點的資料。
關於啟用二進位日誌的資訊,參見5.11.3節,“二進位日誌”。對於mysqlbinlog的詳細資料,參見mysql手冊8.6節,“mysqlbinlog:用於處理二進位記錄檔的工具 + 生產力”。
要想從二進位日誌恢複資料,你需要知道當前二進位記錄檔的路徑和檔案名稱。
一般可以從設定檔(一般情況,Linux下為my.cnf ,windows系統下為my.ini,取決於你的系統)中找到路徑。如果未包含在選項檔案中,當伺服器啟動時,可以在命令列中以選項的形式給出。
啟用二進位日誌的選項為–log-bin。
要想確定當前的二進位記錄檔的檔案名稱,輸入下面的MySQL語句:
SHOW BINLOG EVENTS \G;
或者還可以從命令列輸入下面的內容:
mysql –user=root -pmypasswd -e ‘SHOW BINLOG EVENTS \G’ 將密碼mypasswd替換為你的MySQL伺服器的root密碼。
比如得到的記錄檔名為:
mysql-bin.000001 1. 指定恢復 對於MySQL5.1.54,可以在mysqlbinlog語句中通過–start-date和–stop-date選項指定DATETIME格式的起止時間。
舉例說明,比如在今天下午14:02(今天是2012年3月15日),不小心執行SQL語句刪除了一個資料表,但發現沒有最新的備份(當然,這隻是開發環境,並不是正式的生產環境,正式環境還得定時做資料備份)。要想恢複表和資料,可以通過mysqlbinlog恢複指定時間的備份,輸入:
mysqlbinlog –stop-date=”2012-03-15 14:02:00″ /data1/log/mysql/mysql-bin.000001 | mysql -u root -pmypasswd
該命令將恢複截止到在–stop-date選項中以DATETIME格式給出的日期和時間的所有資料。
如果你沒有檢測到輸入的錯誤的SQL語句,可能你想要恢複後面發生的資料庫活動。
根據這些,你可以用起使日期和時間再次運行mysqlbinlog:
mysqlbinlog –start-date=”2012-03-15 00:01:00″ /data1/log/mysql/mysql-bin.000001 | mysql -u root -pmypasswd
在該行中,從今天淩晨0:01登入的SQL語句將運行,組合執行前夜的轉儲檔案和mysqlbinlog的兩行可以將所有資料恢複到今天淩晨0:01前一秒鐘。
你應檢查日誌以確保時間確切。下一節介紹如何?。
2. 指定時間段恢複 通過mysqlbinlog –start-date 和–stop-date恢複指定時間段的資料庫活動記錄,如下:
mysqlbinlog –start-date=”2012-03-09 02:00:00″ –stop-date=”2012-03-15 14:00:00″ /data1/log/mysql/mysql-bin.000001 > /tmp/mysql_restore_030915.sql
通過這種方式,就能擷取最後一個備份的檔案時間2012-03-09 02:00:00到今天刪除資料庫之前2012-03-15 14:02這段時間的資料庫活動事務操作
CentOS下利用mysqlbinlog恢複MySQL資料庫