Mysql 主从复制

本文详细介绍了MySQL主从复制的原理、类型、解决的问题及工作流程。通过一主多从、多级复制和双主复制等架构,解决数据分布、负载平衡、备份和高可用性问题。配置过程包括主从节点的设置、权限赋予以及启动复制。在实际应用中,根据场景选择合适的复制架构,确保系统的稳定和高效。
摘要由CSDN通过智能技术生成

Mysql 主从复制

一、mysql主从原理

  1. 基本介绍
    MySQL 内建的复制功能是构建大型,高性能应用程序的基础。将 MySQL 的 数亿分布到到多个系统上去,这种分步的机制,是通过将 MySQL 的某一台主机的数据复制到其它主机( Slave )上,并重新执行一遍来实现的。复制过程中一个服务器充当服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置,从服务器接收从那时起发生的任何更新,然后封锁等等主服务器通知新的更新。
    请注意当你进行复制时,所有对复制中的表的更新必须在主服务器上进行。否则,你必须要小心,以避免用户对主服务器上的表进行的更新与对服务器上的表所进行的更新之间的冲突

  2. MySQL支持的复制类型
    基于语句的复制。 在主服务器上执行的 SQL 语句,在从服务器上执行同样的语句。否则,你必须要小心,以避免用户对主服务器上的表进行的更新与对服务器上的表所进行的更新之间的冲突,配置:binlog_format = ‘STATEMENT’
    基于行的复制。把改变的内容复制过去,而不是把命令在从服务器上执行一遍,从 MySQL 5.0开始支持,配置:binlog_format = ‘ROW’
    混合类型的复制。默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制,配置:binlog_format = ‘MIXED’

  3. mysql复制解决的问题
    数据分布
    负载平衡
    备份
    高可用性和容错行

  4. 复制是如何工作的
    可以简化为三个步骤(如下图):

Master 将改变记录到二进制日志中。
Slave 将 Master 的二进制日志拷贝到它的中继日志( Relay_log )
Slave 重做中继日志中的事件,将改变反映它自己的数据
zhucon.jpg

说明:

Master 记录二进制的日志。在每个事务更新数据之前,Master 在二进制日志记录这些改变。 MySQL 将事务日志的写入二进制日志,及时事务中的语句都市交叉执行的。在事件写入二进制日志完成后,Master 通知存储引擎提交事务。
Slave 将 Master 的 Binary log 拷贝到它自己的中继日志。首先 Slave 开始一个工作线程–I/O线程。I/O 线程在 Master 上打开一个连接,然后开始从二进制日志中读取事件,如果已经连上 Master,它会并等待master产生新的事件。I/O线程就这些事件写入中继日志。
SQL Slave Thread ( SQL从线程)处理该过程的最后一步。SQL纯种从中继日志读取事件,并重放其中的事件而更新 Slave 的数据。使其它与 Master 中的数据保持一致。只要该线程与 I/O 线程保持一致,中继日志通常会位于 OS 的缓存中,所以中继日志的开销很小。
此处,在 Master 中也有一个工作线程,和其他 MySQL 的连接一样,Slave 在 Master 中打开一个连接也会使得 Master 开始一个线程。复制过程有一个很重要的限制—复制在 Slave 上是串行化的,也就是说 Master 上的并行更新操作不能在 Slave 上并行操作。
5. 复制常用类型
5.1 复制的常用体系结构基本原则
每个 Slave 只能有一个 Master;
每个 Slave 只能有一个唯一的服务器ID;
每个 Master 可以有很多 Slave;
如果你设置了 log_slave_updates,Slave 可以是其他 Slave 的 Master,从而扩散 Master 的更新
MySQL 不支持多主服务器复制—即一个 Slave 可以有多个 Master,但是,通过一些简单的组合,我们却可以建立灵活而强大的复制体系结构。
5.2 一主多从复制架构
场景:在主库读取请求压力非常大的场景下,可以通过配置一主多从复制架构实现读写分离,把大量对实时性要求不是特别高的读请求通过负载均衡到多个从库上,降低主库的读取压力。在主库出现异常宕机的情况下,可以把一个从库切换为主库继续提供服务;
建议:
当 Slave 增加到一定数量时,Slave 对 Master 的负载以及网络带宽都会成为一个严重的问题。
不同的 Slave 扮演不同的作用(例如使用不同的索引,或者不同的存储引擎)
用一个 Slave 作为备用 Master,只进行复制
用一个远程的 Slave,用于灾难恢复。
5.3 多级复制架构
场景:一主多从的架构能够解决大部分读请求压力特别大的场景需求,但主库的I/O压力和网络压力会随着从库的增加而增长,而使用多级复制架构就可以解决一主多从场景下,主库额外的I/O和网络压力。 但要注意的是,多级复制场景下主库的数据是经历两次才到达读取的从库,期间的延时比一主多从复制场景下只经历一次复制的要大。
建议:
可能存在延时较长的风险
这种方案可以与第三方软件结合使用,例如Slave+LVS+Keepalived 实现高可用。
5.4 双主复制/Dual Master架构
场景:双主/Dual Master架构适用于写压力比较大的场景,或者DBA做维护需要主从切换的场景,通过双主/Dual master架构避免了重复搭建从库的麻烦。
建议:
最大问题就是更新冲突。
可以采用MySQL Cluster,以及将Cluster和Replication结合起来,可以建立强大的高性能的数据库平台。

