史上最详细Docker部署Mysql主从复制,带每一步骤图!!!

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 史上最详细Docker部署Mysql主从复制,带每一步骤图!!!


没有夸大标题哈,能够成功的,实测后发文😁

本文主要讲怎么用Docker部署Mysql的主从复制,看起来很长,实际非常简单的,看一遍,立马就能懂的。

直接CV也能搭建起来,莫慌。

我们一起加油!!!

封面地点:泰山日出

一、拉取镜像

docker pull mysql:5.7

1704459528092.jpg

相关命令:

  • 查看镜像:docker images

二、启动镜像

先启动mysql01容器:(即之后的主机)

docker run -d -p 3310:3306 -v /home/mysql/node-1/config:/etc/mysql/ -v/home/mysql/node-1/data:/var/lib/mysql  -e MYSQL_ROOT_PASSWORD=123456  --name mysql01 mysql:5.7

1704459535859.jpg

再启动mysql02容器:(即之后的从机)

docker run -d -p 3311:3306 -v /home/mysql/node-2/config:/etc/mysql/ -v/home/mysql/node-2/data:/var/lib/mysql  -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 mysql:5.7

1704459540656.jpg

命令解释:

  • -d: 后台运行容器,并返回容器ID
  • -p 3311:3306 :将容器的3306端口映射到宿主机3310端口
  • -e MYSQL_ROOT_PASSWORD=123456 :配置数据库连接密码
  • -v /home/mysql/node-2/config:/etc/mysql/ :将配置文件夹挂载到宿主机
  • --name mysql01(02):将容器命名为 mysql01(02)

相关命令:

docker ps -a #查看全部容器(运行中加未运行的)

1704459545223.jpg

都已正常启动。

三、连接测试

搭建过程中,为了减少错误的产生,就多了这一步的测试。

我们可以直接拿Navicat来进行连接测试。

注意事项: 记得打开安全组,虚拟机的话记得处理好防火墙。(另外我这里是3310,可根据自己需要更改端口)

1704459578350.jpg

测试启动成功后,我们再来进行下一步。


四、编写主从复制配置文件

之前我们启动的时候写了这句-v /home/mysql/node-1/config:/etc/mysql/,将mysql 的配置文件夹和宿主机的文件夹挂载起来的。

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

4.1、编写主机配置文件

我们先编写主机上的配置文件:

vim my.cnf

回车之后是这样的:

1704459583556.jpg

先按insert键,然后直接将下面主机的配置文件复制上去即可:

