mysql8.0 gtid主从安装

mysql8.0 gtid主从安装

𝓓𝓸𝓷 Lv6

mysql8.0 gtid主从配置

一、环境

服务器IP 角色
192.168.1.151 Master
192.168.1.152 Slave01

二、关闭防火墙

1
2
3
systemctl stop firewalld  
systemctl disable firewalld
systemctl status firewalld

三、关闭Selinux

1
2
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux  
setenforce 0

四、配置yum

1
2
3
4
5
6
7
8
9
10
11
12
# cp -r /dev/cdrom /opt/yum

# cat > /etc/yum.repos.d/CentOS-Base.repo <<EOF
[base]
name=CentOS-\$releasever - Base
baseurl=file:///opt/yum
enable=1
gpgcheck=0

EOF

# yum clean all && yum makecache

五、卸载旧版mysql

1
2
3
4
5
6
7
for i in $(rpm -qa|grep mysql);do rpm -e $i --nodeps;done  

rm -rf /var/lib/mysql
rm -rf /etc/my.cnf
rm -rf /usr/share/mysql
rm -rf /etc/my.cnf.d
rm -rf /etc/mysql

六、创建用户

1
2
groupadd -g 10000 mysql  
useradd -r -g mysql -u 10000 -s /bin/false mysql

七、安装数据库(主从)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
(1)下载mysql
[root@primary ~]# cd /opt/soft

[root@primary soft]# wget -c https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.34-linux-glibc2.17-x86_64.tar.gz

(2)解压
[root@primary soft]# tar xvf mysql-8.0.34-linux-glibc2.17-x86_64.tar.gz -C /usr/local

(3)创建软链接
[root@primary soft]# cd /usr/local/ && ln -s mysql-8.0.34-linux-glibc2.17-x86_64/ mysql

(4)初始化数据库
# mkdir -p /data/mysql
# cd /usr/local/mysql/bin
# ./mysqld --initialize --user=mysql --datadir=/data/mysql



# cd /usr/local/mysql/bin
# ./mysqld --initialize-insecure --user=mysql --datadir=/data/mysql


(5)配置my.cnf
# vi /etc/my.cnf

[mysqld]

basedir=/usr/local/mysql
datadir=/data/mysql
character-set-server=utf8mb4
socket=/tmp/mysql.sock

log-error=/data/mysql/mysqld.log
pid-file=/data/mysql/mysqld.pid


[mysql]
default-character-set=utf8mb4
socket=/tmp/mysql.sock



---设置权限
# chmod 664 /etc/my.cnf


(6)创建mysql服务
# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
# chkconfig mysql on
# systemctl enable mysql


(7)配置环境变量
# cat >> /etc/profile <<EOF

export PATH=/usr/local/mysql/bin:$PATH

EOF


# source /etc/profile


(8)启动数据库
/etc/init.d/mysql start

mysqld_safe --user=mysql &

八、开启GTID(主从)

开启GTID,可以不用重启数据库,在线开启即可,只需要修改全局参数+然后将参数写入配置文件即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
(1)查看GTID是否开启
mysql> show variables like 'gtid_mode';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| gtid_mode | OFF |
+---------------+-------+
1 row in set (0.01 sec)


GTID_MODE变量值详解:
OFF 新事务是非GTID, Slave只接受不带GTID的事务,传送来GTID的事务会报错
OFF_PERMISSIVE 新事务是非GTID, Slave即接受不带GTID的事务也接受带GTID的事务
ON_PERMISSIVE 新事务是GTID, Slave即接受不带GTID的事务也接受带GTID的事务
ON 新事务是GTID, Slave只接受带GTID的事务


(2)加载配置
SET GLOBAL gtid_mode = ON;
SET GLOBAL enforce-gtid-consistency = ON;

注意: 在修改GTID_MODE时不可直接跳跃更改,否则会报以下错误
mysql> SET GLOBAL gtid_mode = ON;
ERROR 1788 (HY000): The value of @@GLOBAL.GTID_MODE can only be changed one step at a time: OFF <-> OFF_PERMISSIVE <-> ON_PERMISSIVE <-> ON. Also note that this value must be stepped up or down simultaneously on all servers. See the Manual for instructions.

