Mysql 主从复制之半同步复制(基于gtid)
admin
2023-04-30 16:04:02
0

Mysql主从复制
mysql主从复制原理:
从库有两个线程IO线程和SQL线程
1.从库的IO线程向主库的主进程发送请求,主库验证从库,交给主库IO线程负责数据传输;
2.主库IO线程对比从库发送过来的master.info里的信息,将binlog文件信息,偏移量和binlog文件名等发送给从库
3.从库接收到信息后,将binlog信息保存到relay-bin中,同时更新master.info的偏移量和binlog文件名
4.从库的SQL线程不断的读取relay-bin的信息,同时将读到的偏移量和文件名写道relay-log.info文件,binlog信息写进自己的数据库,一次同步操作完成。
5.完成上次同步后,从库IO线程不断的向主库IO线程要binlog信息
6.从库如果也要做主库,也要打开log_bin 和log-slave-update参数
配置读写mysql主从复制的步骤:
1.在主库与从库都安装mysql数据库
2.在主库的配置文件(/etc/my.cnf)中配置server-id 和log-bin
3.在登陆主库后创建认证用户并做授权。
4.在从库的配置文件(/etc/my.cnf)中配置server-id
5.登陆从库后,指定master并开启同步开关。
需要注意的是server-id主从库的配置是不一样的。
Server-id存在作用:
mysql同步的数据中是包含server-id的,而server-id用于标识该语句最初是从哪个server写入的。因此server-id一定要有的
Server-id不能相同的原因:每一个同步中的slave在master上都对应一个master线程,该线程就是通过slave的server-id来标识的;每个slave在master端最多有一个master线程,如果两个slave的server-id 相同,则后一个连接成功时,slave主动连接master之后,如果slave上面执行了slave stop;则连接断开,但是master上对应的线程并没有退出;当slave start之后,master不能再创建一个线程而保留原来的线程,那样同步就可能有问题;
在mysql做主主同步时,多个主需要构成一个环状,但是同步的时候有要保证一条数据不会陷入死循环,这里就是靠server-id来实现的;

Mysql的主从复制(gtid)实验配置:

配置环境:rhel6.5  iptables selinx down
172.25.40.1    server1.example.com  master
172.25.40.2    server2.example.com   slave
安装包:mysql-5.7.17-1.el6.x86_64.rpm-bundle.tar
在master和slave上解压后安装mysql数据库:

tar xf mysql-5.7.17-1.el6.x86_64.rpm-bundle.tar
yum install -y mysql-community-client-5.7.17-1.el6.x86_64.rpm mysql-community-common-5.7.17-1.el6.x86_64.rpm mysql-community-libs-5.7.17-1.el6.x86_64.rpm mysql-community-libs-compat-5.7.17-1.el6.x86_64.rpm mysql-community-server-5.7.17-1.el6.x86_64.rpm
 /etc/init.d/mysqld start
 grep 'password' /var/log/mysqld.log       
      #筛选初始化是数据库登陆密码
登陆数据库后修改密码:
`alter user root@localhost identified by 'xxxxxxx';` ##修改本地用户密码
1.Master端的操作:

vim /etc/my.cnf
[mysqld]
server-id=1
log-bin=mysql-bin
gtid_mode=ON    #使用gtid模式
enforce-gtid-consistency=true  #强制使用gtid

Slave端的操作:

[mysqld]
server-id=2
gtid_mode=ON
enforce-gtid-consistency=true

注意:在修改两台服务器的mysql配置文件时,一定要保证server-id必须是不同的,server-id的取值范围是:2^32-1
2.重新启动两台服务器上的mysql
` /etc/init.d/mysqld restart`
3.进入主库创建认证用户并授权
`grant replication slave on *.* to redhat@'172.25.40.%' identified by 'xxxxxxxxxx';`
4.进入slave端指定master

stop slave;
change master to master_host='172.25.40.1',master_user='redhat',master_password='xxxxxxxxxx',master_auto_position=1;
start slave;

5.在设置半同步复制master端的操作

mysql>  install plugin rpl_semi_sync_master soname 'semisync_master.so';
Query OK, 0 rows affected (0.50 sec)

