MySQL8.0.x 配置gtid主动同步
环境配置
IP | 数据库版本 | 角色 |
---|---|---|
10.0.1.11 | 8.0.20 | master |
10.0.1.12 | 8.0.20 | slave |
10.0.1.13 | 8.0.20 | slave |
Master主配置文件
master配置文件:
[root@localhost ~]# grep -v '^#' /etc/my.cnf
[mysqld]
log_timestamps=SYSTEM
datadir=/data/mysql_data
socket=/data/mysql_data/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
gtid-mode=on # gtid开关
enforce-gtid-consistency=true # 强制GTID一致
log-slave-updates=1 # 从库强制更新binlog日志
log_bin = mysql-bin
binlog_format = mixed
expire_logs_days = 15
server-id = 51 # server-id 三台不同 ,db2为52,db3为53
default_authentication_plugin=mysql_native_password #修改密码加密方式
[mysql]
socket=/data/mysql_data/mysql.sock
[root@master ]# systemctl restart mysql
[root@master ]# mysql -uroot -p'dgdB20I5!@#'
mysql> create user 'repl'@'10.0.1.%' identified by 'dgdB20I5!@#'; 建立同步的账号
mysql>grant replication slave on *.* to 'repl'@'10.0.1.%';
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
测试一下建立的账号是否可以在slave上登录(可以登录)
[root@localhost ~]# mysql -urepl -h 10.0.1.11 -p'dgdB20I5!@#'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 20
Server version: 8.0.25 MySQL Community Server - GPL
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
mysql> show variables like "%gtid%";
+----------------------------------+----------------------------------------+
| Variable_name | Value |
+----------------------------------+----------------------------------------+
| binlog_gtid_simple_recovery | ON |
| enforce_gtid_consistency | ON |
| gtid_executed | 203eafcb-c9f9-11eb-b5c4-000c2961a60a:1 |
| gtid_executed_compression_period | 0 |
| gtid_mode | ON |
| gtid_next | AUTOMATIC |
| gtid_owned | |
| gtid_purged | |
| session_track_gtids | OFF |
+----------------------------------+----------------------------------------+
9 rows in set (0.01 sec)
查看服务器的UUID:
mysql> show global variables like '%uuid%';
+---------------+--------------------------------------+
| Variable_name | Value |
+---------------+--------------------------------------+
| server_uuid | 203eafcb-c9f9-11eb-b5c4-000c2961a60a |
+---------------+--------------------------------------+
1 row in set (0.01 sec)
查看主服务器的状态:
mysql> show master status;
+------------------+----------+--------------+------------------+----------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+----------------------------------------+
| mysql-bin.000001 | 347 | | | 203eafcb-c9f9-11eb-b5c4-000c2961a60a:1 |
+------------------+----------+--------------+------------------+----------------------------------------+
1 row in set (0.00 sec)
slave1主配置文件:
[root@localhost ~]# grep -v '^#' /etc/my.cnf
[mysqld]
datadir=/data/mysql_data
socket=/data/mysql_data/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
log_timestamps=SYSTEM
gtid-mode=on # gtid开关
enforce-gtid-consistency=true # 强制GTID一致
log-slave-updates=1 # 从库强制更新binlog日志
log_bin = mysql-bin
binlog_format = mixed
expire_logs_days = 15
server-id = 52 # server-id 三台不同 ,db2为52,db3为53
default_authentication_plugin=mysql_native_password #修改密码加密方式
[mysql]
socket=/data/mysql_data/mysql.sock
[root@node1 ]# systemctl restart mysqld
在slave1连接Master数据库
[root@node1 ]# mysql -uroot -p'dgdB20I5!@#'
mysql> change master to master_host='10.0.1.11',master_user='repl',master_password='dgdB20I5!@#'; #指定主库IP,使用的用户,密码
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)
查看slave状态:
mysql> show slave status G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.0.1.6
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: binlog.000003
Read_Master_Log_Pos: 878
Relay_Log_File: node1-relay-bin.000003
Relay_Log_Pos: 1086
Relay_Master_Log_File: binlog.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
I/O线程和SQL线程
a、从库I/O线程将主库上的日志复制到自己的中继日志( Relay Log )中。
b、从库SQL线程从Relay log里面读取内容,从Exec_Master_Log_Pos位置开始执行读取到的更新事件,将更新内容写入到slave的db
测试gtid主从复制
在master上建立数据库slave上自动创建了。
在master上查看,可以看到slave的状态(主库的sever_id、从库的server_id、slave_UUID)
mysql> show slave hosts;
+-----------+------+------+-----------+--------------------------------------+
| Server_id | Host | Port | Master_id | Slave_UUID |
+-----------+------+------+-----------+--------------------------------------+
| 53 | | 3306 | 51 | 20528668-c9f9-11eb-92b2-0050562fc441 |
| 52 | | 3306 | 51 | 2053f3da-c9f9-11eb-9637-0050562c319e |
+-----------+------+------+-----------+--------------------------------------+
2 rows in set, 1 warning (0.00 sec)
slave2主配置文件:
[root@localhost ~]# grep -vE "^#" /etc/my.cnf
[mysqld]
log_timestamps=SYSTEM
datadir=/data/mysql_data
socket=/data/mysql_data/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
gtid-mode=on # gtid开关
enforce-gtid-consistency=true # 强制GTID一致
log-slave-updates=1 # 从库强制更新binlog日志
log_bin = mysql-bin
binlog_format = mixed
expire_logs_days = 15
server-id = 53 # server-id 三台不同 ,db2为52,db3为53
default_authentication_plugin=mysql_native_password #修改密码加密方式
[mysql]
socket=/data/mysql_data/mysql.sock
在slave2连接Master数据库
命令同slave1连接数据库一样
至此gtid主从复制搭建成功!!!!有什么问题欢迎留言指教。