Mysql的主从复制(三)

一  mysql主从复制的优化

说明:5.7之后才引出的

GTID:不需要再指明要读取的二进制日志文件也不需要知道主库为了跟踪日志循环所维护文件的一个索引(position动态变化)

实验:基于GTID的主从复制!

重点:GTID和半同步复制解决的问题

master配置文件

log-bin=mysql-bin
server_id=1 #每一个都不一样!
gtid_mode=ON
enforce_gtid_consistency=true

参数说明

log_bin: 自定义二进制日志存储的路径,默认是和mysql数据库文件存储在一起的!

server-id: 服务器ID,保证集群中唯一,所以在上面的从服务器中的server-id必须改成不一样的!
grant replication slave on *.* to repl@'172.25.2.%' identified by 'Wzj@170000';

show master status;

slave 配置文件

server-id=2
gtid_mode=ON
enforce_gtid_consistency=true
-- 说明:该步如果是之前异步复制所做的实验!

stop slave;

change master to master_host = '172.25.14.10', master_user = 'repl', master_password = 'Wzj@17000',master_auto_position =1 ;

start slave;        -->看对应的开启的两个线程的状态!

show master status; -->查看下状态!

cat relay-log.info  -->中继日志(shell中执行)

注意:半同步复制在slave端与异步复制的SQL语句的区别-->不需要声明日志文件和position位置!

异步复制

对比

二  半同步

(1)简介

从MySQL5.5开始,MySQL以插件的形式支持半同步复制,要理解半同步,首先我们来看看异步,全同步的概念

1)异步复制(Asynchronous replication)

        mysql默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理,这样就会有一个问题,主如果crash掉了,此时主上已经提交的事务可能并没有传到从上,如果此时,强行将从提升为主,可能导致新主上的数据不完整,也即数据一致性!

       核心:master不管slave是否写入中继日志

2)全同步复制(Fully synchronous replication)

       指当主库执行完一个事务,所有的从库都执行了该事务(也即从库的relay_log也回放)才返回给客户端。因为需要等待所有从库执行完该事务才能返回,所以全同步复制的性能必然会收到严重的影响。

       核心所有的slave必须对中继日志进行SQL回放!

3)半同步复制(Semisynchronous replication)

        介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟,这个延迟最少是一个TCP/IP往返的时间。所以半同步复制最好在低延时的网络中使用。

       核心:其中一个slave只需将接收到的二进制日志写入relay-log中即可!

       说明:半同步的复制基于插件的开启!

参考文档

三  基于GTID的半同步复制

主(master)

 -- 安装插件
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
 -- 测试
SELECT PLUGIN_NAME,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%semi%';
--  开启插件(半同步-->master)
SET GLOBAL rpl_semi_sync_master_enabled = 1;

(slave)

-- 注意是slave,区别mster
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'; 
-- 以变量的方式开启相应的配置-->全局回话有效!
SET GLOBAL rpl_semi_sync_slave_enabled = 1;

测试

-- master

SHOW VARIABLES LIKE 'rpl_semi_sync%';

-- rpl_semi_sync_master_enabled              | ON   (开启)

-- 主从都测试下

SHOW VARIABLES LIKE 'rpl%';  -->含义!

实验测试

-- 测试

-- slave

STOP SLAVE IO_THREAD -->把从的I/O线程关闭了,也可以关闭网络-->目的:无法写入slave的中继日志,导致延时,证明是处于半同步的状态

-- master

-- 第一次默认10秒(超时,就会从全同步变成半同步),思考:如何修改呢?

insert into *.* values ('user4','660')

-- 插入数值:10.01秒左右才成功!

-- 此时会变成异步,再插入数据,没有延时,salve -->看不到数据!

-->保证业务上线正常运行

-->解决:半夜(峰值不是太高的时候,手动同步)

-->进一步测试

START SLAVE IO_THREAD; -- 看到:内容同步过来,此时又变成了半同步复制!

测试:发现多个slave的时候,随机选择一个slave(最快的那个),如果可以写,不用等,写不了就等10s超时!

三  读写分离-->MyCat、Proxy

四  高可用-->MHA

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值