Mysql的主从复制,基于gtid的主从复制与半同步复制
mysql的主从复制
mysqldump --all-databases --master-data > dbdump.db
主机名(ip) | 用途 |
---|---|
server1(172.25.42.1) | master(主机) |
server2(172.25.42.2) | slave(从机) |
-
server1端的配置(master端)
-
安装包解压并删除不需要的安装后安装
[[email protected] ~]# ls
mysql-5.7.24-1.el7.x86_64.rpm-bundle.tar
mysql-community-client-5.7.24-1.el7.x86_64.rpm
mysql-community-common-5.7.24-1.el7.x86_64.rpm
mysql-community-libs-5.7.24-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.24-1.el7.x86_64.rpm
mysql-community-server-5.7.24-1.el7.x86_64.rpm
留下五个rpm包即可,其余包可删除
[[email protected] ~]# yum install *.rpm ##开始安装
[[email protected] ~]# scp mysql-community-libs-5.7.24-1.el7.x86_64.rpm mysql-community-libs-compat-5.7.24-1.el7.x86_64.rpm mysql-community-client-5.7.24-1.el7.x86_64.rpm mysql-community-common-5.7.24-1.el7.x86_64.rpm mysql-community-server-5.7.24-1.el7.x86_64.rpm [email protected]:/root ##将安装包发给slave端 -
数据库的开启与初始化
[[email protected] ~]# systemctl start mysqld##开启数据库
[[email protected] ~]# cat /var/log/mysqld.log | grep password##查找密码
"[email protected]:"后的内容为数据库的初始密码
[[email protected] ~]# mysql_secure_installation ##初始化数据库
“Enter password for user root”后输入查找的初始密码就可以进行初始化,设置的新密码必须含有大写字母,小写字母,特殊符号与数字
选择“Change the password for root ? ((Press y|Y for Yes, any other key for No) :”为n
其余选项都选择“y”
-
登陆查看并修改配置文件
[[email protected] ~]# mysql -uroot -pWsp+123ld
[[email protected] ~]# vim /etc/my.cnf##修改配置文件
[[email protected] ~]# systemctl restart mysqld##重启服务 -
创建用户授权
grant replication slave on . to [email protected]‘172.25.42.%’ identified by ‘Wsp+123ld’;
show variables like ‘log_%’;##查看二进制日志是否打开show master status;查看主库状态
-
server2端配置(slave端)
-
安装mysql的rpm包
[[email protected] ~]# yum install *.rpm -y -
数据库初始化;
1.开启数据库查看密码
[[email protected] ~]# systemctl start mysqld
[[email protected] ~]# cat /var/log/mysqld.log | grep password
2019-07-27T05:24:20.081544Z 1 [Note] A temporary password is generated for [email protected]: !uOuaRHka8LF
2.初始化
[[email protected] ~]# mysql_secure_installation
初始化的选项与主备相同
3.登陆查看
[[email protected] ~]# mysql -uroot -pWsp+123ld
查看授权是否成功 -
编写配置文件并重启mysqld服务
[[email protected] ~]# vim /etc/my.cnf
[[email protected] ~]# systemctl restart mysqld -
从设备同步主设备的数据配置
change master to master_host=‘172.25.42.1’,master_user=‘repl’,master_password=‘Wsp+123ld’,master_log_file=‘mysql=bin.000002’,master_log_pos=447; -
开启从设备查看其状态
start slave;##开启从设备
show slave status \G;##查看状态
只有当显示为黑色的两行都为yes说明同步成功,否则失败。
- 测试
- 在主库中建立数据库并插入数据
create database westos;
use westos;
- 在从库中查看数据是否同步
基于gtid的异步复制
- 主端配置
添加配置文件如下
[[email protected] mysql]# vim /etc/my.cnf
重启服务
[[email protected] ~]# systemctl restart mysqld
查看主端的uuid
[[email protected] ~]# cd /var/lib/mysql
[[email protected] mysql]# cat auto.cnf
[auto]
server-uuid=00e50136-b022-11e9-8bf5-52540062d8e1
-
从端配置
1.添加配置文件
[[email protected] mysql]# vim /etc/my.cnf
2.重启服务
[[email protected] ~]# systemctl restart mysqld3.停止slave,添加新的模式同步并开启slave
Master_UUID为主端的uuid -
测试
主库中插入数据:
从库中查看:
基于git的半同步复制
-
主端的配置
-
安装服务插件
-
开启半同步复制并查看响应变量
查看环境变量:
查看状态变量: -
从端的配置
-
安装服务插件并开启半同步复制
-
查看环境变量
-
重启io线程使得同步方式变为半同步复制,若不重启,则默认方式依旧为异步复制
-
测试
-
从端关闭io线程
-
在主端插入数据
第一次在默认10s后确认slave挂掉后,会自动转变默认方式为异步复制,所以第二次插入数据的时间壁第一次插入时间要少10s左右,第一次插数据多余的10s左右的时间就是默认以半同步方式连接的时间,10s内若依旧无法连接则会改变备份方式为异步复制。 -
在主端查看半同步复制的情况
Rpl_semi_sync_master_no_tx | 2 表示没有成功接受到slave的次数,若以半同步方式连接,其大小应该为0
Rpl_semi_sync_master_yes_tx | 0 表示成功接受到slave的次数,若大与0则表示以半同步方式连接。 -
在从端查看数据
这些数据都是以异步复制所同步的数据。若不开启io线程,这些数据也无法同步。当io线程开启的时候会以半同步复制的方式进行同步。