MySQL表闪回(完结)

作者: 飞翔的Tallgeese | 来源:发表于2018-12-19 15:31 被阅读1次

    环境描述

    此次闪回实验基于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端口开放仍然报错,不过最后的导入是成功的,报错后面再研究一下。

    相关文章

      网友评论

        本文标题:MySQL表闪回(完结)

        本文链接:https://www.haomeiwen.com/subject/wsyjkqtx.html