需要按以下方法分段修改(主从都修改,无先后顺序):
mysql> set @@global.enforce_gtid_consistency=warn;
Query OK, 0 rows affected (0.00 sec)

注意:执行完这条语句后,如果出现GTID不兼容的语句用法,在错误日志会记录相关信息,那么需要调整应该程序避免不兼容的写法,直到完全没有产生不兼容的语句,可以通过应用程序去排查所有的sql,也可以设置后观察错误日志一段时间,建议观察过,这一步非常重要。


mysql> set @@global.enforce_gtid_consistency=on;
Query OK, 0 rows affected (0.00 sec)

mysql> set @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;
Query OK, 0 rows affected (0.01 sec)

mysql> set @@GLOBAL.GTID_MODE = on_permissive;
Query OK, 0 rows affected (0.01 sec)

检查主从是否存在匿名事务,需要等到该变量值为0:
mysql> show status like 'Ongoing_anonymous_transaction_count';

确保所有的匿名事务(非GTID事务)已经被完全复制到所有的server上。
主库执行:
mysql>show master status;
从库执行:
mysql>show slave status\G
mysql> show replica status\G
确保事务在从库都回放完毕,或者执行
SELECT MASTER_POS_WAIT('mysql-bin.00000x', xxx);
确认整个拓扑结构中已经没有匿名事务的存在,如之前产生的所有匿名事务已经全部被执行完毕,甚至二进制日志中也不要有匿名事务,可以通过flush logs,并让mysql来自动清理旧的二进制日志文件。

mysql> set @@GLOBAL.GTID_MODE = ON;
Query OK, 0 rows affected (0.01 sec)


(3)修改配置参数
# vi /etc/my.cnf

#GTID:
gtid_mode=on #开启gtid模式
enforce_gtid_consistency=on #强制gtid一致性,开启后对于特定create table不被支持



(4)验证
mysql> show variables like 'gtid_mode';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| gtid_mode | ON |
+---------------+-------+
1 row in set (0.02 sec)

九、主库配置

1.配置主库参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# cat  >  /etc/my.cnf  << EOF

[mysqld]

basedir=/usr/local/mysql
datadir=/data/mysql
character-set-server=utf8mb4
socket=/tmp/mysql.sock

log-error=/data/mysql/mysqld.log
pid-file=/data/mysql/mysqld.pid



#GTID:
server_id=1 #服务器id
gtid_mode=on #开启gtid模式
enforce_gtid_consistency=on #强制gtid一致性,开启后对于特定create table不被支持

#binlog
log_bin=master-binlog
log-slave-updates=1
binlog_format=row #强烈建议,其他格式可能造成数据不一致

#relay log
skip_slave_start=1



[mysql]
default-character-set=utf8mb4
socket=/tmp/mysql.sock



EOF


----------------------------------------------
参数详解:
# 主从复制-主机配置
# 主服务器唯一ID
server-id=1
# 启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=sys
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
# 设置需要复制的数据库(可设置多个)
binlog-do-db=test
# 设置logbin格式
binlog_format=STATEMENT

# 设置一个 binlog 文件的最大字节# 设置最大 100MB
max_binlog_size=104857600
# 设置了 binlog 文件的有效期(单位:天)
expire_logs_days = 7
----------------------------------------------

2.创建数据库复制帐号
1
2
3
4
5
6
7
8
mysql> create user repl@'192.168.1.152' identified with mysql_native_password by 'xl_KM59SoRT3';
Query OK, 0 rows affected (0.01 sec)

mysql> grant replication slave on *.* to repl@'192.168.1.152';
Query OK, 0 rows affected (0.00 sec)


这里的IP:192.168.1.152,为从库IP
3.重启主库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@primary ~]# systemctl restart mysql

