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

Docker实现MySQL数据库主从复制

一、拉取数据库镜像

docker pull mysql:5.7

二、创建两个数据库(一主一从模式)

mysql01(主)

1.docker run -d -p 3310:3306  -v /root/mysql/node-1/init:/docker-entrypoinit-initdb.d -v /root/mysql/node-1/config:/etc/mysql/conf.d -v /root/mysql/node-1/data:/var/lib/mysql  -e MYSQL_ROOT_PASSWORD=123456  --name mysql01 mysql:5.7

mysql02 (从)

2.docker run -d -p 3311:3306  -v /root/mysql/node-2/init:/docker-entrypoinit-initdb.d -v /root/mysql/node-2/config:/etc/mysql/conf.d -v /root/mysql/node-2/data:/var/lib/mysql  -e MYSQL_ROOT_PASSWORD=123456  --name mysql02 mysql:5.7

命令解释:

-d: 后台运行容器,并返回容器ID
-p 宿主机端口:容器端口 :将容器的端口映射到宿主机端口
-e MYSQL_ROOT_PASSWORD=123456 :配置数据库连接密码
-v 宿主机路径:容器内路径 :将配置文件夹挂载到宿主机
–name 容器名字:将容器命名为 mysql01(02)

三、检查是否创建并运行成功

docker ps -a(查看docker所有的进程)

STATUS显示up表示正常运行

四、编写主从配置文件

我们之前在创建和启动数据库的时候写了这句-v /root/mysql/node-1/config:/etc/mysql/

将mysql 的配置文件夹和宿主机的文件夹挂载起来的。

那么我们就可以直接在宿主机下的/root/mysql/node-1/config/编写配置文件了。

主机配置:
cd /root/mysql/node-1/config/vi my.cnf [mysqld]#修改配置文件:vim /etc/my.cnf
#主服务器唯一ID
server-id=1
#启用二进制日志
log-bin=mysql-bin
#设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库 需要复制的主数据库名字
binlog-do-db=testdb
#设置logbin格式
binlog_format=STATEMENT按 i 进入插入模式即可编写
编写完后按Esc 然后按:wq 保存退出

编写完后可进行查看检查 

从机配置配置:
cd /root/mysql/node-2/config/vim my.cnf [mysqld]
#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay                 

编写完后可进行查看检查  

然后重启mysql01 和 mysql02

docker restart mysql01 mysql02

重启完后再次进行检查 docker ps -a(查看docker所有的进程)

五、搭建主从复制

主机配置
docker exec -it mysql01 /bin/bash #进入容器
mysql -uroot -p123456 #连接mysqlGRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';    #给从机授权,让主机和从机能相连
登录主机查看master状态
docker exec -it mysql01 /bin/bash    #进入主机的底层配置mysql -uroot -p123456    #登录数据库show master status;    #查看状态

需要把这里的File和Position记下来,等下在从机上要用到。

File: mysql-bin.000008 
Position :  154 
使用exit退出主机

从机配置
docker exec -it mysql02 /bin/bash 
mysql -uroot -p123456
配置从机复制主机 
CHANGE MASTER TO MASTER_HOST='主机的ip地址',MASTER_USER='slave',MASTER_PASSWORD='123456',MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=438;
#解释:
CHANGE MASTER TO MASTER_HOST='具体IP地址',
MASTER_USER='slave'(刚刚配置的用户名),
MASTER_PASSWORD='123456'(刚刚授权的密码),
master_port=主机开放的端口 这里是3310端口,
MASTER_LOG_FILE='mysql-bin.具体数字'(File值),MASTER_LOG_POS=具体值(之前的Position);

注意事项如果在这里出现错误,先重置。执行完下面两条命令。

stop slave;
reset master;
启动从服务器复制功能
start slave;

查看从服务器状态

show slave status\G;

 

 这两个参数显示如下则表示成功

Slave_IO_Running: Connecting
Slave_SQL_Running: Yes

六、重置配置主从

如何停止从服务复制功能

stop slave; 

如何重新配置主从 (即清除之前的主从配置)

stop slave;
reset master;

 

相关文章:

  • 《棒球百科》市运会是什么级别的比赛·棒球1号位
  • nt!MiAllocateWsle函数分析之设置Wsle[WorkingSetIndex]
  • Golang
  • 基于策略的强化学习方法之近端策略优化(PPO)深度解析
  • 2025.05.14华为机考笔试题-第一题-100分
  • xp_cmdshell bcp 导出文件
  • 测试--BUG(软件测试⽣命周期 bug的⽣命周期 与开发产⽣争执怎么办)
  • 牛客网NC22157:牛牛学数列2
  • 编程题 03-树3 Tree Traversals Again【PAT】
  • AI实时对话的通信基础,WebRTC技术综合指南
  • GPU与NPU异构计算任务划分算法研究:基于强化学习的Transformer负载均衡实践
  • Go 语言中接口类型转换为具体类型
  • Automatic Recovery of the Atmospheric Light in Hazy Images论文阅读
  • RabbitMQ 消息模式实战:从简单队列到复杂路由(一)
  • 用FileCodeBox打造私有文件传输:Ubuntu环境保姆级部署教程!
  • python算法-最大连续1的个数删除有序数组中的重复项--Day020
  • go依赖查询工具之godepgraph(分析main.go的依赖树)
  • 2025.05.14华为机考笔试题-第二题-200分
  • 鸿蒙OSUniApp制作多选框与单选框组件#三方框架 #Uniapp
  • ET EntityRef EntityWeakRef 类分析
  • 美联储主席:供应冲击或更频繁,将重新评估货币政策方法中的通胀和就业因素
  • 奥古斯都时代的历史学家李维
  • 夜读丨读《汉书》一得
  • 2025年中国网络文明大会将于6月10日在安徽合肥举办
  • 郑培凯:汤显祖的“至情”与罗汝芳的“赤子之心”
  • 习近平在中拉论坛第四届部长级会议开幕式的主旨讲话(全文)