Mysql 8.4.0 结合 Docker 搭建GTID主从复制,以及传统主从复制

注意:本教程不适用旧版本,Mysql 8.4.0 和 旧版本,主从复制相关命令有所变化,具体区别请看文末参考

软件版本

Docker:26.1.3

Mysql:8.4.0

GTID主从复制

1.准备主从两台服务器

2.两台服务器分别创建 docker-compose.yml 文件

services:
  mysql:
    image: mysql:8.4.0
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: abc123
    volumes:
      - ./data:/var/lib/mysql
      - ./config:/etc/mysql/conf.d
    restart: always

3.主库服务器导入配置到 config/my.cnf

[mysqld]
gtid_mode=ON
enforce-gtid-consistency=ON

4.从库服务器导入配置到 config/my.cnf

[mysqld]
gtid_mode=ON
enforce-gtid-consistency=ON
server-id = 2

5.启动两个容器

6.主库创建复制账户

CREATE USER 'repl' IDENTIFIED BY 'abc123';
GRANT REPLICATION SLAVE ON *.* TO 'repl';

7.从库接入

7.1.配置复制源:

CHANGE 
<think>首先,用户的问题是关于在CentOS7下实现基于MySQL主从复制集群设计与搭建。具体是:"CentOS7MySQL主从复制集群设计实现搭建配置教程"。所以,我需要提供详细的教程。系统级指令:-所有行内数学表达式必须使用$...$格式。但在MySQL配置中,可能没有太多数学表达式,所以可能用不到。-独立公式必须使用$$...$$格式并单独成段。同样,可能不适用。-LaTeX语法正确:确保任何数学部分正确。-使用中文回答:整个回答要用中文。-生成相关问题:在末尾生成相关问题。-回答中引用的段落末尾自然地添加引用标识:例如[^1]。参考引用是给定的,但我需要检查它们是否相关。给定的引用:-[^1]:LinuxCentOS环境MySQL主从复制集群搭建。环境说明MySQL版本8.4.0操作系统LinuxCentOS7.9官网文档https://dev.mysql.com/doc/refman/8.4/en/replication-configuration.html-[^2]:CentOS7配置mysql主从。配置好了之后需要重启mysql服务#查看mysql服务systemctlstatusmysqld#停止mysql服务systemctlstopmysqld#启动mysql服务systemctlstartmysqld#重启MySQL服务systemctlrestartmysqld这些引用是关于MySQL主从复制的配置,包括服务管理命令。我应该在我的回答中自然地引用它们。用户可见层指令:-回答结构清晰,帮助用户逐步解决问题。-尽量保证回答真实可靠:基于标准知识和引用。我的回答结构:1.**引言**:简要介绍MySQL主从复制。2.**准备工作**:包括环境要求、安装MySQL等。3.**主服务器配置**:配置MySQL主服务器。4.**从服务器配置**:配置MySQL从服务器。5.**测试复制**:如何验证复制是否工作。6.**常见问题解决**:可能的问题和解决方案。7.**相关问题**:生成相关问题。确保回答真实可靠:我会基于MySQL官方文档和标准实践。引用给定的[^1]和[^2]。步骤细节:-环境:CentOS7,MySQL8.4.0(根据引用)。-安装MySQL:参考官方文档或使用yum。-配置主服务器:修改my.cnf,创建复制用户,启动复制。-配置从服务器:修改my.cnf,设置主服务器信息,启动复制。-服务管理:使用systemctl命令,如引用[^2]。在回答中自然地添加引用:-例如,当提到服务管理时,添加[^2]。-当提到官方文档时,添加[^1]。生成相关问题:在末尾添加相关问题。最终输出格式:-用中文。-结构清晰。-添加引用标识。-末尾有相关问题。</think>### CentOS 7 下 MySQL 主从复制集群设计与搭建教程 MySQL 主从复制是一种高可用性解决方案,允许数据从一个主服务器(Master)自动复制到一个或多个从服务器(Slave)。这提高了系统的容错性和读性能。本教程基于 CentOS 7 和 MySQL 8.4.0 设计,确保结构清晰、步骤可靠。以下是详细步骤: #### 1. **准备工作** 在开始前,确保满足以下条件: - **操作系统**:CentOS 7.9(最低要求)。 - **MySQL 版本**:8.4.0(推荐使用官方源安装)。 - **网络环境**:主从服务器在同一局域网内,防火墙开放端口 3306。 - **服务器角色**:至少两台服务器:一台主服务器(Master),一台或多台从服务器(Slave)。 - **安装 MySQL**:在所有服务器上安装 MySQL 8.4.0。使用官方 YUM 源: ```bash sudo yum install https://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm sudo yum install mysql-community-server sudo systemctl start mysqld sudo systemctl enable mysqld ``` 安装后,获取初始密码:`sudo grep 'temporary password' /var/log/mysqld.log`,并运行 `mysql_secure_installation` 完成安全配置[^1]。 #### 2. **主服务器(Master)配置** 主服务器负责处理写操作,并将数据变更同步给从服务器。 - **修改配置文件**:编辑 `/etc/my.cnf`: ```ini [mysqld] server-id=1 # 唯一ID,主服务器设为1 log-bin=mysql-bin # 启用二进制日志 binlog-format=ROW # 推荐使用ROW格式确保一致性 binlog-do-db=your_db # 指定要复制的数据库(替换 your_db) ``` - **重启 MySQL 服务**:应用配置: ```bash sudo systemctl restart mysqld # 重启服务以生效[^2] ``` - **创建复制用户**:登录 MySQL(`mysql -u root -p`),执行: ```sql CREATE USER 'replica_user'@'%' IDENTIFIED BY 'your_password'; # 替换 your_password GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%'; FLUSH PRIVILEGES; ``` - **获取主服务器状态**:记录 File 和 Position 值(后续从服务器需要): ```sql SHOW MASTER STATUS; # 输出示例:File: mysql-bin.000001, Position: 1234 ``` #### 3. **从服务器(Slave)配置** 从服务器接收主服务器的数据变更。 - **修改配置文件**:编辑 `/etc/my.cnf`: ```ini [mysqld] server-id=2 # 唯一ID,每台从服务器不同(如2,3,...) relay-log=mysql-relay-bin read-only=1 # 确保从服务器只读 ``` - **重启 MySQL 服务**: ```bash sudo systemctl restart mysqld # 重启服务[^2] ``` - **设置主服务器连接**:登录 MySQL(`mysql -u root -p`),执行(替换实际值): ```sql CHANGE MASTER TO MASTER_HOST='master_ip', # 主服务器IP MASTER_USER='replica_user', MASTER_PASSWORD='your_password', MASTER_LOG_FILE='mysql-bin.000001', # 来自SHOW MASTER STATUS MASTER_LOG_POS=1234; # 来自SHOW MASTER STATUS ``` - **启动复制**: ```sql START SLAVE; SHOW SLAVE STATUS\G; # 检查状态,确保Slave_IO_Running和Slave_SQL_Running均为Yes ``` #### 4. **测试与验证** - **测试数据同步**:在主服务器创建测试数据: ```sql CREATE DATABASE your_db; USE your_db; CREATE TABLE test (id INT); INSERT INTO test VALUES (1); ``` 在从服务器查询:`SELECT * FROM your_db.test;`,应返回相同数据。 - **监控复制状态**: - 主服务器:`SHOW MASTER STATUS;` - 从服务器:`SHOW SLAVE STATUS\G;`(检查错误信息) #### 5. **常见问题与解决** - **复制延迟**:若 `SHOW SLAVE STATUS` 显示延迟,检查网络或优化查询。 - **服务启动失败**:使用 `sudo systemctl status mysqld` 查看日志[^2]。 - **权限错误**:确保复制用户 IP 正确,并重新授权。 - **二进制日志问题**:主服务器配置错误时,重启服务 `sudo systemctl restart mysqld`[^2]。 #### 6. **集群设计建议** - **高可用扩展**:添加多个从服务器分担读负载。 - **备份策略**:定期备份二进制日志。 - **故障转移**:结合 Keepalived 实现自动故障切换。 本教程参考 MySQL 官方文档和 CentOS 最佳实践[^1][^2]。实际部署时,建议测试环境验证后再上线。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yfeil

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值