[root@primary ~]# systemctl status mysql
● mysql.service - LSB: start and stop MySQL
Loaded: loaded (/etc/rc.d/init.d/mysql; bad; vendor preset: disabled)
Active: active (running) since Thu 2025-01-16 04:58:36 CST; 2s ago
Docs: man:systemd-sysv-generator(8)
Process: 2849 ExecStop=/etc/rc.d/init.d/mysql stop (code=exited, status=0/SUCCESS)
Process: 2874 ExecStart=/etc/rc.d/init.d/mysql start (code=exited, status=0/SUCCESS)
Tasks: 39
CGroup: /system.slice/mysql.service
├─2887 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/mysqld.pid
└─3099 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/mysqld.log --pid-file=/data...

Jan 16 04:58:35 primary systemd[1]: Starting LSB: start and stop MySQL...
Jan 16 04:58:36 primary mysql[2874]: Starting MySQL. SUCCESS!
Jan 16 04:58:36 primary systemd[1]: Started LSB: start and stop MySQL.
4.查看主库状态
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
mysql> show master status;
+----------------------+----------+--------------+------------------+------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------------+----------+--------------+------------------+------------------------------------------+
| master-binlog.000001 | 157 | | | 4aea15c3-e3a1-11ef-934f-000c29ac349c:1-2 |
+----------------------+----------+--------------+------------------+------------------------------------------+
1 row in set (0.00 sec)



mysql> show master status\G
*************************** 1. row ***************************
File: master-binlog.000001
Position: 157
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set: 4aea15c3-e3a1-11ef-934f-000c29ac349c:1-2
1 row in set (0.00 sec)

十、从库配置

1.配置从库参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# cat > /etc/my.cnf   <<EOF

[mysqld]

basedir=/usr/local/mysql
datadir=/data/mysql
character-set-server=utf8mb4
socket=/tmp/mysql.sock

log-error=/data/mysql/mysqld.log
pid-file=/data/mysql/mysqld.pid



#GTID:
server_id=2 #服务器id
gtid_mode=on #开启gtid模式
enforce_gtid_consistency=on #强制gtid一致性,开启后对于特定create table不被支持

#binlog
log_bin=slave-binlog
log-slave-updates=1
binlog_format=row #强烈建议,其他格式可能造成数据不一致

#relay log
skip_slave_start=1





[mysql]
default-character-set=utf8mb4
socket=/tmp/mysql.sock


EOF



从库添加read_only=1参数,限制普通用户修改从库数据,但不限制root用户
从库添加relay-log=mysql-relay参数可以设置生成relay log日志的名称

2.重启从库
1
2
3
[root@slave01 ~]# systemctl restart mysql

[root@slave01 ~]# systemctl status mysql
3.配置主从同步(从库)
3.1 新安装的mysql数据库配置同步(主库没有数据)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

change master to
master_host='192.168.1.151',
master_user='repl',
master_password='123456',
master_port=3306,
master_auto_position=1;



[root@slave01 ~]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.36-log 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> change master to
-> master_host='192.168.1.151',
-> master_user='repl',
-> master_password='123456',
-> master_port=3306,
-> master_auto_position=1;
Query OK, 0 rows affected, 2 warnings (0.00 sec))


192.168.1.151为主库IP地址

3.2 已经运行的Mysql数据库配置同步(主库有数据,–set-gtid-purged=on)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
(1)主库模拟数据
mysql> create database mydb;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mydb |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)

mysql> use mydb
Database changed
mysql> create table t(id int);
Query OK, 0 rows affected (0.01 sec)

mysql> insert into t values (1),(2),(3);
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0

mysql> select * from mydb.t;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.00 sec)

(2)备份主库数据
mysqldump -uroot -p -A -R -E --triggers --source-data=2 --single-transaction > /tmp/full.sql

注意: 这里没有加--set-gtid-purged参数,是因为--set-gtid-purged参数默认是on


(3)记录备份文件GTID信息
# more /tmp/full.sql

-- MySQL dump 10.13 Distrib 8.0.34, for Linux (x86_64)
--
-- Host: localhost Database:
-- ------------------------------------------------------
-- Server version 8.0.34

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!50503 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!50606 SET @OLD_INNODB_STATS_AUTO_RECALC=@@INNODB_STATS_AUTO_RECALC */;
/*!50606 SET GLOBAL INNODB_STATS_AUTO_RECALC=OFF */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
SET @@SESSION.SQL_LOG_BIN= 0;

