当前位置: 首页 > article >正文

Mysql基于gtid的主从同步配置实验

一、实验目的

本实验旨在帮助你掌握如何在 MySQL 中配置基于 GTID(Global Transaction Identifier)的主从复制,确保主服务器上的事务能够正确同步到从服务器,实现数据的同步和高可用性。 

GTID(Global Transaction Identifier)是 MySQL 5.6 及以上版本引入的全局事务标识符以 source_id:transaction_id 的格式唯一标识服务器上提交的事务,用于简化复制管理、提高数据一致性和可靠性,其在主从复制中通过为事务分配唯一标识并自动识别未执行事务,避免事务重复执行或遗漏问题。

二、实验环境

  • 操作系统:rhel9
  • MySQL 版本:MySQL 8.0
  • 主服务器 IP:192.168.65.131
  • 从服务器1 IP:192.168.65.132
  • 从服务器2 IP:192.168.65.133

三、实验步骤

(一)安装和配置 MySQL 服务器

在主服务器和从服务器上进行以下操作:

1. 安装 MySQL 8.0

使用以下命令安装 MySQL 8.0:

yum list | grep mysql
 yum install mysql-server.x86_64 
2. 启动 MySQL 服务
sudo systemctl start mysqld
3. 配置 MySQL 初始密码

修改初始密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_new_password';

(二)配置主服务器

1. 修改主服务器配置文件(my.cnf)

编辑主服务器的配置文件(通常位于 /etc/my.cnf 或 /etc/mysql/my.cnf),添加以下配置:

[mysqld]
server-id = 1
log-bin = mysql-bin
gtid_mode = ON
enforce_gtid_consistency = ON
binlog_format = ROW

保存并退出配置文件,然后重启 MySQL 服务:

sudo systemctl restart mysqld
2. 创建复制用户

登录到 MySQL 主服务器:

mysql -u root -p

在 MySQL 命令行中创建复制用户并授予复制权限:

CREATE USER 'repl'@'192.168.65.132' IDENTIFIED BY 'repl_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.65.132';
FLUSH PRIVILEGES;
CREATE USER 'repl'@'192.168.65.133' IDENTIFIED BY 'repl_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.65.133';
FLUSH PRIVILEGES;
  • 在 MySQL 的主从复制架构中,从服务器需要以特定的用户身份连接到主服务器,并具有相应的权限来执行复制操作。
  • GRANT REPLICATION SLAVE 语句授予了从服务器用户 repl 从 192.168.65.133 登录时的复制权限允许该用户从主服务器读取二进制日志(binlog)并将其应用到从服务器上,从而实现数据的同步。
  • 当没有此权限时,从服务器尝试连接主服务器时会被拒绝,因为主服务器不允许该用户进行复制操作,即使在 CHANGE MASTER TO 语句中配置了从服务器的复制信息,从服务器也会因为权限不足而无法读取主服务器的二进制日志,进而无法完成复制操作。
3. 获取主服务器状态

在主服务器上,执行以下命令获取主服务器的状态信息:

SHOW MASTER STATUS;

记录下 File 和 Position 的值,在后续从服务器配置中会用到,例如:

(三)配置从服务器

1. 修改从服务器配置文件(my.cnf)

编辑从服务器的配置文件(通常位于 /etc/my.cnf 或 /etc/mysql/my.cnf),添加以下配置:

从服务器1 

[mysqld]
server-id = 2
gtid_mode = ON
enforce_gtid_consistency = ON
binlog_format = ROW

从服务器2

[mysqld]
server-id = 3
gtid_mode = ON
enforce_gtid_consistency = ON
binlog_format = ROW

保存并退出配置文件,然后重启 MySQL 服务:

 systemctl restart mysqld
2. 配置从服务器复制

登录到从服务器的 MySQL:

mysql -u root -p

在 MySQL 命令行中配置从服务器复制,使用在主服务器上获取的 File 和 Position 信息:

CHANGE MASTER TO
    MASTER_HOST='192.168.65.131',
    MASTER_USER='repl',
    MASTER_PASSWORD='repl_password',
    MASTER_AUTO_POSITION = 1,
    get_master_public_key=1;

get_master_public_key=1 参数用于在主从服务器之间使用基于 RSA 密钥对的安全密码交换。如果你的 MySQL 配置启用了安全连接(例如 SSL/TLS),这个参数是很有用的 

3. 启动从服务器复制

在从服务器的 MySQL 命令行中启动复制:

START SLAVE;
4. 检查从服务器复制状态

在从服务器上,执行以下命令检查复制状态:

SHOW SLAVE STATUS\G

查看 Slave_IO_Running 和 Slave_SQL_Running 字段的值,它们应该都为 Yes,表示复制正常进行:

(四)测试主从同步

1. 在主服务器上插入数据

在主服务器的 MySQL 中插入一些数据:

CREATE DATABASE test_db;
USE test_db;
CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    department VARCHAR(50),
    salary DECIMAL(10, 2)
);
INSERT INTO employees (name, department, salary) VALUES
('Alice', 'HR', 5000.00),
('Bob', 'IT', 6000.00),
('Charlie', 'Finance', 5500.00);
2. 在从服务器上验证数据同步

登录到从服务器的 MySQL 并检查数据是否同步:

USE test_db;
SELECT * FROM test_table;

可以看到在主服务器上插入的数据已经同步到从服务器。


http://www.kler.cn/a/513786.html

相关文章:

  • Linux系统的第一个进程是什么?
  • 兼职全职招聘系统架构与功能分析
  • 解决conda create速度过慢的问题
  • 【Day23 LeetCode】贪心算法题
  • 使用nginx搭建通用的图片代理服务器,支持http/https/重定向式图片地址
  • 2024年第十五届蓝桥杯青少组国赛(c++)真题—快速分解质因数
  • 优雅解决webview_flutter不支持安卓选择图片视频文件问题
  • 电梯系统的UML文档08
  • 微服务学习-Sentinel 限流保护服务
  • LLaMA Factory框架微调GLM-4大模型
  • Java线程池ThreadPoolExecutor封装工具类
  • 两份PDF文档,如何比对差异,快速定位不同之处?
  • npm install安装缓慢或卡住不动
  • 【整体介绍】
  • 有了TiDB,是否还需要“散装”大数据组件?
  • 利用开源AI智能名片2+1链动模式S2B2C商城小程序满足用户的自恋心理
  • 亚博microros小车-原生ubuntu支持系列:5-姿态检测
  • Linux——信号量和(环形队列消费者模型)
  • [春秋杯冬季赛2025] pwn复现
  • 基于微信小程序的健身房预约管理系统
  • MySQL面试题2025 每日20道【其四】
  • 【0x04】HCI_Connection_Request事件详解
  • C++ 类- 构造和析构
  • 专业辅助软件,独家开发版本,请珍惜使用
  • 【专题】为2025制定可付诸实践的IT战略规划报告汇总PDF洞察(附原数据表)
  • C++ ——— 模拟实现 vector 类