暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL 半同步复制以及GTID复制

MySQLDBA运维零基础自学 2021-04-13
2837

配置半同步类型
5.6 after_commit
5.7 AFTER_SYNC
SET rpl_semi_sync_master_wait_point= AFTER_SYNC;


半同步复制因为多了复制过程中的确认信息的通信时间(ack TCP/IP),复制效率要比异步复制低,但是数据安全性较高

在5.7的AFTER_SYNC的半同步的复制效率,要比after_commit在主库高并发的情况下,要高。



MySQL半同步复制的搭建


1、首先搭建一个异步复制,在异步复制的基础上,配置半同步复制

2、安装半同步的插件

主库
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
从库
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

show plugins;
查看是否安装成功

3、半同步需要在主从同时开启
主库
SET GLOBAL rpl_semi_sync_master_enabled = 1;
从库
SET GLOBAL rpl_semi_sync_slave_enabled = 1;
以上的启动方式是在命令行操作,也可写在配置文件中。

4、重启从库的IO线程

STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;


查看是否开启半同步复制
mysql> show status like 'Rpl_semi_sync_master_status';
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| Rpl_semi_sync_master_status | ON    |
+-----------------------------+-------+

mysql> show status like 'Rpl_semi_sync_slave_status';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON    |
+----------------------------+-------+

报错日志打印信息
ote] Semi-sync replication initialized for transactions.
2018-04-21T16:01:13.035777+08:00 24 [Note] Semi-sync replication enabled on the master.
2018-04-21T16:01:13.036331+08:00 0 [Note] Starting ack receiver thread
2018-04-21T16:01:53.339548+08:00 25 [Note] While initializing dump thread for slave with UUID <93b3d580-4525-11e8-ae57-000c29a5e804>, found a zombie dump thread with the same UUID. Master is killing the zombie dump thread(3).
2018-04-21T16:01:53.339929+08:00 25 [Note] Start binlog_dump to master_thread_id(25) slave_server(31133306), pos(mysql-bin.000001, 286723)
2018-04-21T16:01:53.340220+08:00 25 [Note] Start semi-sync binlog_dump to slave (server_id: 31133306), pos(mysql-bin.000001, 286723)
2018-04-21T16:01:53.340934+08:00 3 [Note] Stop asynchronous binlog_dump to slave (server_id: 31133306)
~       
 85 [Note] Semi-sync replication initialized for transactions.
2018-07-12T00:09:20.604237+08:00 85 [Note] Semi-sync replication enabled on the master.
2018-07-12T00:09:20.604516+08:00 0 [Note] Starting ack receiver thread
2018-07-12T00:10:21.576332+08:00 86 [Note] While initializing dump thread for slave with UUID <c5f0173e-6e4f-11e8-bd8a-00163e04eeaf>, found a zombie dump thread with the same UUID. Master is killing the zombie dump thread(62).
2018-07-12T00:10:21.576429+08:00 86 [Note] Start binlog_dump to master_thread_id(86) slave_server(108463307), pos(mysql-bin.000002, 52637)
2018-07-12T00:10:21.576457+08:00 86 [Note] Start semi-sync binlog_dump to slave (server_id: 108463307), pos(mysql-bin.000002, 52637)
2018-07-12T00:10:21.576507+08:00 62 [Note] Stop asynchronous binlog_dump to slave (server_id: 108463307)          

配置文件的配置实例5.7
plugin_dir=/usr/local/mysql/lib/plugin
plugin_load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
loose_rpl_semi_sync_master_enabled = 1
loose_rpl_semi_sync_slave_enabled = 1
loose_rpl_semi_sync_master_timeout = 5000
rpl_semi_sync_master_wait_point = AFTER_SYNC
rpl_semi_sync_master_wait_for_slave_count = 1


就是如果没有该插件就忽略这个参数
loose_rpl_semi_sync_master_timeout = 5000
如果半同步复制返回ack的信息,超过5000ms,那么半同步复制会自动的降级为异步复制