--
-- GTID state at the beginning of the backup
--

SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ '4aea15c3-e3a1-11ef-934f-000c29ac349c:1-5';


(4)将导出文件复制从服务器
# scp /tmp/full.sql 192.168.1.152:/tmp

(5)从数据库恢复数据
从库执行以下命令:
mysql> reset master;
mysql> reset replica all;
mysql> source /tmp/full.sql
mysql> CHANGE REPLICATION SOURCE TO
SOURCE_HOST='192.168.1.151',
SOURCE_USER='repl',
SOURCE_PASSWORD='123456',
SOURCE_PORT=3306,
SOURCE_AUTO_POSITION = 1;


注意:
这种方法生成的备库生成的gtid中的uuid值与主库一样,192.168.1.151为主库IP
3.3 已经运行的Mysql数据库配置同步(主库有数据,–set-gtid-purged=on)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
(1)主库模拟数据
mysql> create database mydb;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mydb |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)

mysql> use mydb
Database changed
mysql> create table t(id int);
Query OK, 0 rows affected (0.01 sec)

mysql> insert into t values (1),(2),(3);
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0

mysql> select * from mydb.t;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.00 sec)

(2)备份主库数据
mysqldump -uroot -p -A -R -E --triggers --source-data=2 --single-transaction --set-gtid-purged=on > /tmp/full.sql


(3)注释掉备份文件中的GTID信息(SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ '4aea15c3-e3a1-11ef-934f-000c29ac349c:1-5';)

# vi /tmp/full.sql

-- MySQL dump 10.13 Distrib 8.0.34, for Linux (x86_64)
--
-- Host: localhost Database:
-- ------------------------------------------------------
-- Server version 8.0.34

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!50503 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!50606 SET @OLD_INNODB_STATS_AUTO_RECALC=@@INNODB_STATS_AUTO_RECALC */;
/*!50606 SET GLOBAL INNODB_STATS_AUTO_RECALC=OFF */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
SET @@SESSION.SQL_LOG_BIN= 0;

--
-- GTID state at the beginning of the backup
--

--- SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ '4aea15c3-e3a1-11ef-934f-000c29ac349c:1-5';



或者使用命令注释:
sed -i 's/SET @@GLOBAL.GTID_PURGED/--- SET @@GLOBAL.GTID_PURGED/g' /tmp/full.sql



(4)将导出文件复制从服务器
# scp /tmp/full.sql 192.168.1.152:/tmp

(5)从数据库恢复数据
从库执行以下命令:
mysql> reset master;
mysql> reset replica all;
mysql> source /tmp/full.sql
mysql> SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ '4aea15c3-e3a1-11ef-934f-000c29ac349c:1-5';
mysql> CHANGE REPLICATION SOURCE TO
SOURCE_HOST='192.168.1.151',
SOURCE_USER='repl',
SOURCE_PASSWORD='123456',
SOURCE_PORT=3306,
SOURCE_AUTO_POSITION = 1;
3.4 已经运行的Mysql数据库配置同步(Xtrabackup恢复)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
(1)主库备份
xtrabackup -ubackup -p --host localhost --backup --target-dir=/data/backup

(2)备份传输至从库
scp -r /data/backup/20250116 192.168.1.152:/apps/backup

(3)从库解压备份(如果没有压缩,可以无视此步)
xtrabackup -uroot -p --decompress --remove-original --target-dir=/apps/backup/20250116

(4)关闭从库
# mysqladmin -uroot -p shutdown

(5)清空从库数据
# rm -rf /apps/data/*

(6)从库prepare
xtrabackup -uroot -p --prepare --target-dir=/apps/backup/20250116

(7)恢复从库
xtrabackup -uroot -p --copy-back --target-dir=/apps/backup/20250116

(8)启动从库
# /etc/init.d/mysql start

