MySQL(总)MySQL备份

MySQL表闪回(完结)

2018-12-19  本文已影响1人  飞翔的Tallgeese

环境描述

此次闪回实验基于binlog2sql,官网:binlog2sql官网

py环境:2.7,3.4+;(亲测2.6.6环境下各种报错,2.7.15环境下正常使用)

MySQL环境:5.6,5.7


py环境部署

OS:CentOS6.8,自带的py为2.6.6

#必要的编译环境

yum install -y gcc openssl* zlib*

#下载py2.7.15版本

wget https://www.python.org/ftp/python/2.7.15/Python-2.7.15.tgz

tar -xf Python-2.7.15.tgz

cd Python-2.7.15

#修改zlib和ssl相关的项

vim Modules/Setup

ssl部分从214行开始,去掉注释修改成下图模样

zlib部分从467行开始,去掉注释修改成下图模样

#配置并执行安装

./configure --prefix=/usr/bin/python2.7

make && make install

mv /usr/bin/python /usr/bin/python.bak

ln -s /usr/bin/python2.7/bin/python2.7 /usr/bin/python

#验证py版本

python -V

#修改yum的配置文件

由于yum是基于py2.6的,在py2.7下yum就不能正常使用了,所以需要修改一下配置

vim /usr/bin/yum

把#!/usr/bin/python改写成#!/usr/bin/python2.6

#下载get-pip.py

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

#执行pip的部署(使用get-pip.py会下载pip-18.1和setuptools这2个东西,并执行安装)

python get-pip.py

执行完成后会提示The script wheel is installed in '/usr/bin/python2.7/bin' which is not on PATH

制作一个软链来处理这个问题

ln -s /usr/bin/python2.7/bin/pip /usr/bin/pip

完成上述操作之后,敲击pip出现下面的截图说明pip正确部署


报错一例

部署pip的过程中出现报错提示需要安装distribute-0.6.10

之前部署的时候,python-setuptools是采用yum安装的(python-pip也是通过yum安装的),完成之后在安装pip时提示需要安装distribute-0.6.10,采用下面的步骤完成对0.6.10的安装

wget https://files.pythonhosted.org/packages/07/9d/2af576b8b199c69d839a8dfd6025b6721a18a0b771a051b2b62b3c866d0f/distribute-0.6.10.tar.gz

tar -xf distribute-0.6.10.tar.gz

cd distribute-0.6.10

python setup.py install


binlog2sql部署

cd ~

yum -y install epel-release

yum-y install git

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

pip install-r requirements.txt


配置MySQL

官网的要求是满足下列选项

测试中我的server_id不等于1但是也能正常使用,个人理解只是需要有server_id,并不需要设置成1吧,不然主从环境岂不是凉了?

个人理解主要的参数是binlog必须开启,而且必须是row格式,row_image设置成full

看了下我的测试库除了server_id值不同以外,其他的都满足了

#创建一个闪回用户并授权

GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'flashback'@'172.17.100.108' identified by 'flashback';

#查看当前的binlog号

show master status \G

#执行删表的实验


闪回实验

之前git部署的binlog2sql安装在/usr/bin/binlog2sql下

cd /usr/bin/binlog2sql/binlog2sql

python binlog2sql.py -uflashback -h172.17.100.108 -pflashback -dsbtest --start-file='mysql-bin.000011' > t.sql

因为binlog_format格式是row,所以查看t.sql可以发现每一条删掉的纪录都在里面(这个binlog记录了从7月19号到今天的...)

加上-B参数,可以反向的生成导入文件,我们这里是执行的delete操作,反向的话就是insert了

在导出的t.sql里面写明了之前delete执行的时间,可以根据这个时间,加上时间参数完成精确时段的导入数据。

python binlog2sql.py -uflashback -h172.17.100.108 -pflashback -dsbtest -tsbtest1 --start-file='mysql-bin.000011' --start-datetime='2018-12-19 16:40:00' --stop-datetime='2018-12-19 16:45:00' -B > /root/Rt.sql

完成之后,将这个Rt.sql导入数据库即可恢复之前被删掉的数据


报错一例

最后的这个导出Rt.sql报错了。

在防火墙里添加了3306端口开放仍然报错,不过最后的导入是成功的,报错后面再研究一下。

上一篇 下一篇

猜你喜欢

热点阅读