mysql第七篇文章~咱們來談談數據恢復如何
簡介:數據恢復乃是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第七篇文章~咱們來談談數據恢復如何