(9)查看状态
---备库执行
mysql> show master status;
+---------------+----------+--------------+------------------+------------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+------------------------------------------------+
| binlog.000410 | 197 | | | d9035ed9-6758-11ee-87d8-0050569a12f8:1-2353668 |
+---------------+----------+--------------+------------------+------------------------------------------------+
1 row in set (0.00 sec)

mysql> show replica status\G
Empty set (0.00 sec)

(10)配置主从同步
---备库执行
mysql> CHANGE REPLICATION SOURCE TO
SOURCE_HOST='192.168.1.151',
SOURCE_USER='repl',
SOURCE_PASSWORD='123456',
SOURCE_PORT=3306,
SOURCE_AUTO_POSITION = 1;

4.开启主从同步(从库)
1
mysql> start replica;
5.检查同步状态
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
(1)从库
mysql> show replica status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.151
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-binlog.000001
Read_Master_Log_Pos: 154
Relay_Log_File: server01-relay-bin.000002
Relay_Log_Pos: 375
Relay_Master_Log_File: master-binlog.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 154
Relay_Log_Space: 585
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: 36c0690a-db7a-11ef-a9f4-000c299fbbe9
Master_Info_File: /data/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 1
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)



Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Slave_SQL_Running_State: Replica has read all relay log; waiting for more updates
SQL进程状态表明主从配置成功


(2)主库
mysql> show master status;
+----------------------+----------+--------------+------------------+------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------------+----------+--------------+------------------+------------------------------------------+
| master-binlog.000001 | 736 | | | 36c0690a-db7a-11ef-a9f4-000c299fbbe9:1-3 |
+----------------------+----------+--------------+------------------+------------------------------------------+
1 row in set (0.00 sec)

十一、安装主从后的工作

1.主库创建备用数据库复制帐号

为了以后从库切换成主库,也需要有复制帐号,所以可以提前创建好备用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
---主库执行命令:
mysql> create user repl@'192.168.1.151' identified with mysql_native_password by 'xl_KM59SoRT3';
Query OK, 0 rows affected (0.01 sec)

mysql> grant replication slave on *.* to repl@'192.168.1.151';
Query OK, 0 rows affected (0.00 sec)


这里的IP:192.168.1.151,为主库IP

mysql> SELECT user, host, authentication_string, plugin FROM mysql.user WHERE user = 'repl';
+------+----------------+-------------------------------------------+-----------------------+
| user | host | authentication_string | plugin |
+------+----------------+-------------------------------------------+-----------------------+
| repl | 172.16.140.152 | *027CD499810C41C50040CD35B716F967B4D8F6FA | mysql_native_password |
| repl | 192.168.1.151 | *027CD499810C41C50040CD35B716F967B4D8F6FA | mysql_native_password |
+------+----------------+-------------------------------------------+-----------------------+
2 rows in set (0.00 sec)

2.从库开启只读模式

一般从库最好开启只读模式,避免误操作从库与主库发生冲突,导致主从无法正常同步

请注意只读权限对超管账号无效

  • 开启set global read_only=1;
  • 查看show global variables like "%read_only%";
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
(1).命令行修改
mysql> set global read_only=1;
Query OK, 0 rows affected (0.00 sec)

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

mysql> show global variables like "%read_only%";
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_read_only | OFF |
| read_only | ON |
| super_read_only | ON |
| transaction_read_only | OFF |
+-----------------------+-------+
4 rows in set (0.00 sec)


(2).参数修改
vi /etc/my.cnf

read_only=1 # 从库只读 (非root用户)
super_read_only=1 # 从库只读 (限制超级用户)

(3).重启mysql
systemctl restart mysql

(4).开启从库同步
mysql> start replica;

  • Title: mysql8.0 gtid主从安装
  • Author: 𝓓𝓸𝓷
  • Created at : 2025-02-21 10:20:19
  • Updated at : 2025-02-27 18:21:54
  • Link: https://www.zhangdong.me/mysql8.0-master-slave-replication-gtid.html
  • License: This work is licensed under CC BY-NC-SA 4.0.
评论