Docker-Compose实现MySQL之主从复制
创始人
2024-12-06 17:31:47
0

1. 主服务器(IP:192.168.186.77)

1.1 docker-compose.yml 

services:   mysql-master:     image: mysql:latest  # 使用最新版本的 MySQL 镜像     container_name: mysql-master  # 容器的名称     environment:       MYSQL_ROOT_PASSWORD: 123456  # MySQL root 用户的密码       MYSQL_DATABASE: masterdb  # 初始化时创建的数据库       MYSQL_USER: master  # 初始化时创建的用户       MYSQL_PASSWORD: 123456  # 初始化时创建的用户密码     ports:       - "3306:3306"  # 端口映射,将容器内的 3306 端口映射到主机的 3306 端口     volumes:       - mysql-master-data:/var/lib/mysql  # 数据卷映射,用于数据持久化     command: --server-id=1 --log-bin=mysql-bin --binlog-format=ROW  # MySQL 的启动命令,配置二进制日志和服务器 ID      volumes:   mysql-master-data:  # 定义数据卷,用于存储 MySQL 数据文件,保证数据库数据的持久性 

1.2. 启动命令

docker-compose up -d

 1.3 测试连接

 ​​​​​​

注:可以使用初始化用户进行测试连接,本文为了方便演示直接连接root用户。 

2. 从服务器(IP:192.168.186.216)

2.1 docker-compose.yml

services:   mysql-slave:     image: mysql:latest  # 使用最新版本的 MySQL 镜像     container_name: mysql-slave  # 容器的名称     environment:       MYSQL_ROOT_PASSWORD: 123456  # MySQL root 用户的密码       MYSQL_DATABASE: slavedb  # 初始化时创建的数据库       MYSQL_USER: slave  # 初始化时创建的用户       MYSQL_PASSWORD: 123456  # 初始化时创建的用户密码     ports:       - "3306:3306"  # 端口映射,将容器内的 3306 端口映射到主机的 3306 端口     volumes:       - mysql-slave-data:/var/lib/mysql  # 数据卷映射,用于数据持久化     command: --server-id=2 --log-bin=mysql-bin --binlog-format=ROW  # MySQL 的启动命令,配置二进制日志和服务器 ID  volumes:   mysql-slave-data:  # 定义数据卷,用于存储 MySQL 数据文件,保证数据库数据的持久性  

2.2 启动命令 

docker-compose up -d 

2.3 测试连接 

 3. 配置主从复制

  3.1 在主服务器上,为从服务器创建一个具有复制权限的用户

CREATE USER 'master_slave'@'%' IDENTIFIED BY '123456' REQUIRE SSL; GRANT REPLICATION SLAVE ON *.* TO 'master_slave'@'%'; FLUSH PRIVILEGES;

运行结果:

 > CREATE USER 'master_slave'@'%' IDENTIFIED BY '123456' REQUIRE SSL
[2024-07-23 17:34:23] 在 20 ms 内完成
> GRANT REPLICATION SLAVE ON *.* TO 'master_slave'@'%'
[2024-07-23 17:34:23] 在 26 ms 内完成
> FLUSH PRIVILEGES
[2024-07-23 17:34:23] 在 21 ms 内完成

3.2 获取主服务器的二进制日志位置信息

SHOW MASTER STATUS; 

注:记下FilePosition的值,从服务器需要配置。

3.3 在从服务器上,配置复制指向主服务器 

CHANGE MASTER TO     MASTER_HOST ='192.168.186.77', # 主服务器的 IP 地址     MASTER_USER ='master_slave', # 主服务器上配置的复制用户     MASTER_PASSWORD ='123456', # 复制用户的密码     MASTER_LOG_FILE ='mysql-bin.000004', # 主服务器的日志文件名     MASTER_LOG_POS =4494, # 日志文件的位置     MASTER_SSL=1;

运行结果:
> CHANGE MASTER TO
      MASTER_HOST ='192.168.186.77', # 主服务器的 IP 地址
      MASTER_USER ='master_slave', # 主服务器上配置的复制用户
      MASTER_PASSWORD ='123456', # 复制用户的密码
      MASTER_LOG_FILE ='mysql-bin.000004', # 主服务器的日志文件名
      MASTER_LOG_POS =4494, # 日志文件的位置
      MASTER_SSL=1