二,Mysql配置

主节点:

启用二进制日志。
为当前节点设置一个全局唯一的server_id。
创建有复制权限的用户账号 REPLIACTION SLAVE ,REPLIATION CLIENT。
从节点:

启动中继日志。
为当前节点设置一个全局唯一的server_id。
使用有复制权限的用户账号连接至主节点,并启动复制线程。

1.基础环境配置
数据库版本: mysql 5.7.14
操作系统: CentOS 7
IP地址:192.168.243.138 (主 ) 192.168.243.140 ( 从 )

1.首先进行主机配置(打开二进制日志,指定唯一的servr ID)

[mysqld]
server_id=1
log_bin=mysql-bin
server_id:#为主服务器A的ID值(唯一)
log_bin:#二进制变更日值

配置完成后应该如下图所示:
在这里插入图片描述
注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化

GRANT REPLICATION SLAVE ON *.* to 'mysync'@'192.168.243.140' identified by 'q123456';
 //一般不用root帐号,“192.168.243.140”为可以连接的客户端地址,这里可以用%来表示所有客户端都可以连接

2.从机配置类似于主机,配置内容如下

log_bin = mysql-bin
server_id = 2
relay_log = mysql-relay-bin
log_slave_updates = 1
read_only = 1

server_id是必须的,而且唯一。slave没有必要开启二进制日志,但是在一些情况下,必须设置,例如,如果slave为其它slave的master,必须设置bin_log。在这里,我们开启了二进制日志,而且显示的命名(默认名称为hostname,但是,如果hostname改变则会出现问题)。
relay_log配置中继日志,log_slave_updates表示slave将复制事件写进自己的二进制日志(后面会看到它的用处)。
有些人开启了slave的二进制日志,却没有设置log_slave_updates,然后查看slave的数据是否改变,这是一种错误的配置。所以,尽量使用read_only,它防止改变数据(除了特殊的线程)。但是,read_only并是很实用,特别是那些需要在slave上创建表的应用

特别要注意的是,当两个配置完成后,记得要重启两个端的mysql

systemctl restart mariadb.service

3.启动从机,连接主从

change master to master_host=’192.168.243.138’,
-> master_user=’backup’,
-> master_password=’backup’,
-> master_log_file=’mysql-bin.000003’,
-> master_log_pos=0;
SHOW SLAVE STATUS\G #用于查看配置是否正确

在这里插入图片描述
Slave_IO_State, Slave_IO_Running, 和Slave_SQL_Running是No
表明slave还没有开始复制过程。

4.开始复制

 START SLAVE;
 SHOW SLAVE STATUS\G

在这里插入图片描述
这里Slave_IO_Runing和Slave_SQL_Runing都进入了yes,说明进程已经完成了
接下来可以通过插入数据来进行验证了,这里就不过多赘述。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值