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

docker配置mysql主从同步

1. 创建Docker网络

docker network create mysql-network

 2. 创建数据卷

docker volume create mysql-master-volume
docker volume create mysql-slave-volume

 3. 准备MySQL配置文件

 主库配置 (master.cnf)
[mysqld]
server-id=1
log-bin=mysql-bin
binlog_format=ROW
gtid_mode=ON   #参数启用了 GTID(全局事务标识)模式
enforce_gtid_consistency=ON #参数用于强制执行 GTID 一致性

 从库配置 (slave.cnf)

[mysqld]
server-id=2
relay-log=mysql-relay-bin
read_only=1
gtid_mode=ON
enforce_gtid_consistency=ON

 4. 启动主库容器

docker run -d \--name mysql-master \--network mysql-network \  # 若使用自定义网络-v mysql-master-volume:/var/lib/mysql \-v ./master.cnf:/etc/mysql/conf.d/master.cnf \-e MYSQL_ROOT_PASSWORD=root \-p 3306:3306 \mysql:8.0.33

 5. 在主库创建复制用户

进入主库容器:

docker exec -it mysql-master mysql -uroot -proot

执行SQL:

CREATE USER 'replicator'@'%' IDENTIFIED  BY 'replica_password';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
FLUSH PRIVILEGES;

 6. 获取主库的binlog状态


mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                        |
+------------------+----------+--------------+------------------+------------------------------------------+
| mysql-bin.000003 |      879 |              |                  | 4529fb73-2ed5-11f0-a015-0242ac120002:1-8 |

7. 启动从库容器 

docker run -d \--name mysql-slave \--network mysql-network \  # 与主库同一网络-v mysql-slave-volume:/var/lib/mysql \-v ./slave.cnf:/etc/mysql/conf.d/slave.cnf \-e MYSQL_ROOT_PASSWORD=root \-p 3307:3306 \  # 映射不同端口避免冲突mysql:8.0.33

8. 配置从库复制

 进入从库容器:

docker exec -it mysql-slave mysql -uroot -proot

 执行SQL(替换主库IP、端口、文件名和位置):

CHANGE MASTER TO
MASTER_HOST='',  # 若使用Docker网络,使用容器名称如 mysql-master
MASTER_PORT=3306,
MASTER_USER='replicator',
MASTER_PASSWORD='replica_password',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=879;START SLAVE;

9. 验证复制状态 

在从库中执行:

mysql> START SLAVE;
Query OK, 0 rows affected, 1 warning (0.02 sec)mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************Slave_IO_State: Waiting for source to send eventMaster_Host: mysql-masterMaster_User: replicatorMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000003Read_Master_Log_Pos: 879Relay_Log_File: mysql-relay-bin.000002Relay_Log_Pos: 326Relay_Master_Log_File: mysql-bin.000003Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB:Replicate_Ignore_DB:

 10. 测试主从同步

在主库插入测试数据:

mysql> create database test;
Query OK, 1 row affected (0.01 sec)mysql> use test
Database changed
mysql> CREATE TABLE test_table (id INT);
Query OK, 0 rows affected (0.01 sec)mysql> INSERT INTO test_table VALUES (1);
Query OK, 1 row affected (0.02 sec)

在从库检查数据:

mysql> SELECT * FROM test.test_table;
+------+
| id   |
+------+
|    1 |
+------+
1 row in set (0.08 sec)mysql>

补充 :查看Docker网络容器信息

[root@kafka2 docker_mysql]# docker network  inspect mysql-network
[{"Name": "mysql-network","Id": "cb9a57550a6dbbc1498df3fc16f52792ceb9a56e1b5355c7f9f6b62d2bfe690f","Created": "2025-05-12T09:33:02.385924497+08:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": {},"Config": [{"Subnet": "172.18.0.0/16","Gateway": "172.18.0.1"}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {"7b25c52319b7b9a4ce1a2949ec7fd39c08cf2550b9ee1a590a86672d3fe3676f": {"Name": "mysql-slave","EndpointID": "964ebd18f6d0415cb3e26c93c0f2f6dd9efb38e705e13c2233b6e74ef4a5f938","MacAddress": "02:42:ac:12:00:03","IPv4Address": "172.18.0.3/16","IPv6Address": ""},"a778107c84a1ff20aafd57aaf34a53186331306880014db34f7afc03e88af40e": {"Name": "mysql-master","EndpointID": "617dcd7b976482c35f42900a24a9f88add5eb7c61e092986dd5d31c819a6b12a","MacAddress": "02:42:ac:12:00:02","IPv4Address": "172.18.0.2/16","IPv6Address": ""}},"Options": {},"Labels": {}}
]

补充 Docker容器数据卷 挂载信息

[root@kafka2 docker_mysql]# docker volume inspect  mysql-master-volume
[{"CreatedAt": "2025-05-12T09:33:45+08:00","Driver": "local","Labels": null,"Mountpoint": "/var/lib/docker/volumes/mysql-master-volume/_data","Name": "mysql-master-volume","Options": null,"Scope": "local"}
]
[root@kafka2 docker_mysql]# docker volume inspect  mysql-slave-volume
[{"CreatedAt": "2025-05-12T09:33:49+08:00","Driver": "local","Labels": null,"Mountpoint": "/var/lib/docker/volumes/mysql-slave-volume/_data","Name": "mysql-slave-volume","Options": null,"Scope": "local"}
]

http://www.xdnf.cn/news/411085.html

相关文章:

  • 无线定位之 三 SX1302 网关源码 thread_gps 线程详解
  • GF(2)域m次不可约及本原多项式的数量
  • Unity基础学习(十二)核心系统—物理系统之碰撞检测组件篇(1)刚体,碰撞体,材质
  • Tauri(2.5.1)+Leptos(0.7.8)开发桌面应用--程序启动界面
  • 深入掌握CSS Flex布局:从原理到实战
  • 数组作为指针计算大小时的误区
  • Android13 wifi设置关闭后断电重启会自动打开
  • JGEW-9液位流量压力温度实验装置
  • Genspark超级智能体调研
  • 从数据到洞察:解析结构化数据处理的智能跃迁
  • 苹果电脑笔记本macos Mac安装mixly 米思齐软件详细指南
  • 免费多线程下载工具
  • 电商物流的“速度与激情”:从城际运输到即时配送的全链路解析
  • 动态网站 LNMP
  • 每日Prompt:超现实交互场景
  • 全视通智慧病房无感巡视解决方案:科技赋能,重塑护理巡视新篇
  • 开关电源滤波器讲解
  • Cursor 配置 Browser MCP(基于浏览器底层协议控制)及浏览器插件安装
  • Blender 入门教程(一):模型创建
  • rust 全栈应用框架dioxus server
  • 大模型数据分析破局之路20250512
  • 架构、构架、结构、框架之间有什么区别?|系统设计|系统建模
  • 互联网大厂Java面试实战:Spring Boot到微服务的技术问答解析
  • Datawhale AI春训营 day
  • 基于ESP32的健康智能机器人
  • 23.(vue3.x+vite)引入组件并动态切换(component)
  • 嵌入式Linux I2C驱动开发详解
  • 火山RTC 6 自定义视频
  • BUUCTF——杂项渗透之look
  • 代理IP:电商与营销领域的“隐形加速器”