mysql 删除插件_Mysql主从同步,不同步删除的数据

本文介绍了一种在MySQL主从同步环境下,如何在主库执行数据清除操作而不影响从库的方法。通过主从数据库的设置,确保DELETE或TRUNCATE命令不会同步到从库,从而在主库清空数据的同时,从库保持完整的历史记录。
摘要由CSDN通过智能技术生成

操作要求:

Mysql中某个库每天产生的数据较大,在mysql需要把这个库里面数据清空,并且里面的数据需要做查询。首先想到的是数据库主从,只需要同步的时候把delete table 和 truncate table或drop database 命令去掉,不同步删除的数据,只是没有查到相应的软件,所以有下面的操作

操作思路:

利用数据库的主从同步,在主数据库执行清除命令,不同步到从数据库

以下主数据库为A(192.168.1.80),从数据库为B(192.168.1.81)。A里面的gamelog数据库每天清理一次(gamelog数据库,里面一个表 goldenLog),并且在B数据库保留所有的gamelog库信息。假设在晚上23:52  A执行清除mysql数据命令,

实现方法:

1,系统centos 6.4 64位

3,23:50 A中刷新日志为的是接下来进行处理的日志较小,更方便的修改,导入到从服务器

/usr/local/mysql/bin/mysql -e "flush binarylogs;   show master statusG"|grep -E "File|Position" |awk '{print $2}'

4,23:51  B中停止同步,并且记录position

/usr/local/mysql/bin/mysql -e "stop slave;  show slavestatusG" |grep -E "Master_Log_File|Read_Master_Log_Pos" |awk'{print $2}'|awk 'NR < 3'

5,23:52  A中保留表结构,清除表中的内容

/usr/local/mysql/bin/mysql -e "show master statusG"|grep -E "File|Position"|awk '{print $2}'  > sqlstatus | /usr/local/mysql/bin/mysql -nse 'show tables' gamelog|while read table;do /usr/local/mysql/bin/mysql -e "truncate table $table" gamelog;done

查看现在的Position位置 ,

清理数据后执行刷新log,从服务器同步就从刷新后日志position的107开始向主请求同步

/usr/local/mysql/bin/mysql -e "flush binary logs;   show master statusG"|grep -E "File|Position"|awk '{print $2}'|sed -n 1p

B同步A中的内容就利用这个位置

6,A中把二进制日志导出为sql命令并发送给从

下面是清空数据库里面表内容的命令,需要把这一条语句给删除,然后发送给从服务器

把修改的sql传到B  这里需要配置双机互信,具体过程略过

7,B中 mysql 导入数据000023.sql 此时导入的数据没有清空表内容的命令,所以内容就不会被删除

8,B 开始向A请求同步mysql-bin日志为(上面第五条5,)A执行刷新log后的bin log

/usr/local/mysql/bin/mysql-e "change master to master_log_file='mysql-bin.000024',master_log_pos=107;"

9,B中 开始恢复主从同步

查看B中状态

/usr/local/mysql/bin/mysql -e "show slavestatusG " | grep -E "Slave_IO_Running|Slave_SQL_Running" |awk'{print $2}'

改写自动化:

A中脚本:

B中脚本:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值