mysql主从备份--GTID

首先搞两个Mysql,端口号为3307,3308,本文中用到navicat来可视化数据库

其中3307为主,3308为从

先要保证3307和3308数据一样(库,表,数据相同)

my.ini  配置文件增加如下

server-id=1
log-bin=mysql-bin
binlog_format=row
log-slave-updates=true
gtid-mode=on
enforce-gtid-consistency=true
binlog-do-db=air_bag
expire_logs_days = 10

server-id=2
log-bin=mysql-bin
binlog_format=row
log-slave-updates=true
gtid-mode=on
enforce-gtid-consistency=true
binlog-do-db=air_bag
expire_logs_days = 10

参数解释

server-id                                                表示id  唯一不能重复

log-bin                                                   开启logbin日志记录

binlog_format                                        binlog记录形式,其他参数百度

log-slave-updates=true                         必须

gtid-mode=on                                        主从模式开启

binlog-do-db=air_bag                            需要同步的数据库(如果有多个 复制此行改变库名,多个库同步未测试,如果没有此行,会默认同步所有的库)

expire_logs_days = 10                           binlog缓存10天

 

修改好my.ini后  重启两个mysql

在主中  show master status;

查看GTID是否配置成功

在主中创建用户给从做同步使用

create user 'sync'@'127.0.0.1' identified by '123456';
grant replication slave on *.* to 'sync'@'127.0.0.1' identified by '123456';

在从中配置需要同步的服务地址

change master to master_host='127.0.0.1';
change master to master_port=3307;
change master to master_user='sync';
change master to master_password='123456';
change master to master_auto_position=1;

然后启动从库的同步,执行如下

start slave;

查看从库是否同步成功

show slave status;

显示如图 两个yes代表成功,可以修改主库数据查看是否同步成功

 

在实际需求中,需要主库只保存一个月内的记录,也就是主中只有一个月的记录,从中是所有记录,

实际使用环境是上位机是主,存储服务器是从,所以有此需求

增加函数和事件如下

drop PROCEDURE IF EXISTS `prc_del_clip`;
CREATE PROCEDURE `prc_del_clip`(IN date_inter int) COMMENT '自动删除日志'
BEGIN
set sql_log_bin=0;
delete from clip where (TO_DAYS(NOW()) - TO_DAYS(create_time))>=date_inter;
select @dataMaxId:=max(id) from clip_data where (TO_DAYS(NOW()) - TO_DAYS(create_time))>=date_inter;
DELETE from clip_data where id<@dataMaxId;
select @cameraMaxId:=max(id)  from clip_camera where (TO_DAYS(NOW()) - TO_DAYS(create_time))>=date_inter;
DELETE from clip_camera where id<@cameraMaxId;
set sql_log_bin=1;
END;
drop EVENT IF EXISTS  `auto_delete_clip`;
CREATE EVENT `auto_delete_clip` ON SCHEDULE EVERY 1 DAY STARTS '2021-01-01 00:00:00'
ON COMPLETION PRESERVE ENABLE COMMENT '自动删除60天以前的日志统计数据' DO call prc_del_clip(60);

主要特点就是在删除数据前后增加了set sql_log_bin=0;...=1 来关闭和打开logbin日志记录

这样在删除的时候,删除数据就不会同步到从中,导致从也删除数据

从的数据量会很大,这样又要考虑从中定期分表

以下为思路

rename table test to test_2021_04;

CREATE TABLE `test` (
  `id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

先重命名,再新建表,此方法需要在数据库没有数据新增修改时执行,比如定时每月15号0点

需要根据自己的实际需求来确定是否使用此方法

以上为此次在GTID主从备份建立中整理的实现流程,仅供参考,如果有不对的地方,请指出

特别参数解释那里,只是测试出有哪些参数是必须的,然后增加了一些我需要用到的参数

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值