binlog2sql是大眾點評開源的一款用于解析binlog的工具凛辣,在測試環(huán)境試用了下薄扁,還不錯率寡。
?DBA或開發(fā)人員迫卢,有時會誤刪或者誤更新數(shù)據(jù),如果是線上環(huán)境并且影響較大冶共,就需要能快速回滾乾蛤。傳統(tǒng)恢復(fù)方法是利用備份重搭實例,再應(yīng)用去除錯誤sql后的binlog來恢復(fù)數(shù)據(jù)捅僵。此法費時費力家卖,甚至需要停機維護,并不適合快速回滾命咐。也有團隊利用LVM快照來縮短恢復(fù)時間,但快照的缺點是會影響mysql的性能⌒乘辏現(xiàn)在有不少好用而且效率又高的開源閃回工具如binlog2sql醋奠、mysqlbinlog_flashback,這些工具在工作中給DBA減輕了不少痛苦伊佃,以下針對binlog2sql的使用進行實踐演練窜司。
1.安裝binlog2sql前先安裝git和pip
yum -y install epel-release
yum -y install git python-pip
2.安裝binlog2sql:
git clone https://github.com/danfengcao/binlog2sql.git && cd binlog2sql
pip install -r requirements.txt
3.mysql配置文件my.cnf中進行如下配置,并在/var/log/下創(chuàng)建mysql文件夾
[mysqld]
server_id = 1
log_bin = /var/log/mysql/mysql-bin.log
max_binlog_size = 1G
binlog_format = row
binlog_row_image = full
(但你會發(fā)現(xiàn)重啟Mysqld服務(wù)時會報錯航揉,于是想到給mysql文件夾一個權(quán)限)
chown -R mysql:mysql ?/var/log/mysql
4.給予用戶授權(quán)(此處一定要注意授權(quán)的方式)
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO repl@'localhost' identified by 'MeiMeng@123.com';
權(quán)限說明:
select:需要讀取server端information_schema.COLUMNS表塞祈,獲取表結(jié)構(gòu)的元信息,拼接成可視化的sql語句
super/replication client:兩個權(quán)限都可以帅涂,需要執(zhí)行'SHOW MASTER STATUS', 獲取server端的binlog列表
replication slave:通過BINLOG_DUMP協(xié)議獲取binlog內(nèi)容的權(quán)限
5.內(nèi)網(wǎng)環(huán)境如何使用該工具呢议薪?
該工具的使用依賴以下三個包:
PyMySQL==0.7.8
wheel==0.24.0
mysql-replication==0.9
其中,每個包又會依賴其它包媳友,所以安裝這些包是一個比較麻煩的事情斯议。
如果是在外網(wǎng)的環(huán)境下,可直接通過pip install安裝醇锚,它會自動下載并安裝依賴包的哼御。
在內(nèi)網(wǎng)環(huán)境下坯临,可手動安裝這些包,目前恋昼,這些包已下載打包看靠,并上傳到百度云盤中,大家可自行下載液肌。
http://pan.baidu.com/s/1qYQ2PPy
6.安裝教程:
# tar xvf binlog2sql.tar.gz
# cd binlog2sql/binlog2sql_dependencies/
# tar xvf setuptools-0.6c11.tar.gz
# cd setuptools-0.6c11
# python setup.py install
# cd ..
# tar xvf pip-9.0.1.tar.gz
# cd pip-9.0.1
# python setup.py install
# cd ..
# pip install *.whl mysql-replication-0.9.tar.gz
7.至此挟炬,所有依賴包安裝完畢。
binlog2sql的使用參數(shù)說明:
mysql連接配置
-h host; -P port; -u user; -p password
解析模式
--stop-never 持續(xù)同步binlog矩屁”僮冢可選。不加則同步至執(zhí)行命令時最新的binlog位置吝秕。
-K, --no-primary-key 對INSERT語句去除主鍵泊脐。可選烁峭。
-B, --flashback 生成回滾語句容客,可解析大文件,不受內(nèi)存限制约郁,每打印一千行加一句SLEEP SELECT(1)缩挑。可選鬓梅。與stop-never或no-primary-key不能同時添加供置。
解析范圍控制
--start-file 起始解析文件。必須绽快。
--start-position/--start-pos start-file的起始解析位置芥丧。可選坊罢。默認為start-file的起始位置续担。
--stop-file/--end-file 末尾解析文件』詈ⅲ可選物遇。默認為start-file同一個文件。若解析模式為stop-never憾儒,此選項失效询兴。
--stop-position/--end-pos stop-file的末尾解析位置∑鹬海可選蕉朵。默認為stop-file的最末位置;若解析模式為stop-never阳掐,此選項失效始衅。
--start-datetime 從哪個時間點的binlog開始解析冷蚂,格式必須為datetime,如'2016-11-11 11:11:11'汛闸◎瑁可選。默認不過濾诸老。
--stop-datetime 到哪個時間點的binlog停止解析隆夯,格式必須為datetime,如'2016-11-11 11:11:11'别伏√阒裕可選。默認不過濾厘肮。
對象過濾
-d, --databases 只輸出目標(biāo)db的sql愧口。可選类茂。默認為空耍属。
-t, --tables 只輸出目標(biāo)tables的sql」欤可選厚骗。默認為空。
# 刪除表里的數(shù)據(jù)
# 查看binlog位置
cat 4.sql
(截取了部分)
可以看到生成了跟上面標(biāo)準(zhǔn)SQL相反的SQL了兢哭,通過這些反向SQL可以進行誤操的數(shù)據(jù)恢復(fù)领舰。
比如我們想恢復(fù)delete命令之前的數(shù)據(jù)。
最后一定不要忘記了這一步迟螺,很關(guān)鍵冲秽,不然數(shù)據(jù)無法導(dǎo)入
mysql -uroot -p'MeiMeng@123.com' <roll_5.sql
完成查詢下結(jié)果,發(fā)現(xiàn)數(shù)據(jù)已恢復(fù)