MySQL主从复制

主从复制原理

**1.**msater将执行的事务写入二进制日志中

**2.**slave将master的binary log拷贝到自己的中继日志中
首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志

**3.**sql(slave上)线程从中继日志中读取事件,更新数据

异步复制

mysql异步复制过程:
在这里插入图片描述

基于binary log 和position异步复制

前提环境:
准备两台机器(服务器,我用的是centos7系统两台)两台机器需在同一网段,firewalld、selinux服务

1.数据保持一致:
即通过mysql(还原)和mysqldump(全备)命令将两台机器数据达到一致
**a.**在master全备-------------mysqldump -uroot -p’123456’ --all-databases >/lianxi/henhuan_dump.sql

**b.**将文件用scp命令传输到slave上-------------------scp /lianxi/henhuan_dump.sql root@192.168.31.182:/root

c. 在slave上将数据还原----------------mysql -uroot -p’henhuan123456’ <henhuan_dump.sql

2.配置文件:
**a.**在master配置文件中(/etc/my.cnf)加入两行:
[mysqld]
log_bin
server_id=1

**b.**在slave配置文件加入一行即可:
server_id=1

**c.**在master创建用户并授权(用来让slave来拿数据的用户)
创建用户-----CREATE USER ‘henhuan_slave’@’%’ IDENTIFIED BY ‘123456’;
授权-------GRANT REPLICATION SLAVE ON . TO ‘henhuan_slave’@’%’;

**d.**在slave运行语句:
root@(none) 16:13 mysql> CHANGE MASTER TO MASTER_HOST=‘192.168.0.165’ ,
-> MASTER_USER=‘henhaun_slave’,
-> MASTER_PASSWORD=‘123456’,
-> MASTER_PORT=3306,
-> MASTER_LOG_FILE=‘sc-mysql-bin.000007’,
-> MASTER_LOG_POS=154;
注意:sc-mysql-bin.000007需要在master使用rshow master status命令查看,当前master的位置号

**e.**开启服务,运行start slave;
使用show slave status\G;查看状态,当下面两行都位yes即成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

**f.**可以进行测试,在master改变数据,slave数据是否发送改变

基于GTID的异步复制

**a.**在基于上面位置号的主从复制基础上更改配置:在master加入两条配置:
gtid-mode=ON
enforce-gtid-consistency=ON
再slave上加入四条配置:
log_bin
gtid-mode=ON
enforce-gtid-consistency=ON
log_slave-updates=ON

**b.**再slave上清除配置reset master;再停止服务stop slave
最后再重新配置:
root@(none) 16:42 mysql>CHANGE MASTER TO MASTER_HOST=‘192.168.0.165’ ,
-> MASTER_USER=‘henhuan_slave’,
-> MASTER_PASSWORD=‘123456’,
-> MASTER_PORT=3306,
-> master_auto_position=1;

**c.**start slave开启服务,测试是否成功

同步复制

组复制-------------------------
需要讨论----原理–由若干个节点共同组成的一个复制组,一个事务的提交
必须经过组内大多数节点(n/2 +1)决议通过

半同步复制

mysql-semi-sync过程:
在这里插入图片描述
半同步配置过程:
1.master执行
INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_master.so’;
2.在slave上执行
INSTALL PLUGIN rpl_semi_sync_slave SONAME ‘semisync_slave.so’;
查看插件手否安装成功
root@(none) 10:29 mysql>show plugins;
3.设置系统变量,master上
root@(none) 10:28 mysql>SET GLOBAL rpl_semi_sync_master_enabled = 1;
4.设置系统变量,slave上
root@(none) 10:29 mysql>SET GLOBAL rpl_semi_sync_slave_enabled = 1;
5.在slave上执行
STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;
6.查看半同步是否开启
show global variables like ‘%rpl_semi%’;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值