mysql恢復數據

          Mysql 徹底恢復、基於時間點恢復、基於位置恢復mysql

(注意根據實際環境調整)sql

1.刷新binlog (取得最後1份有價值的2進制日誌),或執行一次增量備份的腳本。數據庫

#mysqladmin -u**** -p**** flush-logside

 

2.全備當前要操做的數據庫,防止2次破壞。(如 lsws)spa

# mysqldump lsws > lsws.sql日誌

 

3.恢復時間最近的全備數據。(db121019爲最近的全備數據庫)排序

#mysql lsws < db121019 it

 

4.恢復從db121019數據庫後全部的binlog,到出問題的日誌爲止(這裏假設1-20爲正常,21爲錯誤的日誌。)io

#ls -t -r -l /data/dbbak/daily/mysql-bin.* | xargs mysqlbinlog | mysql    class

(此操做ls -t -r -l /data/dbbak/daily/mysql-bin.* ,確保顯示的日誌順序是按正常排序。若是順序不對則用下一條命令,或者手動按順序依次恢復,注意不要包含了錯的日誌)

#mysqlbinlog mysql-bin.000001  (省略mysql-bin.00002-19 ......)  mysql-bin.000020 | mysql

 

5.恢復有錯誤的binlog,爲不徹底恢復(假設爲mysql-bin.000021

⑴基於時間點的恢復。(首先找到出錯的時間,如:2012-10-19 17:25:44 45 46 秒的操做都是錯誤的,而後跳過故障時間點,進行恢復。)

#mysqlbinlog --stop-date="2012-10-19 17:25:44" mysql-bin.000021 | mysql

#mysqlbinlog --start-date="2012-10-19 17:25:47" mysql-bin.000021 | mysql

 

⑵基於位置的恢復。(首先找到出錯的位置,而後跳過故障位置點,進行恢復。)

咱們發現故障先後的位置號是分別是413517。就是end_log_pos後邊顯示的。 

#mysqlbinlog --stop-position="413" mysql-bin-3306.000021 | mysql

#mysqlbinlog --start-position="517" mysql-bin-3306.000021 | mysql

 

假若有報錯 ERROR 1062 (23000) at line 32: Duplicate entry '27' for key 'PRIMARY'

找到正確操做的那條語句,找準原先操做語句的位置點end_log_pos,再執行一次就好了。

 

好比正確操做的位置點爲"175""398"

下面這條語句,就實現了恢復

mysqlbinlog --start-position="175" --stop-position="398" mysql-bin-3306.000021 | mysql -uroot -proot

相關文章
相關標籤/搜索