gtid复制
GTID 复制(Global Transaction Identifier Replication)是 MySQL 5.6.5 引入的一种新的主从复制模式。它以事务标识符(GTID)为基础,用于标识每个已提交的事务,从而确保每个事务在所有主服务器和从服务器上都唯一执行一次。
GTID 复制具有以下优点:
- 更高的可靠性: GTID 复制可以确保每个事务在所有主服务器和从服务器上都唯一执行一次,从而防止数据不一致。
- 更高的可扩展性: GTID 复制可以并行复制多个事务,并可以轻松地添加新的主服务器或从服务器。
- 更简化的复制管理: GTID 复制可以消除对 binlog 服务器位置的需要,并简化故障转移操作。
- 更强的灾难恢复能力: GTID 复制可以使从服务器从任何点恢复,而无需担心 binlog 的一致性。
环境
主机名/IP | 角色 | 系统 |
server01/192.168.1.101 | mysql-master/mysql-slave | ubuntu22.04 |
server02/192.168.1.102 | mysql-slave/mysql-master | ubuntu22.04 |
配置mysql双主
安装
apt install mysql-server -y
server01配置
锁表,禁止备份途中进行写操作
mysql -u root -p
flush tables with read lock;
备份数据库(一般只备份业务数据库)
mysqldump -u root -p --databases world > /tmp/bak.sql
解锁
unlock tables;
创建同步用户,赋予复制权限
create user 'slave'@'192.168.1.102' identified by 'wakamizu';
grant replication slave on *.* to 'slave'@'192.168.1.102';
flush privileges;
exit;
开启二进制日志,开放监听接口
vim /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
log_bin=mysql-bin
server_id=1
bind-address=0.0.0.0
#防止主键重复
binlog_format=mixed
#强制binlog与磁盘同步
sync_binlog=1
#数据库主键不连续防止主键冲突
#自增值
auto_increment_increment=2
#起始序号
auto_increment_offset=1
#开启gtid,提供更可靠的数据一致性,防止数据回环问题
enforce-gtid-consistency=on
gtid-mode=on
log-slave-updates=1
replicate-do-db=world
relay_log=mysql-relay-bin
重启服务器
systemctl restart mysql
server02配置
导入备份数据库
mysql < /tmp/backup.sql
创建同步用户,赋予复制权限
mysql -u root -p
create user 'slave'@'192.168.1.101' identified by 'wakamizu';
grant replication slave on *.* to 'slave'@'192.168.1.101';
flush privileges;
开启二进制日志,开放监听接口
vim /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
log_bin=mysql-bin
server_id=2
bind-address=0.0.0.0
#防止主键重复
binlog_format=mixed
#强制binlog与磁盘同步
sync_binlog=1
#数据库主键不连续防止主键冲突
#自增值
auto_increment_increment=2
#起始序号
auto_increment_offset=2
#开启gtid,提供更可靠的数据一致性,防止数据回环问题
enforce-gtid-consistency=on
gtid-mode=on
log-slave-updates=1
replicate-do-db=world
relay_log=mysql-relay-bin
重启服务器
systemctl restart mysql
配置主从复制
mysql -u root -p
change master to \
master_host='192.168.1.101', \
master_user='slave', \
master_password='wakamizu', \
master_auto_position = 1, \
get_master_public_key=1;
当master_auto_position设置为 1 时,从服务器会连接到主服务器并请求主服务器 binlog 的 GTID 集合。
注意:如果slave用户的身份验证插件是caching_sha2_password,则需要指GET_MASTER_PUBLIC_KEY=1,以获取主服务器的RSA公钥进行身份验证增强连接的安全性
开启复制
start slave;
查看复制状态
show slave status \G;
server01配置
配置主从复制
mysql -u root -p
change master to \
master_host='192.168.1.102', \
master_user='slave', \
master_password='wakamizu', \
master_auto_position = 1, \
get_master_public_key=1;
开启复制
start slave;
查看复制状态
show slave status \G;