作用:基于GTID实现主从复制(重点)
文档:https://dev.mysql.com/doc/refman/8.0/en/replication-gtids-howto.html
环境说明:
关闭防火墙+SELINUX、配置IP与主机映射、时间同步、安装依赖包
| IP | 主机名 | 角色 |
| 192.168.88.101 | node1.xiaoteng.cn | master(主) |
| 192.168.88.102 | node2.xiaoteng.cn | slave(从) |
安装前准备:① 配置IP、主机名 ② 配置IP与主机映射 => /etc/hosts ③ 关闭防火墙与SELinux ④ 时间同步 ⑤ 安装必备软件,如vim、wget、rsync
设置主机名称
hostnamectl set-hostname node1.xiaoteng.cn
hostnamectl set-hostname node2.xiaoteng.cn
su或者bash指令
配置IP与主机映射
vim /etc/hosts
尾部追加如下内容
192.168.88.101 node1 node1.xiaoteng.cn
192.168.88.102 node2 node2.xiaoteng.cn
关闭防火墙与SELinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
vim /etc/selinux/config
安装一些依赖软件(系统必备软件)
dnf install vim wget rsync -y
到此环境准备完毕了!
数据库环境准备:请基于master.sh以及slave.sh自行安装mysql8软件,并进行数据同步
master:安装mysql并进行初始化
source master.sh
slave:只安装mysql不进行初始化
source slave.sh
停止mysqld,然后同步数据到slave中
master:
systemctl stop mysqld
rm -rf /export/server/mysql/data/auto.cnf
rsync -av /export/server/mysql/data node2:/export/server/mysql/
第一步:修改主库配置
修改主库的配置文件
cat > /etc/my.cnf <<EOF
[mysqld]
basedir=/export/server/mysql
datadir=/export/server/mysql/data
socket=/tmp/mysql.sock
port=3306
log-error=/export/server/mysql/master.err
log-bin=/export/server/mysql/data/binlog
server-id=10
character_set_server=utf8mb4
collation-server=utf8mb4_unicode_ci
gtid_mode=on
enforce_gtid_consistency=on
log_slave_updates=1
EOF
GTID配置说明:
启用全局事务标识符(GTID)模式
gtid_mode=on
强制GTID的一致性。这意味着在执行事务时,MySQL将确保所有涉及的服务器都使用相同的GTID集。
enforce_gtid_consistency=on
log_slave_updates=1
log_slave_updates=1是 MySQL 主从复制中的一个关键参数,它决定了从库(Slave)是否将从主库(master)同步过来的数据变更事件记录到自己的二进制日志(binlog)
第二步:修改从库配置
修改从库配置文件
cat > /etc/my.cnf <<EOF
[mysqld]
basedir=/export/server/mysql
datadir=/export/server/mysql/data
socket=/tmp/mysql.sock
port=3306
log-error=/export/server/mysql/slave.err
log-bin=/export/server/mysql/data/binlog
relay-log=/export/server/mysql/data/relaylog
server-id=20
character_set_server=utf8mb4
collation-server=utf8mb4_unicode_ci
gtid_mode=on
enforce_gtid_consistency=on
log_slave_updates=1
read-only=on
EOF
master节点/slave节点,重启MySQL
# 主服务器
touch /export/server/mysql/master.err
chown -R mysql.mysql /export/server/mysql
systemctl start mysqld
# 从服务器
touch /export/server/mysql/slave.err
chown -R mysql.mysql /export/server/mysql
systemctl start mysqld
从节点设置主库信息
以下是官网提供的设置参考(仅参考,需要调整为自己master服务器信息)
mysql> CHANGE REPLICATION SOURCE TO
> SOURCE_HOST = host,
> SOURCE_PORT = port,
> SOURCE_USER = user,
> SOURCE_PASSWORD = password,
> SOURCE_AUTO_POSITION = 1;
SOURCE_AUTO_POSITION = 1: 这告诉从服务器使用自动位置跟踪功能,以便它可以自动从主服务器获取最新的二进制日志事件,而无需手动指定位置。
具体配置代码:
master主服务器创建同步账号:
mysql> CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123';
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
slave从服务器基于change replication source进行同步操作
mysql> change replication source to
source_host='192.168.88.101',
source_port=3306,
source_user='slave',
source_password='123',
source_auto_position=1;
和AB复制最大的不同就是不需要寻找binlog以及对应的pos点位,只需要source_auto_position=1就可以自动同步!
第三步:开启从库复制
mysql> start replica;
查看复制状态
mysql> show slave status\G
...
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...