rpl_semi_sync_master_wait_for_slave_count = 1
半同步复制中,如果有多个从库,需要等待几个从库返回确认信息。
---------------------------------------------------------------------------



GTID的概述:

1、全局事务标识:global transaction identifieds。

2、GTID事物是全局唯一性的,且一个事务对应一个GTID。

3、一个GTID在一个服务器上只执行一次,避免重复执行导致数据混乱或者主从不一致。

4、GTID用来代替classic的复制方法,不在使用binlog+pos开启复制。而是使用master_auto_postion=1的方式自动匹配GTID断点进行复制。

5、MySQL-5.6.5开始支持的,MySQL-5.6.10后开始完善。6、在传统的slave端,binlog是不用开启的,但是在GTID中,slave端的binlog是必须开启的,目的是记录执行过的GTID(强制)。


GTID是一个编号
UUID:事务编号

uuid存放文件
[root@master mysql3306]# cat auto.cnf
[auto]
server-uuid=872a46c0-4525-11e8-b2bc-000c292221ec

uuid是一个在时间和空间上都不相同的串码
可以唯一标志一个mysql实例
如何修改
1.可以手改
2.可以删除auto.cnf  删掉之后,重启数据库,可以自动生新的auto.cnf文件



如何开启GTID
MySQL 5.6只能是重启数据库开启GTID
MySQL 5.7可以在线开启GTID

1、从库
stop slave ;
reset slave all;
vim etc/my3307.cnf
[mysqld]
start slave;
show slave status\G;

2、参数配置:
gtid_mode=on
log_slave_updates=1
enforce_gtid_consistency=1
主从同时配置三个参数‘’

show variables like '%gtid%';
+----------------------------------+-----------+
| Variable_name                    | Value     |
+----------------------------------+-----------+
| binlog_gtid_simple_recovery      | ON        |
| enforce_gtid_consistency         | ON        |
| gtid_executed_compression_period | 1000      |
| gtid_mode                        | ON        |
| gtid_next                        | AUTOMATIC |
| gtid_owned                       |           |
| gtid_purged                      |           |
| session_track_gtids              | OFF       |
+----------------------------------+-----------+

3、搭建GTID
不需要指定主库的binlog的文件和位置
change master to master_host='39.108.108.46',master_port=3306,master_user='cjr',master_password='cjr',master_auto_position=1;


线上搭建GTID
mysqldump在线搭建
1、在备份的时候指定--master-data=2(来保存binlog的文件号和位置的命令)。
2、使用mysqldump的命令在dump文件里可以看到下面两个信息:
SET@@GLOBAL.GTID_PURGED='7800a22c-95ae-11e4-983d-080027de205a:1-8';
恢复数据前需要先通过reset master清空gtid_executed变量
scp tmp/all.sql 192.168.168.102:/tmp
3、将备份还原到slave后,使用change master to命令挂载master端。
change master to master_host='192.168.3.10',master_port=3306,master_user='rep',master_password='rep',master_auto_position=1;
注意:在mysql5.6.9以后的命令才支持这个功能。

从库reset master 命令的作用:
清空从库的gitd的应用信息
之后在清空gtid信息之后,才能指定从gtid的特定位置的开始同步

1、Xtrabackup_binlog_info文件中,包含global.gtid_purged='XXXXXX:XXXX'的信息。
2、然后到slave去手工的 SET GLOBAL.GTID_PURGED='XXXXXX:XXXX'。
3、恢复备份,开启change master to 命令。



GTID的限制

1. 不支持非事务引擎(从库报错,stopslave; start slave; 忽略)

2. 不支持create table … select 语句复制(主库直接报错)

3. 不允许在一个SQL同时更新一个事务引擎和非事务引擎的表

4. 在一个复制组中,必须要求统一开启CTID或是关闭GTID

5. 开启GTID需要重启(5.7中不需要)

6. 开启GTID后,就不在使用原来的传统的复制方式

7. 对于create temporary table 和drop temporary table语句不支持

8. 不支持sql_slave_skip_counter




最后修改时间:2021-04-14 09:14:49
文章转载自MySQLDBA运维零基础自学,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论