MySQL 主从同步

发布于:2022-12-07 ⋅ 阅读:(595) ⋅ 点赞:(0)

参考:

MySQL主从同步(一)——原理详解_永远是少年啊的博客-CSDN博客_mysql主从同步原理

一、背景:

 如上面的系统架构图中,数据库集群,存在多个数据库。如果读写都在同一个数据库上,那么这个数据库的压力会比较大,为了减轻数据库的压力做了读写分离,一般是一台主库用来写,多台从库用来读数据。

为了保证数据的一致性,这里用到了数据库的主从同步。

在日常项目中,当我们写入数据后,再去查数据,当时查不到,可能导致的问题就是主从同步有数据的延迟,写入的是主库,当我们查数据时,查的是从库。

解决同步延迟的问题,是数据库运维来把控的,不需要我们测试人员来解决。

二、MySQL复制/主从同步:

MySQL内建的复制功能是构建大型,高性能应用程序的基础。

将MySQL的数据分布到多个系统上去,这种分布的机制,是通过将mysql的某一台主机的数据复制到其它主机(slave)上,并重新执行一遍来实现。

复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循坏,这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知的更新。


MySQL复制/主从同步的作用主要有以下几点:

     a.数据分布(data distribution)

     b.负载平衡(load balancing)

     c.数据备份(backup),保证数据安全

     d.高可用性与容错行(high availability and failover)

     e.实现读写分离,缓解数据库压力

为什么主库负责写,从库负责读?

1、如果主库与从库都负责读跟写,那么数据同步容易错乱。主库负责写,然后将数据同步到从库可以更好的保证数据一致性

2、大部分的业务,写的功能比较少,大部分是读的功能,所以主库一般是一台,从库有很多台。
 

三、MySQL主从同步方式

MySQL数据库的主从同步机制, 是通过复制主服务器的binlog日志到需要同步的从服务器。

1、master/主库将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events)

2、slave/从库将master的binary log events拷贝到它的中继日志(relay log)

3、slave重做中继日志中的事件,将改变反映它自己的数据

MySQL主从同步有三种方式:


1、基于SQL语句的复制。
基于SQL语句的复制模式的Binlog格式为STATEMENT,在这种模式下,主库每次将新增/修改数据的SQL语句都会追加写入到Binlog中,然后从库再读取binlog中的sql进行数据同步。这样做的优点是并不需要记录每一条SQL语句和每一行的变化,减少了二进制日志日志量,节约了I/O。mysql默认采用基于语句的复制,效率比较高。一旦发现没法精确复制时,会自动选着基于行的复制。


2、基于行的复制。
不记录每条SQL语句,仅记录哪条记录数据被修改了,以及修改后的结果。这样做的优点是不容易出现主、从库数据不一致的场景,但是缺点在于会产生大量日志。
3、混合模式复制。
在混合模式下,边的复制采用基于SQL语句的复制方式,只有当该方式无法复制(比如触发器、存储过程等等)时,才会使用基于行的方式。

当主从同步延迟较高时:

用户进行写操作,操作完成后,查询数据没有变化,一般会进行二次操作提交。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到