1. 程式人生 > >mysql第七篇文章~咱們來談談數據恢復如何

mysql第七篇文章~咱們來談談數據恢復如何

功能 頻率 應用 路徑 truncate client art usr 很快

簡介:數據恢復乃是DBA做的次數不多,但是極為重要的工作,談談我得理解

背景:數據誤操作大體上可以分為兩類

1 DML操作(比如不加條件的更新刪除)

2 DDL操作(比如增加減少字段甚至truncate甚至drop表)

一 針對方法:

1 針對操作:

1 設置延時庫,延時設置時間看線上要求,數據變更頻率,推薦不超過5小時.

延時庫:1實際上不論 mysql還是mongo,oracle,都有辦法設置延時庫,用於對於誤操作的恢復。此操作極為快捷,省去了對於binlog解析恢復數據的問題

2設置方法: 1 stop slave

2 CHANGE MASTER TO MASTER_DELAY = N(秒數);

3 start slave

4 show slave status sql_delay即是你設置的值

3 恢復方法:1確定誤操作的postion,將延時庫取消延遲,應用數據

2 註意關註讀取的position,直到誤操作position之前,停止復制進程

3 進行表的導出和導入

4 研發確定數據的有效性

4 缺點: 1 依賴於延時機器物理機器應用日誌的速度(機器性能差的時候恢復慢),建議將延時庫設置在機器性能非常好,減少恢復時間

2 采用 binlog2sql解析

實際上開源眾多的軟件早已實現解析binlog提取指定表語句的工具,在此我強烈推薦這款

1 如何安裝

1 yum -y install git python-pip MySQLdb

2 git clone https://github.com/danfengcao/binlog2sql.git && cd binlog2sql

3 pip install -r requirements.txt

2 創建相應用戶和權限:

GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 三種權限即可

3 恢復方法

0 準備工作:

1 最好準備一臺性能好的機器專門做數據恢復

2 此臺機器對於線上所有主庫都擁有上面三個權限的用戶

3 當發生誤操作時候,主庫手動flush logs,並將誤操作binlog拷貝到這臺機器上(不建議直接在主庫上做)

1 解析binlog

python binlog2sql.py -h127.0.0.1 -P3306 -utest_all -p123456 -d庫 -t表 --start-file=誤操作binlog文件 --stop-file

          2 生成回滾語句

python binlog2sql.py --flashback -h127.0.0.1 -P3306 -utest_all -p123456 -d庫 -t表 --start-file=誤操作binlog文件 --stop-file

註意點:1 start-file和stop-file此處千萬不要加路徑 ,否則會提示file is not in mysql server,因為是通過show命令獲得的

3 將生成的sql回滾語句應用庫上

4 研發確認數據的有效性

4 優勢與不足

優勢:1 可以解讀代碼進行拍錯和解讀,甚至重寫(畢竟是py,好理解)

2 使用簡單,常用命令能很快熟悉

3 此工具已被眾多業界DBA使用,我也在使用

不足: 1 binlog2sql.py對比mysqlbinlog分析效率遜色不少,所以分析速度不是很快

2 參數 binlog_row_image 必須為FULL,暫不支持MINIMAL

3 此項其實不算缺點,對於此類恢復工具,對於DDL操作是都不支持的(DDL是在binlog中不會記錄影響的數據)。實際上 DDL的有些操作通過工具確實沒辦法實現恢復(比如drop table,如果想恢復就得找這張表所有的binlog掃描恢復,顯然這是不可能的,有很多線上binlog會定期清理)

3 普通恢復方法:

核心思想:昨日備份+今日binlog(誤操作前)

方法:1 xtarbackup備份進行恢復建立恢復實例(恢復方法不再闡述),並查看當時備份點的filename+position

j 2 確定2個position 1:恢復實例所需要的positon 2 誤操作之前的positon

2 誤操作後進行flush logs,將(備份需要的+誤操作的)兩者binlog進行拷貝到恢復機器上,

3 mysqlbinlog --start-position=368315 /usr/local/mysql/data/binlog.123456 | mysql -u root -p password

先應用恢復實例的binlog,再應用誤操作之前的binlog

4 進行 表的查看 導出與導入

5 研發確認數據是否正常

缺點: 1 備份文件恢復的速度所耗費時間 恢復實例所應用binlog所耗費時間,想想看如果一個超級大的備份,線上切換了很多次binlog,這恢復速度恐怕任何人都不能接受 吧

4 一款強大的審核和回滾語句工具:inception

關於這款工具我在此處就不細說了,等以後有機會,我會出一個系列的文章進行介紹,這裏先簡單說下它的三個核心功能

1 強大的審核機制,豐富的規則組合

2 對於每一個sql執行都會生成相應的回滾語句(對於恢復很容易吧)

3 可以調用第三方工具pt-osc

二 總結:核心問題

恢復數據 1 要快 2 要準,估算你的恢復時間,然後給研發一個準確的答復,這才是一個專業DBA所要具備的,如何估算你的恢復時間呢,如果有朋友有這方面的想法,可以在博客下方留言或者加我的QQ 390148350,可以詳談,我會進行補充

\


mysql第七篇文章~咱們來談談數據恢復如何