MySQL的半同步复制是一种高可用性和数据一致性的数据复制方式,它可以在主节点提交事务后,等待至少一个从节点也提交了该事务才返回成功,保证了数据的可靠性,同时又不会像全同步复制一样影响主库的写入效率。下面是详细的攻略:
步骤一:修改MySQL的配置文件
在MySQL的配置文件(my.cnf)中,需要打开半同步复制选项:
[mysqld]
plugin-load=“semisync_master.so;semisync_slave.so” # 加载插件
# 设置为 1 表示开启半同步复制,0 表示关闭
# 默认为 OFF 且只能在主库启用
# 关闭半同步复制的方式是修改为 SEMI_SYNC_SLAVE=NO
# 把以下 2 个参数写在主库的配置文件 my.cnf 中
# 从库可以不设置
# 开启半同步复制需满足高版本(5.5.16)和配套网络协议
# 另外,务必要 根据版本下载对应的插件
# 下载地址:https://dev.mysql.com/downloads/mysql/
# 例如:percona-server-5.6.40-84.0.tar.gz/MySQL-server-5.7.26-1.el7.x86_64.rpm
# 这里为了简单只讲半同步,其中 SSL 没有加入
# 主库需要开启半同步复制,从库无需开启
# semisync_master_enabled 设定打开 MySQL 半同步复制能力
# 只有在主机上打开时才能生效。
semisync_master_enabled = 1
# 从库是否要接受半同步复制的同步信息,值为0或1。
semisync_slave_enabled = 1
# 查看半同步插件状态信息
show plugins;
步骤二:重启MySQL实例
重启MySQL服务,让修改的配置文件生效。
步骤三:创建测试表和插入测试数据
先创建一张测试表:
create table test(
id int primary key,
name varchar(20)
) engine=InnoDB;
插入测试数据:
insert into test values(1,'test1'),(2,'test2'),(3,'test3');
步骤四:创建从库
创建从库用于数据同步:
# 复制主库的数据前,我们先配置从库的信息,命令如下
# REPLICA_SERVER_ID 是从库的 ID,这个值必须唯一并非 0。
CHANGE MASTER TO
MASTER_HOST='主库ip',
MASTER_PORT=3306,
MASTER_USER='用户名',
MASTER_PASSWORD='密码',
MASTER_LOG_FILE='binlog日志名称',
MASTER_LOG_POS=主库的 binlog 日志点,
MASTER_CONNECT_RETRY=10,
MASTER_HEARTBEAT_PERIOD=1; # 主库和从库进行连接检查的心跳周期默认值是一秒
步骤五:开启从库同步
在从库上执行以下命令,开启同步,等待同步成功:
START SLAVE;
SHOW SLAVE STATUS \G;
步骤六:在主库中插入数据
在主库中插入新数据:
INSERT INTO test VALUES (4, 'test4');
等待从库同步成功,可以通过执行 SHOW SLAVE STATUS \G;
查看复制状态,其中 Seconds_Behind_Master字段应该为0。
示例一
在主库中执行如下SQL语句:
INSERT INTO test VALUES (5, 'test5');
等待从库同步成功后,执行查询语句:
SELECT * FROM test;
结果应该如下:
id | name |
---|---|
1 | test1 |
2 | test2 |
3 | test3 |
4 | test4 |
5 | test5 |
示例二
在主库中执行如下SQL语句:
BEGIN;
UPDATE test SET name='new test' WHERE id=1;
INSERT INTO test VALUES (6, 'test6');
COMMIT;
等待从库同步成功后,执行查询语句:
SELECT * FROM test;
结果应该如下:
id | name |
---|---|
1 | new test |
2 | test2 |
3 | test3 |
4 | test4 |
5 | test5 |
6 | test6 |
以上就是MySQL的半同步复制的相关攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:简单谈谈MySQL的半同步复制 - Python技术站