实现MySql延迟复制,高逼格的数据库操作(二)

昨天我讲了mysql的主从单双向复制,有人提出说讲一下主从单双向复制的优缺点,还有关于双向复制中唯一主键冲突问题。今天我就稍微的在最后补充一下,我可能补充的不是很好,更多的我希望各位去自己手动实践一下,然后在实践中发现归纳这些优缺点,在实践中掌握这一个技能。如果单纯的是我说,我明白了,你明白吗?

今天主要还是讲一下关于实现双向主从复制之后,我们一般都会进一步实现的延迟复制,为什么要延迟复制,我在我的25讲最后有提到,大家有疑问的可以翻一翻。另外补充一下如何实现一主多从和多个互为主的原理。mysql的读写分离我应该会放到明天讲。

《第27天》实现MySql延迟复制,高逼格的数据库操作(二)

《第27天》实现MySql延迟复制,高逼格的数据库操作(二)

开班第二十七天:

今天的课程大纲:

  1. 补充一主多从和多个互为主的实现原理

  2. 实现延迟复制的工具:percona。

  3. 编写脚本实现自动化延迟复制服务

  4. 补充网友提问和意见

详细讲解:

  • 补充一主多从和多个互为主的实现原理

昨天如果你自己实现了mysql的主从复制,那么我想一主多从你应该也会做,因为无非就是多一个slave,多一个id。关于多个互为主的实现,我们可以这样实现,A-->B-->C-->A,这样就会避免应该会出现的问题,防止重复插入,同时在配置文件中写入这样一条代码:log-slave-updates。原理不难,主要靠自己实践,千万不要做伸手党,因为那样一点点用都没有,哪怕一点点。如果有朋友遇到问题的,可以先自己尝试解决一下,如果解决不了就进群,大家一起讨论一下。

  • 实现延迟复制的工具:percona。

延迟复制,我们想要实现的功能大概是这样的,假如我slave延迟一小时更新数据,那么master在12点插入数据,slave在13点更新,master在12:59分插入数据,slave在13:59分插入数据。那么我们如何实现呢,首先我们关闭slave的SQL进程,我们之前介绍了二进制文件,我们读取二进制文件主要通过postion来定位,我们可以通过读取postion以及读取postion的时间来确定我们什么时候执行postion对应的sql命令。percona就实现了这样的功能,它其实也是个脚本,我们也可以用shell或者python写一个这样的脚本,原理都一样。

这里需要注意的是,在mysql5.6以后,我们执行change master的同时可以指定延迟时间,它本身就实现了延迟复制的功能,那么在mysql5.6之前呢,我们还是通过percona来实现。我现在mysql的版本是5.1.73,所以我使用percona,如果大家没有找到工具的rpm包,在我的微信公众号中回复:percona,获取这个工具。

1.安装percona

因为这个rpm有依赖,我们用yum进行安装,yum install percona-toolkit-2.2.7-1.noarch.rpm.

2.安装好之后,可以通过man手册查看这个工具提供了那些命令,这里我主要就讲pt-slave-delay,这个命令就实现了设置从服务器延迟复制,设置它,那么就应该需要连接到从服务器中,所以需要在从服务器中为这个工具创建一个用户来连接。

我们通过阅读man手册可以知道创建这个用户需要的权限有三个,分别是super。process。replication,后面的ip特别说明一下,你在那个主机上运行这个脚本,就写那个主机的ip,不一定要是master上运行。

《第27天》实现MySql延迟复制,高逼格的数据库操作(二)3现在运行这个脚本,同时介绍一下必要的参数,--delay表示我延迟1m在slave更新master的数据,--interval表示我每5秒看看是否要启动SQL进程,--daemonize表示后台运行,--log,因为我每5秒检查一次,它就会每5秒输出一次,输出到终端中不妨便,我直接输出到日志文件中,我通过查看日志文件就行了。

《第27天》实现MySql延迟复制,高逼格的数据库操作(二)4.查看日志文件。tail -f /var/log/delay.log。查看slave的状态,可以看到SQL进程默认是关闭的。

《第27天》实现MySql延迟复制,高逼格的数据库操作(二)

5.测试,我在master中插入一条数据(insert into toutiao values(NULL,"toutiao4")),通过观察日志,看是否在一分钟后,slave会更新数据。

通过观察日志文件,我们发现在21:57:43的时候,开启了SQL进程,更新之后,然后就关闭了SQL进程,查看从服务器数据表信息,的确插入了这条记录。《第27天》实现MySql延迟复制,高逼格的数据库操作(二)

《第27天》实现MySql延迟复制,高逼格的数据库操作(二)

  • 编写脚本实现自动化延迟复制服务

1.前面我们已经实现了如何设置slave延迟复制,但是大家有没有感觉每次都要输这么一长串命令,不觉的很烦吗,所以我们可以通过编写一个脚本来自动化的实验mysql延迟复制的功能。先讲一下这个脚本应该有的功能,Usage:{start|stop|restart|showlog|status}。脚本我就用shell写了,基本的case语句,这个脚本贴出来很麻烦,加群或者公众号,回复autoslavedelay,获取。

《第27天》实现MySql延迟复制,高逼格的数据库操作(二)2.怎么用着这个脚本呢,如果哪个朋友使用这个脚本,首先要改一下脚本的内容,host,user,password,log都需要改。改成什么,应该不用我再说了。

《第27天》实现MySql延迟复制,高逼格的数据库操作(二)3.现在把脚本添加到/etc/init.d/中,同时chmod a+x一下,之后就可以使用service 脚本名 start|restart|stop了。

《第27天》实现MySql延迟复制,高逼格的数据库操作(二)4.后面的功能就不演示了,都一样的。

  • 补充网友提问和意见

mysql主从复制的单向复制,优点很明显,master实现业务,slave实现存储,这样我们的master就能够更多去实现业务,在master宕机之后,slave还能继续的技工服务,不过缺点也有,slave单单只作复制,是不是很浪费,后面会讲如何高效的使用slave。同时单向复制有一个很大的问题就是master的误操作,也会更新到slave中,但是这个问题今天已经用延迟复制解决了。

双向复制优缺点,不讲了,感觉你都配置好了,再问优缺点是不是有点晚了。双向复制是基于单向复制的,单向复制的缺点可能就是双向复制所要解决的。

解决双向复制唯一主键冲突,我们可以设置master和slave从不同的基数开始,然后设置增长步数,这样我们可以实现在master中是13579,slave中2468,当然方法有其他的,我需要再想想,因为我又不是特别厉害,我也需要一直学才行。

总结:

今天主要讲了关于延迟复制的原理和实现方法,希望大家能够明白为什么要使用延迟复制,以及延迟复制能给我们带来什么好处。最后,我今天在地铁上看了一篇文章,程序员面试官写的,他说程序员无论你面试的职位高低,还是你原来的职位高低,一张笔试题试卷,就能告诉你需要什么人,最技术不要太虚,很多内容,我认为这个还是非常重要的,所以跟大家分享一下。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值