[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

退出方式

先按Esc键-->再按Shift+:键-->输入wq--保存退出。

1704459586995.jpg

4.2、编写从机配置文件

从机上的my.cnf也是同样的方式

[mysqld]
#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay

重新启动mysql容器

docker restart mysql01  mysql02

1704459591874.jpg

docker ps -a #查看容器

1704459625993.jpg

接下来就是搭建主从复制了。

五、搭建主从复制

5.1、主机设置

docker exec -it mysql01 /bin/bash #进入容器
mysql -uroot -p123456 #连接mysql

1704459647615.jpg

5.2、主机上建立帐户并授权 slave

给从机授权,为了让从机能够和主机连接起来。

GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';

1704459659394.jpg

5.3、查询master状态

show master status; #查询master的状态

1704459662918.jpg

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

File: mysql-bin.000003
Position: 438

Binlog_Do_DB:需要复制的数据库。

Binlog_Ignore_DB:不需要复制的数据库。

注意:此步骤后不要再操作主服务器MySQL,防止主服务器状态值变化

5.4、从机设置

进入mysql02容器

docker exec -it mysql02 /bin/bash
mysql -uroot -p123456

复制主机的命令

CHANGE MASTER TO MASTER_HOST='主机的ip地址',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_PORT=3310, 
MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=438;
#解释:
#   CHANGE MASTER TO MASTER_HOST='主机的IP地址',
# MASTER_USER='slave'(刚刚配置的用户名),
# MASTER_PASSWORD='123456'(刚刚授权的密码),
# master_port=主机开放的端口 我这里是3310端口,
# MASTER_LOG_FILE='mysql-bin.具体数字',MASTER_LOG_POS=具体值(之前的Position);

1704459679231.jpg

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

stop slave;
reset master;

启动从服务器复制功能

start slave;

1704459683730.jpg

查看从服务器状态

show slave status\G

1704459686600.jpg

#下面两个参数都是Yes,则说明主从配置成功!

Slave_IO_Running: Yes 
Slave_SQL_Running: Yes

六、测试主从复制

6.1、主机新建库 -从机复制

1704459704779.jpg

在主机新建testdb后,从机也随之就有了。(这里的命名是确定的,因为在配置文件中说明了复制testdb数据库)。

6.2、新建表-从机复制

1704459708672.jpg

6.3、insert 记录-从机复制

1704459711580.jpg

1704459714924.jpg

当然这些还是有看不出到底有没有复制的话,咱们直接测试函数,就能知道啦。

insert into my_table01(id,name) VALUE(1,@@hostname);

1704459745196.jpg

这就可以看出主从复制确实是成功的,但是在使用函数上有数据不一致的问题。

七、重置配置主从

如何停止从服务复制功能

stop slave;

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

stop slave;
reset master;

八、自言自语

下一篇打算讲一下mysql的中间件mycat实现读写分离,或者说点理论😀,咱们一步一步来哈😁。

你好,我是博主宁在春,Java学习路上的一颗小小的种子,也希望有一天能扎根长成苍天大树。

最近在持续更新中,如果你觉得文章对你有所帮助,也感兴趣的话,关注我吧。

让我们一起学习,一起讨论吧。

希望与君共勉😁

我们:待别时相见时,都已有所成

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
11天前
|
SQL Java 关系型数据库
MySQL原理简介—3.生产环境的部署压测
本文介绍了Java系统和数据库在高并发场景下的压测要点: 1. 普通系统在4核8G机器上每秒能处理几百个请求 2. 高并发下数据库建议使用8核16G或更高配置的机器 3. 数据库部署后需进行基准压测,以评估其最大承载能力 4. QPS和TPS的区别及重要性 5. 压测时需关注IOPS、吞吐量、延迟 6. 除了QPS和TPS,还需监控CPU、内存、磁盘IO、网络带宽 7. 影响每秒可处理并发请求数的因素包括线程数、CPU、内存、磁盘IO和网络带宽 8. Sysbench是数据库压测工具,可构造测试数据并模拟高并发场景 9. 在增加线程数量的同时,必须观察机器的性能,确保各硬件负载在合理范围
114 72
|
21天前
|
存储 关系型数据库 MySQL
美团面试:MySQL为什么 不用 Docker部署?
45岁老架构师尼恩在读者交流群中分享了关于“MySQL为什么不推荐使用Docker部署”的深入分析。通过系统化的梳理,尼恩帮助读者理解为何大型MySQL数据库通常不使用Docker部署,主要涉及性能、管理复杂度和稳定性等方面的考量。文章详细解释了有状态容器的特点、Docker的资源隔离问题以及磁盘IO性能损耗,并提供了小型MySQL使用Docker的最佳实践。此外,尼恩还介绍了Share Nothing架构的优势及其应用场景,强调了配置管理和数据持久化的挑战。最后,尼恩建议读者参考《尼恩Java面试宝典PDF》以提升技术能力,更好地应对面试中的难题。
|
5天前
|
SQL 网络协议 关系型数据库
MySQL 主从复制
主从复制是 MySQL 实现数据冗余和高可用性的关键技术。主库通过 binlog 记录操作,从库异步获取并回放这些日志,确保数据一致性。搭建主从复制需满足:多个数据库实例、主库开启 binlog、不同 server_id、创建复制用户、从库恢复主库数据、配置复制信息并开启复制线程。通过 `change master to` 和 `start slave` 命令启动复制,使用 `show slave status` 检查同步状态。常见问题包括 IO 和 SQL 线程故障,可通过重置和重新配置解决。延时原因涉及主库写入延迟、DUMP 线程性能及从库 SQL 线程串行执行等,需优化配置或启用并行处理
72 40
|
11天前
|
SQL 存储 关系型数据库
MySQL主从复制 —— 作用、原理、数据一致性,异步复制、半同步复制、组复制
MySQL主从复制 作用、原理—主库线程、I/O线程、SQL线程;主从同步要求,主从延迟原因及解决方案;数据一致性,异步复制、半同步复制、组复制
|
1月前
|
SQL 关系型数据库 MySQL
docker-compose部署mysql8
使用docker-compose容器化部署mysql8
|
2月前
|
NoSQL 关系型数据库 Redis
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
128 14
|
1月前
|
关系型数据库 MySQL 应用服务中间件
《docker基础篇:8.Docker常规安装简介》包括:docker常规安装总体步骤、安装tomcat、安装mysql、安装redis
《docker基础篇:8.Docker常规安装简介》包括:docker常规安装总体步骤、安装tomcat、安装mysql、安装redis
124 7
|
25天前
|
关系型数据库 MySQL 数据库连接
数据库连接工具连接mysql提示:“Host ‘172.23.0.1‘ is not allowed to connect to this MySQL server“
docker-compose部署mysql8服务后,连接时提示不允许连接问题解决
|
12天前
|
关系型数据库 MySQL 数据库
Docker Compose V2 安装常用数据库MySQL+Mongo
以上内容涵盖了使用 Docker Compose 安装和管理 MySQL 和 MongoDB 的详细步骤,希望对您有所帮助。
89 42
|
3天前
|
关系型数据库 MySQL 网络安全
如何排查和解决PHP连接数据库MYSQL失败写锁的问题
通过本文的介绍,您可以系统地了解如何排查和解决PHP连接MySQL数据库失败及写锁问题。通过检查配置、确保服务启动、调整防火墙设置和用户权限,以及识别和解决长时间运行的事务和死锁问题,可以有效地保障应用的稳定运行。
42 25