mysql>  set global rpl_semi_sync_master_enabled=1;
Query OK, 0 rows affected (0.00 sec)

mysql> show global variables like '%rpl_semi%';
+-------------------------------------------+------------+
| Variable_name                             | Value      |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled              | ON         |
| rpl_semi_sync_master_timeout              | 10000      |
| rpl_semi_sync_master_trace_level          | 32         |
| rpl_semi_sync_master_wait_for_slave_count | 1          |
| rpl_semi_sync_master_wait_no_slave        | ON         |
| rpl_semi_sync_master_wait_point           | AFTER_SYNC |
+-------------------------------------------+------------+
6 rows in set (0.01 sec)

6.5.在设置半同步复制slave端的操作

mysql>  install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
Query OK, 0 rows affected (0.14 sec)

mysql> set global rpl_semi_sync_slave_enabled=1;
Query OK, 0 rows affected (0.00 sec)

mysql> show global variables like '%rpl_semi%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled     | ON    |
| rpl_semi_sync_slave_trace_level | 32    |
+---------------------------------+-------+
2 rows in set (0.00 sec)

如果在slave端开启io线程后,会自动调转为半同步模式进行数据传输
Mysql 主从复制之半同步复制(基于gtid)

关闭io线程 在master上再进行事务时会等待10s后从半同步状态转为异步。
Mysql 主从复制之半同步复制(基于gtid)

当第二次进行数据插入时会变成异步同步

Mysql 主从复制之半同步复制(基于gtid)

Mysql 并行复制
多线程工作
Slave端修改配置文件:

[mysqld]
slave-parallel-type=LOGICAL_CLOCK         
slave-parallel-workers=16             #开启16个线程工作
master_info_repository=TABLE        #以表的形式存放master_info的信息
relay_log_info_repository=TABLE       #以表的形式存放relay_log_info的信息
relay_log_recovery=ON               #

重启服务
`/etc/init.d/mysqld restart`
当进入数据库的mysql库中,可以执行sql语句:
`select * from slave_master_info;`
可以看到原本在/var/lib/mysql下的relay-log.info的文件已经转为数据库中的表。

相关内容

热门资讯

“台独”顽固分子刘世芳外甥被台... 5月13日,国务院台办举行例行新闻发布会。有记者问:对于“台独”顽固分子刘世芳外甥颜文群被所在台企解...
1至4月全国铁路完成固定资产投... 【大河财立方消息】 5月13日,国铁集团发布的数据显示,今年1至4月,铁路建设优质高效推进,全国铁路...
了不起的河洛文化丨巩义的盛唐物... 巩义出土的唐三彩。 河南省文物考古研究院供图近日,郑州市文物考古研究院考古博物馆二楼报告厅举办了一场...
方太油烟机自动排烟故障 方太油烟机是一款高品质的厨房电器,它能够有效地吸收和排除厨房产生的油烟,保持室内空气的清新。然而,在...
方太油烟机的油烟怎么处理 方太油烟机是一种能够清除厨房油烟的设备,可以有效的净化厨房空气,减少油烟对人体的危害。但是,油烟机使...
方太油烟机尺寸为什么有大有小 在挑选抽油烟机时,抽油烟机的尺寸是重点考虑问题。如果购买到的抽油烟机尺寸过大,必然会占用太多空间,甚...
邻妹妹帮办|冷冻玉米长黑斑仍在... “玉米霉变非常明显,超市还在售卖!”近日,信阳市浉河区湖东街道辖区居民李女士向大河报·邻妹妹反映,其...
电视机安装高度 1、安装电视的观看距离应该至少为显示屏对角距离的3到5倍,安装高度建议以用户坐在椅子或沙发上眼睛平视...
安装构件的吊装高度包括 具体要看吊装设备的承载力,如果起重重量达100吨以上,那么这种构件的吊装高度起码要在75米左右。当然...
国务院国资委:推动大型央企“瘦... 【大河财立方消息】据国务院国资委网站,5月11日,国务院国资委党委召开专题会议。会议强调,要围绕打好...