[2024-07-23 17:38:19] [HY000][1287] 'CHANGE MASTER' is deprecated and will be removed in a future release. Please use CHANGE REPLICATION SOURCE instead
[2024-07-23 17:38:19] [HY000][1287] 'MASTER_HOST' is deprecated and will be removed in a future release. Please use SOURCE_HOST instead
[2024-07-23 17:38:19] [HY000][1287] 'MASTER_USER' is deprecated and will be removed in a future release. Please use SOURCE_USER instead
[2024-07-23 17:38:19] [HY000][1287] 'MASTER_PASSWORD' is deprecated and will be removed in a future release. Please use SOURCE_PASSWORD instead
[2024-07-23 17:38:19] [HY000][1287] 'MASTER_LOG_FILE' is deprecated and will be removed in a future release. Please use SOURCE_LOG_FILE instead
[2024-07-23 17:38:19] [HY000][1287] 'MASTER_LOG_POS' is deprecated and will be removed in a future release. Please use SOURCE_LOG_POS instead
[2024-07-23 17:38:19] [HY000][1287] 'MASTER_SSL' is deprecated and will be removed in a future release. Please use SOURCE_SSL instead
[2024-07-23 17:38:19] [HY000][1760] Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information.
[2024-07-23 17:38:19] 在 73 ms 内完成

3.4 启动从服务器上的复制过程 

START SLAVE;

运行结果:

> START SLAVE
[2024-07-23 17:39:28] [HY000][1287] 'START SLAVE' is deprecated and will be removed in a future release. Please use START REPLICA instead
[2024-07-23 17:39:28] 在 71 ms 内完成

3.5 检查从服务器的复制状态 

SHOW SLAVE STATUS; 

注:查看Slave_IO_RunningSlave_SQL_Running都应为Yes,说明配置成功。

4. 进行验证 

4.1 主服务器执行语句

-- 创建数据库 CREATE DATABASE IF NOT EXISTS replication_test;  -- 使用新创建的数据库 USE replication_test;  -- 创建表 CREATE TABLE replication_table (     id         INT AUTO_INCREMENT PRIMARY KEY,     message    VARCHAR(255) NOT NULL,     created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );  -- 插入数据 INSERT INTO replication_table (message) VALUES ('你好,这是一条测试消息。'); 

运行结果: 

> CREATE DATABASE IF NOT EXISTS replication_test
[2024-07-23 17:48:19] 33 ms 中有 1 行受到影响
> USE replication_test
[2024-07-23 17:48:19] 在 6 ms 内完成
replication_test> CREATE TABLE replication_table
                  (
                      id         INT AUTO_INCREMENT PRIMARY KEY,
                      message    VARCHAR(255) NOT NULL,
                      created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                  )
[2024-07-23 17:48:19] 在 69 ms 内完成
replication_test> INSERT INTO replication_table (message)
                  VALUES ('你好,这是一条测试消息。')
[2024-07-23 17:48:19] 53 ms 中有 1 行受到影响

4.2 从服务器执行语句

-- 使用数据库 USE replication_test;  -- 查询表以验证复制 SELECT * FROM replication_table;

5. 总结 

         基于IDEA和Docker-Compose简化操作过程,仅供学习参考,欢迎评论交流。

相关内容

热门资讯

教你了解!仙神互娱辅助(辅助)... 教你了解!仙神互娱辅助(辅助)唯思竞技麻将确实真的是有辅助修改器(哔哩哔哩)亲,关键说明,仙神互娱辅...
解迷了解!八闽辅助(辅助)渝都... 解迷了解!八闽辅助(辅助)渝都麻将原来存在有辅助插件(哔哩哔哩)八闽辅助透视方法中分为三种模型:八闽...
推荐了解!微友辅助器免费下载(... 推荐了解!微友辅助器免费下载(辅助)新贝壳大厅确实有挂辅助软件(哔哩哔哩)1、打开软件启动之后找到中...
专业了解!佛手在线13道辅助(... 专业了解!佛手在线13道辅助(辅助)方片比鸡都是有挂辅助器(哔哩哔哩)佛手在线13道辅助是不是有人用...
解迷了解!如何判断广东雀神插件... 解迷了解!如何判断广东雀神插件真伪(辅助)河北竞技果然是真的辅助挂(哔哩哔哩)1)如何判断广东雀神插...
了解了解!佛手在线大菠萝技巧(... 了解了解!佛手在线大菠萝技巧(辅助)慕星棋牌果然真的有辅助修改器(哔哩哔哩)1、佛手在线大菠萝技巧破...
详细了解!长乐茶馆免费辅助器(... 详细了解!长乐茶馆免费辅助器(辅助)喜扣跑胡子切实是有辅助修改器(哔哩哔哩)1、下载好长乐茶馆免费辅...
推荐了解!上饶窝龙辅助(辅助)... 推荐了解!上饶窝龙辅助(辅助)云水谣本来真的有辅助器(哔哩哔哩)1、推荐了解!上饶窝龙辅助(辅助)云...
解迷了解!哈糖大菠萝怎么让系统... 解迷了解!哈糖大菠萝怎么让系统发好牌(辅助)闲云真是是有辅助app(哔哩哔哩)小薇(辅助器软件下载)...
普及了解!花花生活圈挂怎么开(... 普及了解!花花生活圈挂怎么开(辅助)皮皮湖南麻将真是有挂辅助下载(哔哩哔哩)1、任何花花生活圈挂怎么...