mysql数据库之主从复制

52 篇文章 2 订阅
23 篇文章 0 订阅

一、实现主从复制的方式。

异步复制:它是mysql默认的同步方式,从库通过io线程去拉取 bin log时,主库不需要关注这个时候是否有从库在同步数据,他只做自己的事情就可以了, 整个复制过程都是异步完成的 ;

半同步复制:它需要依赖至少一个从库将bin log写入relay log中,在性能上有所降低,但是可以保证至少有一个从库跟主库的数据是一致的,所以数据的安全性很高;

全同步复制:它的全局一致性是最好的,但是性能也是最低的。

二、主从复制的方法。

1、从库通过io线程连接到主库,并且向主库要对应的bin log文 件;

2、主库会通过dump线程去获得bin log文件,并发送给从库;

3、从库会把主库发送过来的bin log文件写入到relay log文件中,也就是中继日志;

4、从库中的sql线程会读取relay log文件中的内容;

5、最后去执行relay log文件中的内容。

 三、解决主从复制延迟问题。

关于如何解决主从复制延迟的问题,我认为可以从两个方面入 手,分别是架构层面和从库的配置层面 。

首先是在架构层面上解决

1、我们可以将业务的持久化层的实现采用分库的架构来进行处理,让不同的请求分散到不同的数据库服务上,分散掉单台服务器的压力;

2、我们可以把服务的基础架构在业务层和mysql之间加入缓存层,减少mysql的读的压力,但是需要注意的是,如果我们的数据 经常会发生修改,那么这种设计是不合理的;

接下来我们也可以考虑从库的配置方面上解决问题(修改sync_binlog的参数的值)

如果想要正确的设置sync_binlog参数的值,我们就需要清楚 binlog在写盘时的工作流程,在进行操作时,每个线程有自己的 binlog cache,但是他们共用同一份binlog。

每个线程在执行写的操作时,会执行write和fsync两个操作。

write,指的就是把日志写入到文件系统的page cache中,它并没 有把数据持久化到磁盘,所以速度快,也就是说fsync才是将数据 持久化到磁盘的操作。一般情况下,我们认为只有fsync操作,才占用磁盘的IOPS(I/O per second)而write和fsync的时机就是 由sync_binlog参数来进行控制的。

1、当sync_binlog=0的时候,表示每次提交事务都只write, 不fsync;

2、当sync_binlog=1的时候,表示每次提交事务都要执行 fsync;

3、当sync_binlog=N的时候,表示每次提交事务都write,但 积累N个事务后才执行fsync。

一般情况下,公司在大部分的应用场景中,我们建议将此参数的值设置为1,因为这样的话能够保证数据的安全性,但是如果出现主从复制的延迟问题,可以考虑将此值设置为100~1000中的某个数值,非常不建议设置为0,因为设置为0的时候没有办法控制丢失日志的数据量。

四、主库宕机后的处理方法。

可以从多个从库中选择新的主库,那么如何操作呢?我认为大概有这么几个步骤:

1.确保所有的relay log全部更新完毕,在每个从库上执行stop slave io_thread; show processlist;直到看到Has read all relay log,则表示从库更新都执行完毕了;

2.登陆所有从库,查看master.info文件,对比选择pos最大的 作为新的主库,这里我们选择192.168.1.102为新的主库;

3.登陆192.168.1.102,执行stop slave; 并进入数据库目录, 删除master.info和relay-log.info文件, 配置my.cnf文件,开启 log-bin,如果有log-slaves-updates和read-only则要注释掉,执行 reset master;

4.创建用于同步的用户并授权slave,同第五大步骤;

5.登录另外一台从库,执行stop slave停止同步;

6.根据第七大步骤连接到新的主库;

7.执行start slave;

8.修改新的master数据,测试slave是否同步更新。

五、什么是主从复制?

MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。

MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。

主从复制是MySQL最重要的功能之一。

对于多级复制,数据库服务器既可充当主机,也可充当从机。

MySQL主从复制的基础是主服务器对数据库修改记录二进制日志,从服务器通过主服务器的二进制日志自动执行更新。

六、为什么要主从复制?

随着系统中业务访问量的增大,如果是单机部署数据库,就会导致I/O访问频率过高。

有了主从复制,增加多个数据存储节点,将负载分布在多个从节点上,降低单机磁盘I/O访问的频率,提高单个机器的I/O性能;

一般会让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作。

从库可以实时从主库进行复制,这样就可以做数据的热备。

注意事项 

1、如果修改了主服务器的配置,记得删除从服务器上的 master.info文件。否则从服务器使用的还是老配置,可能会导致错误;

2、如果你想使用复制数据文件的方式来备份数据库,只要在从服 务器上的mysql命令行先键入stop slave;然后复制数据库文件,复 制好了,再在mysql命令行键入start slave;启动从服务器,这样既 备份了数据又保证了数据完整性,而且整个过程中主服务器的mysql无需停止。并且如果在此期间master的数据有改动,在下次 start slave时数据也会同步更新过来;

3、双机互备则是两个mysql同时配置为master及slave。

因为项目的开发人员比较少,所以我也参与了一些别的模块的开 发,我们系统也涉及到了OA系统中的一些常见的功能,比如说用户 权限,所以我也参与了权限的设计,由于这个的代码实现方式是比 较固化的,所以我就没有参与编码。

我们给予RBAC的设计思想,也就是基于角色的权限控制,我们 用了5张表,分别是用户表、角色表、权限表,其中还有两张关联 表,分别是用户角色关联表、角色权限关联表。像登陆权限的拦 截,我们使用的是SpringMVC的拦截器实现的。

其实市面上也有很多用于权限设计的框架,比如Spring的 Security和Apache的Shiro,也都可以完成我们的需求,如果有需 要的话,按需选取就可以了。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小格子衬衫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值