MySQL数据库的基于GTID的主从复制原理和方法详解

复制概述

复制解决的基本问题是让一台服务器的数据与其他服务器保持同步!

MySQL复制数据步骤:
1.在主库上把数据更改记录到二进制文件(Binary Log)中(这些记录被称为二进制日志事件)
2.备库将主库上的日志复制到自己的中继日志(Relay Log)中。
3.备库读取中继日志中的事件,将其重放到备库数据之上。
MySQL数据库的基于GTID的主从复制原理和方法详解_第1张图片

一. mysql的主从复制

实验环境:

虚拟机名 功能
sever1 主库
server2 从库

MySQL传统复制是基于MySQL二进制文件和对应日志文件中每个事件的偏移量位置点

主库配置(server1):

1.下载安装包并解压:

tar xf mysql-5.7.24-1.el7.x86_64.rpm-bundle.tar

MySQL数据库的基于GTID的主从复制原理和方法详解_第2张图片
2.安装需要的安装包,删除其他多余的安装包
MySQL数据库的基于GTID的主从复制原理和方法详解_第3张图片
3.复制安装包给server2

scp * [email protected]:

MySQL数据库的基于GTID的主从复制原理和方法详解_第4张图片
4.主库配置文件:

vim /etc/my.cnf
log-bin=mysql-bin	##  允许slave同步自己的二进制文件
server-id=1		##  数据库id号为1

5.开启mysqld:

systemctl start mysqld

6.查看数据库初始密码:

grep password /var/log/mysqld.log

在这里插入图片描述
7.主库安全初始化

mysql_secure_installation

MySQL数据库的基于GTID的主从复制原理和方法详解_第5张图片MySQL数据库的基于GTID的主从复制原理和方法详解_第6张图片MySQL数据库的基于GTID的主从复制原理和方法详解_第7张图片
8.进入主数据库,创建复制帐号。
MySQL会赋予一些特殊的权限给复制线程。在备库运行的I/O线程会建立一个到主库的TCP/IP连接。这意味着必须在主库创建一个用户,并赋予合适的权限。备库I/O线程以该用户名连接到主库并读取其二进制日志。通过以下语句来创建用户:

mysql> grant replication slave on *.* to repl@'172.25.77.%' identified by 'WESTOS+123redhat';  

MySQL数据库的基于GTID的主从复制原理和方法详解_第8张图片

9.查看主库的状态:

mysql> show master status;

MySQL数据库的基于GTID的主从复制原理和方法详解_第9张图片
从库配置(server2):

1.安装数据库

yum install m*

MySQL数据库的基于GTID的主从复制原理和方法详解_第10张图片
2.从库配置文件:

vim /etc/my.cnf
server-id=2		##  数据库id号为2

3.开启数据库

systemctl start mysqld

4.查看数据库初始密码:

grep password /var/log/mysqld.log

5.从库安全初始化

mysql_secure_installation

6.根据主库的二进制文件和position号复制主库

mysql -p ##进入数据库
mysql> change master to master_host='172.25.77.1', master_user='repl', master_password='WESTOS+123redhat', master_log_file='mysql-bin.000002', master_log_pos=1003;

MySQL数据库的基于GTID的主从复制原理和方法详解_第11张图片
7.查看从库状态:

mysql> START SLAVE;
mysql> show slave status\G;

MySQL数据库的基于GTID的主从复制原理和方法详解_第12张图片
测试:
1.在主库上创建数据库,并添加数据。看是否从库同步:

mysql> create database westos;
mysql> use westos;
mysql> show tables;
mysql> create table usertb(
    -> username varchar(10) not null,
    -> password varchar(15) not null);
mysql> desc usertb;
mysql> insert into usertb values('user1','123');
mysql> select * from usertb;

MySQL数据库的基于GTID的主从复制原理和方法详解_第13张图片MySQL数据库的基于GTID的主从复制原理和方法详解_第14张图片
在从库上查看是否同步:同步成功!

mysql> show databases;
mysql> use westos;
mysql> select * from usertb;

MySQL数据库的基于GTID的主从复制原理和方法详解_第15张图片

二. gtid异步复制

1.主库和从库的配置文件

vim /etc/my.cnf
gtid_mode=ON	### 开启gtid模式
enforce-gtid-consistency=true

2.查看主库所做操作

cd /var/lib/mysql
mysqlbinlog mysql-bin.000002

3.主库查看uuid

cat auto.cnf 

在这里插入图片描述
4.重新启动数据库

systemctl restart mysqld

5.主库添加数据:

mysql> use westos;
mysql> insert into usertb values('user2','123');
mysql> insert into usertb values('user3','123');

MySQL数据库的基于GTID的主从复制原理和方法详解_第16张图片
6.从库查看:

mysql> select * from gtid_executed;

MySQL数据库的基于GTID的主从复制原理和方法详解_第17张图片

mysql> show slave status\G;

MySQL数据库的基于GTID的主从复制原理和方法详解_第18张图片
7.关闭同步复制

mysql> stop slave;

8.重新编写同步规则:
mysql> change master to master_host=‘172.25.77.1’, master_user=‘repl’, master_password=‘WESTOS+123redhat’, master_auto_position=1;
9.开启同步复制:

mysql> start slave;

MySQL数据库的基于GTID的主从复制原理和方法详解_第19张图片
10.查看

mysql> show slave status\G;

MySQL数据库的基于GTID的主从复制原理和方法详解_第20张图片11.从库数据同步
MySQL数据库的基于GTID的主从复制原理和方法详解_第21张图片

三.gtid半同步复制

主库(server1):
1.安装插件

INSTALL PLUGIN rpl_semi_sync_master soname 'semisync_master.so'; 

2.查看是否安装成功:

SELECT PLUGIN_NAME,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%semi%';

3.激活插件

SET GLOBAL rpl_semi_sync_master_enabled=1;

MySQL数据库的基于GTID的主从复制原理和方法详解_第22张图片

备库(server2)
1.安装插件:

INSTALL PLUGIN rpl_semi_sync_slave soname 'semisync_slave.so';

2.激活插件:

SET GLOBAL rpl_semi_sync_slave_enabled=1;

在这里插入图片描述
3.关闭I/O线程

stop slave io_thread;

4.开启I/O线程

start slave io_thread;

5.从库查看

show status like '%rpl%';
show variables like '%rpl%';

MySQL数据库的基于GTID的主从复制原理和方法详解_第23张图片
6.主库上查看:开启

show variables like '%rpl%';

MySQL数据库的基于GTID的主从复制原理和方法详解_第24张图片
7.在从库上关闭I/O线程

stop slave io_thread;

8.主库上查看:关闭

show variables like '%rpl%';

测试:
1.在主库上插入数据:

mysql> use westos;
mysql> insert into usertb values('user4','123');

MySQL数据库的基于GTID的主从复制原理和方法详解_第25张图片
2.在从库上查看是否同步(没同步):

mysql> use westos;
mysql> select * from usertb;

MySQL数据库的基于GTID的主从复制原理和方法详解_第26张图片
3.在从库上开启I/O线程

mysql> start slave io_thread;

4.从库查看(同步)

mysql> select * from usertb;

MySQL数据库的基于GTID的主从复制原理和方法详解_第27张图片
5.主库查看信息:

mysql> show processlist;

MySQL数据库的基于GTID的主从复制原理和方法详解_第28张图片

你可能感兴趣的:(数据库)