MySQL8.0.x 配置gtid主动同步

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上自动创建了。

img

在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主从复制搭建成功!!!!有什么问题欢迎留言指教。

原文地址:https://www.cnblogs.com/Serverlessops/p/14883440.html