文檔結構:html
在生產環境中若是遇到誤刪,改錯數據的狀況,利用mysql閃回工具binlog2sql,能夠實現數據的快速回滾,從binlog中提取SQL,並能生成回滾SQL語句。Binlog以event做爲單位記錄數據庫變動的數據信息,閃回就是能夠重現這些變化數據信息以前的操做。也就是說,對於insert操做,會生成相反的update語句。這塊工具只能使用在binlog格式爲row模式下,且只支持DML語句不支持DDL語句。python
binlog2sql下載地址:https://github.com/danfengcao/binlog2sqlmysql
依賴包連接:git
https://pan.baidu.com/s/15dDeGufVWOgVrfATGWBzaA 密碼:gnz8github
setup-tools下載地址:sql
https://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg數據庫
python2.7下載地址:https://www.python.org/downloads/python2.7
實驗環境:ide
數據庫版本:工具
mysql5.7.20
操做系統:red-hat 6.7
python:2.7.15
1.1首先安裝python2.7(6.x默認是安裝2.6)
安裝參考:http://www.cnblogs.com/balaamwe/p/3480430.html
[root@mysql5 binlog2sql-master]# rpm -qa|grep make
make-3.81-20.el6.x86_64
automake-1.11.1-4.el6.noarch
cmake-2.8.12.2-4.el6.x86_64
若是沒有安裝make工具
yum -y install gcc automake autoconf libtool make
查看是否安裝zlib庫
rpm -qa|grep zlib
zlib-1.2.3-29.el6.x86_64
zlib-devel-1.2.3-29.el6.x86_64
安裝zlib
yum install zlib-devel
檢查是否安裝ssl 庫
[root@mysql5 binlog2sql-master]# rpm -qa|grep openssl
openssl-1.0.1e-42.el6.x86_64
openssl-devel-1.0.1e-42.el6.x86_64
安裝openssl
yum install openssl*
安裝bzip2依賴庫
yum install -y bzip2*
2. 編譯安裝python2.7.15
cp /soft/Python-2.7.15.tgz /usr/src/
cd /usr/src/
tar -zxvf Python-2.7.15.tgz
vi /usr/src/Python-2.7.15/Modules/Setup.dist
找到
#SSL=/usr/local/ssl
#_ssl _ssl.c \
# -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
# -L$(SSL)/lib -lssl -lcrypto
......
#zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz
把註釋去掉
編譯
cd /usr/src/Python-2.7.15
./configure --prefix=/usr/local/python2.7
make all
make install
make clean
make distclean
(一句一句粘貼)
創建python2.7 軟鏈
mv /usr/bin/python /usr/bin/python.bak
ln -s /usr/local/python2.7/bin/python2.7 /usr/bin/python2.7
ln -s /usr/bin/python2.7 /usr/bin/python
chmod 775 setuptools-0.6c11-py2.7.egg
sh setuptools-0.6c11-py2.7.egg
(1)PyMySQL-0.8.0安裝
tar -zxvf PyMySQL-0.8.0.tar.gz
cd PyMySQL-0.8.0
python setup.py install
(2)wheel-0.31.0安裝
tar -xzvf wheel-0.31.0.tar.gz
cd wheel-0.31.0
python setup.py install
(3)python-mysql-replication安裝
unzip python-mysql-replication-master.zip
cd python-mysql-replication-master
python setup.py install
(4)經過pip安裝相應的依賴包
tar -xzvf pip-10.0.1.tar.gz
cd pip-10.0.1
python setup.py install
解壓binlog2sql軟件:
unzip binlog2sql-master.zip
cd /soft/binlog2sql-master
pip install -r requirements.txt(前面包都安裝成功後,這句就能夠不用了)
cd /soft/binlog2sql-master/binlog2sql/
python binlog2sql.py --help
值得注意的就是--start-datetime,--stop-datetime格式爲datetime即%Y-%m-%d %H:%M:%S。
一、mysql 服務是開啓,離線沒法進行binlog。
二、binlog_format 必須是ROW格式。
三、DDL語句沒法作到閃回,只能解析DML語句。
刪除test庫下a1表的前2000行(共10000行)
delete from a1 limit 2000;(drop table 是不可以閃回的)
select count(*) from a1;
a) test庫建立閃回用戶
grant select,replication slave,replication client on *.* to 'flash'@'%' identified by 'flash';
查看當前binlog
當前binlog文件是mysql-binlog.000008,預估一下剛剛操做時間(因爲測試機上時間不許,未帶時間)。
cd /soft/binlog2sql-master/binlog2sql/
python binlog2sql.py -h127.0.0.1 -P3307 -uflash -pflash -dtest -ta1 --start-file='mysql-binlog.000008'
查看生成的恢復語句。
已下僅爲一部分
能夠看得SQL位置是在259到10446之間,進行過濾,生成回滾SQL。
python binlog2sql.py -h127.0.0.1 -P3307 -uflash -pflash -dtest -ta1 --start-file='mysql-binlog.000008' --start-position=259 --stop-position=10446 -B >> flashback.sql
最後應用回滾SQL語句:
source /soft/binlog2sql-master/binlog2sql/flashback.sql
測試成功!