MYSQL8主从复制
概述

复制的常见应用场景

主从复制实现基本原理

MySQL支持的复制类型

复制解决的问题

复制过程


主从复制失败的原因

MYSQL8主从复制实现
关键点:
主库创建一个远程用户并授予复制权限。
在主库和从库的my.cnf配置服务器唯一id;
开启全局事务ID;
1、MYSQL主节点配置HOST
# 在msyql的主从节点配置host
sudo tee -a /etc/hosts << EOF
192.168.1.100 mysql-master
192.168.1.101 mysql-slave1
EOF
2、修改配置文件中的ServerID
在 my.cnf 文件中启用二进制日志记录,并为其分配一个唯一的服务器 ID。 
关闭主节点和从节点的mysql服务。
# 关闭mysql服务
systemctl stop msyqld
主服务器配置
每个数据库实例的服务器ID要唯一值
[mysqld]
# 启用binlog日志记录
log-bin=mysql-bin
# 主服务器唯一服务器ID
server-id=1
从服务器配置
注意:请确保此服务器的服务器 ID 不同于主服务器。
[mysqld]
# 从服务器唯一服务器ID
server-id=2
修改主从参数–启用全局事务标识符(GTID)
主库和备库都要添加下列参数。
https://blog.csdn.net/kang_01/article/details/124415221

在MySQL 5.7.x及之前的版本中,log-slave-updates的默认值是OFF。在MySQL 8.0.x版本中,log-slave-updates参数已被移除。
# 修改my.cnf
[mysqld]
# 启用全局事务标识符(GTID),用于标识复制拓扑结构中多个服务器上的事务
gtid_mode=ON
# 使用基于GTID的复制时强制执行严格一致性检查,防止数据不一致性
enforce_gtid_consistency=ON
# 必须参数
# 设置多级复制拓扑结构(包括双master环境),其中一个从属方作为向下游的其他从属方的主节点,则这很有用
# 控制slave数据库 是否把 从master 接受到的log 合并在 本slave 执行的内容记录到slave的二进制日志中
# Mysql8该参数已移除
log_slave_updates=1
重启MySQL服务
保存配置后,启动mysql服务
# 重启mysql服务
systemctl restart msyqld
3、主库创建用户repl@%并授权
在主库上执行。
repl用户是专门用于主从复制的用户
-- 为主库创建repl用户
CREATE USER 'repl'@'%.example.com' IDENTIFIED WITH mysql_native_password BY 'password';
-- 为repl用户授权 在所有库.表上 均有REPLICATION SLAVE权限
-- REPLICATION SLAVE权限允许用户作为从服务器连接到主服务器,并接收主服务器上更改的副本
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%.example.com';
-- 应用权限配置
FLUSH PRIVILEGES;

-- 锁定所有表并防止数据写入。这将确保您的备份是一致的,并且不会在正在进行复制时被更改。
FLUSH TABLES WITH READ LOCK;
查看主库的binlog位置和binlog名称
将这些值记录下来,因为它们将在配置从服务器时使用。
-- 查看二进制日志的名称和位置。
SHOW MASTER STATUS;
释放表锁
-- 释放表锁
UNLOCK TABLES;
4、从库开始主从复制
在从库上执行。MASTER_AUTO_POSITION = 1 启用自动复制拓扑,能实现自动切换主库。
启用 MASTER_AUTO_POSITION = 1自动拓扑参数后,从库会自动记录每个从库当前所处的拓扑位置,当发生主库故障切换时,从库会自动尝试连接新的主库,并根据之前记录的拓扑位置信息重新开始复制数据,从而实现自动切换主库,避免了手动干预的繁琐操作。
-- 配置从库连接到主库,准备执行复制数据
-- MASTER_AUTO_POSITION = 1 启用自动复制拓扑
CHANGE MASTER TO
MASTER_HOST = 'master.example.com',
MASTER_USER = 'repl',
MASTER_PASSWORD = 'password',
MASTER_AUTO_POSITION = 1;

主从复制其他参数示范
MASTER_LOG_FILE 和 MASTER_LOG_POS 的值应该是您在步骤3中记录的binlog的位置和名称。
MASTER_LOG_POS = 107 指定主库binlog文件当前正在写入的位置(偏移量)。这个参数的值是一个整数。
在主从复制中,从库会连到主库获取主库的binlog文件,然后从上次读取的位置继续读新的日志数据。
因此,MASTER_LOG_POS 参数以及相关的 MASTER_LOG_FILE 参数对于从服务器来说非常重要,它们告诉从服务器应该从哪里开始读取主服务器的日志数据。
-- 配置从库连接到主库,准备执行复制数据
CHANGE MASTER TO
MASTER_HOST = 'master.example.com',
MASTER_USER = 'repl',
MASTER_PASSWORD = 'password',
MASTER_LOG_FILE = 'mysql-bin.000001',
MASTER_AUTO_POSITION = 1,
MASTER_LOG_POS = 107;
启动从库复制进程
-- 启动从库复制进程:
START SLAVE;
-- 检查从库的状态
SHOW SLAVE STATUS\G;

5、测试主从复制是否生效
-- 在主库上创建数据库
CREATE database scott;
-- 在主库上创建表
CREATE TABLE scott.emp(
empno FLOAT(4),
ename VARCHAR(10),
job VARCHAR(9),
hiredate DATE,
sal FLOAT(7, 2),
comm FLOAT(7.2),
deptno FLOAT(2)
);
在从库查看:
-- 进入scott库
use scott;
-- 查看有哪些表
show tabtles;

文章详细介绍了MySQL8中主从复制的配置过程,包括主机和从机的ServerID设置、GTID的启用、创建复制用户及授权、查看和使用binlog、从库的复制配置以及如何测试复制效果。同时,讨论了主从复制的常见应用场景、复制的基本原理和可能遇到的问题。

1530

被折叠的 条评论
为什么被折叠?



