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

Docker-Compose实现MySQL之主从复制

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 的启动命令,配置二进制日志和服务器 IDvolumes: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 的启动命令,配置二进制日志和服务器 IDvolumes: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 TOMASTER_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简化操作过程,仅供学习参考,欢迎评论交流。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 理想化相机模型的相机内参
  • 医学图像分类
  • 金融数据的pandas模块应用
  • iview中Checkbox组件设置不勾选是0,勾选是1
  • Mac安装Hoomebrew与升级Python版本
  • 高可用高并发常见问题以及答案
  • easyExcel
  • Java | Leetcode Java题解之第260题只出现一次的数字III
  • ELK日志收集之多文件提取文件名和日志时间
  • vue侦听器(Watch)精彩案例剖析二
  • 如何实现Web服务只允许特定客户端访问
  • 【Java 数据结构】ArrayList类介绍
  • thinkphp8结合layui2.9 图片上传验证
  • LeetCode-day24-2766. 重新放置石块
  • AV1技术学习:Constrained Directional Enhancement Filter
  • ----------
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • gitlab-ci配置详解(一)
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Javascript编码规范
  • MaxCompute访问TableStore(OTS) 数据
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 聚类分析——Kmeans
  • 聊聊hikari连接池的leakDetectionThreshold
  • 七牛云假注销小指南
  • 前端技术周刊 2019-02-11 Serverless
  • 入口文件开始,分析Vue源码实现
  • 算法-插入排序
  • AI算硅基生命吗,为什么?
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • # dbt source dbt source freshness命令详解
  • # Panda3d 碰撞检测系统介绍
  • #知识分享#笔记#学习方法
  • $ git push -u origin master 推送到远程库出错
  • (Python第六天)文件处理
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (SpringBoot)第七章:SpringBoot日志文件
  • (二十三)Flask之高频面试点
  • (二刷)代码随想录第16天|104.二叉树的最大深度 559.n叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数
  • (利用IDEA+Maven)定制属于自己的jar包
  • (篇九)MySQL常用内置函数
  • (强烈推荐)移动端音视频从零到上手(上)
  • (十七)Flink 容错机制
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .net Application的目录
  • .net core 6 redis操作类
  • .Net Core 微服务之Consul(三)-KV存储分布式锁
  • .net 调用海康SDK以及常见的坑解释
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • @Value读取properties中文乱码解决方案
  • [ CTF ]【天格】战队WriteUp- 2022年第三届“网鼎杯”网络安全大赛(青龙组)