docker实现mysql 主从复制

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: docker实现mysql 主从复制

docker实现 mysql 主从复制!

                                                             💧记录一下如何在docker中启动两个mysql容器来进行主从复制💧          

前言

1)、mysql主从复制用途

  • 实时灾备,用于故障切换
  • 读写分离,提供查询服务
  • 备份,避免影响业务

2)、主从部署必要条件:

  • 主库开启binlog日志(设置log-bin参数)
  • 主从server-id不同
  • 从库服务器能连通主库
  • 利用docker实现mysql的主从复制,首先需要在服务器上安装好docker 及拉取相关mysql镜像:
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

一、部署主从Mysql服务器

在服务器创建两个目录 master 与 slave 分别对应主从数据库的data和conf ,目录结构如下

然后在master/conf/ 路径下创建 my.cnf 里面内容如下

[mysqld]
## 同一局域网内注意要唯一
server-id=1024
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
secure_file_priv=/var/lib/mysql
default_authentication_plugin=mysql_native_password  #设置密码规则
max_connections=1000 #最大连接数设置 根据实际需要 自行调整

在slave /conf/路径下 创建 my.cnf 内容如下

[mysqld]
## 设置server_id,注意要唯一
server-id=1022 
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin   
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
secure_file_priv=/var/lib/mysql
default_authentication_plugin=mysql_native_password  #设置密码规则
max_connections=1000 #最大连接数设置 根据实际需要 自行调整

然后利用镜像分别启动两个容器,一个master 一个slave , master端口为3339,slave为3340 对应的root密码为123456,映射配置文件和数据存储目录到mysql

启动 Master

 docker run --name master -p 3339:3306  \
 -v "$PWD/master/conf/my.cnf":/etc/mysql/my.cnf \
 -v "$PWD/master/data":/var/lib/mysql \
 -e MYSQL_ROOT_PASSWORD=123456 -d mysql

启动Slave

  docker run --name slave -p 3340:3306 \
 -v "$PWD/slave/conf/my.cnf":/etc/mysql/my.cnf \
 -v "$PWD/slave/data":/var/lib/mysql \
 -e MYSQL_ROOT_PASSWORD=123456 -d mysql

启动完成后,分别测试下连接,发现都可以正常连接,接下来开始具体的主从配置

二、主从数据同步配置

使用navicat连接 master数据库,进行slave账户创建及相关授权

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

在Master进入mysql,执行show master status;

show master status;
• 1

回到linux服务器,执行命令查看master容器的ip地址

docker inspect --format={{.NetworkSettings.IPAddress}} master
172.17.0.3

然后在slave数据库服务器中根据上面得到的信息执行命令,主要是

master_log_file和 master_log_pos这两个参数需要根据上面语句查出来的结果进行配置,IP分配的内部地址基本就是172.17.0.2,如果不是这个地址改为 上述 查询出来的地址即可。

即:

change master to master_host='172.17.0.3', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000005', master_log_pos= 1563, master_connect_retry=30;

master_port: Master的端口号,指的是容器的端口号.

master_user:用于数据同步的用户

master_password:用于同步的用户的密码

master_log_file:指定Slave从哪个日志文件开始复制数据,即上文中提到的File字段的值

master_log_pos:从哪个Position开始读,即上文中提到的Position字段的值

master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒

查询下当前从服务器的状态

show slave status \G;

show slave status \G;

由于navicat 不支持 \G格式化展示,所以我们进入slave从服务器内查看

docker exec -it slave mysql -uroot -p123456
show slave status \G

可以看到这两个属性都为No
设置从数据库开启主从服务

start slave;

如果中途报错,之类的,可以使用reset slave进行从服务器重置

reset slave;
• 1

如果之前的配置没配置好,第一个yes将不会正常显示
再次强调!!!即:下面这段配置一定要对应好!!

change master to master_host='172.17.0.3', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000005', master_log_pos= 1563, master_connect_retry=30;

执行语句后,可以看到主从服务已经开启了。

三、主从同步测试

利用navicat 在主数据库新建一个TestDB数据库,然后刷新从数据库连接

刷新:

发现在主数据库添加的新库TestDB也被同步到从数据库上了,至此主从同步配置完成。
后续对主数据库做的操作都会基于binlog发送给从数据库的relaylog上进行同步。

总结

使用docker起两个mysql容器进行主从复制的整个过程就是这样子了,希望能够给大家带来帮助

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
1
1
1
175
分享
相关文章
美团面试:MySQL为什么 不用 Docker部署?
45岁老架构师尼恩在读者交流群中分享了关于“MySQL为什么不推荐使用Docker部署”的深入分析。通过系统化的梳理,尼恩帮助读者理解为何大型MySQL数据库通常不使用Docker部署,主要涉及性能、管理复杂度和稳定性等方面的考量。文章详细解释了有状态容器的特点、Docker的资源隔离问题以及磁盘IO性能损耗,并提供了小型MySQL使用Docker的最佳实践。此外,尼恩还介绍了Share Nothing架构的优势及其应用场景,强调了配置管理和数据持久化的挑战。最后,尼恩建议读者参考《尼恩Java面试宝典PDF》以提升技术能力,更好地应对面试中的难题。
RDS用多了,你还知道MySQL主从复制底层原理和实现方案吗?
随着数据量增长和业务扩展,单个数据库难以满足需求,需调整为集群模式以实现负载均衡和读写分离。MySQL主从复制是常见的高可用架构,通过binlog日志同步数据,确保主从数据一致性。本文详细介绍MySQL主从复制原理及配置步骤,包括一主二从集群的搭建过程,帮助读者实现稳定可靠的数据库高可用架构。
39 9
RDS用多了,你还知道MySQL主从复制底层原理和实现方案吗?
MySQL 主从复制
主从复制是 MySQL 实现数据冗余和高可用性的关键技术。主库通过 binlog 记录操作,从库异步获取并回放这些日志,确保数据一致性。搭建主从复制需满足:多个数据库实例、主库开启 binlog、不同 server_id、创建复制用户、从库恢复主库数据、配置复制信息并开启复制线程。通过 `change master to` 和 `start slave` 命令启动复制,使用 `show slave status` 检查同步状态。常见问题包括 IO 和 SQL 线程故障,可通过重置和重新配置解决。延时原因涉及主库写入延迟、DUMP 线程性能及从库 SQL 线程串行执行等,需优化配置或启用并行处理
87 40
Docker Compose V2 安装常用数据库MySQL+Mongo
以上内容涵盖了使用 Docker Compose 安装和管理 MySQL 和 MongoDB 的详细步骤,希望对您有所帮助。
131 42
Docker下Mysql8数据备份与恢复
通过以上步骤,您可以在Docker环境下高效地备份和恢复MySQL 8数据库。备份数据时,使用 `mysqldump`工具生成逻辑备份文件,并存储到指定目录;恢复数据时,使用 `mysql`工具从备份文件中读取数据并恢复到数据库。自动化脚本和定时任务的配置可以进一步简化备份和恢复的管理过程。
99 41
MySQL主从复制 —— 作用、原理、数据一致性,异步复制、半同步复制、组复制
MySQL主从复制 作用、原理—主库线程、I/O线程、SQL线程;主从同步要求,主从延迟原因及解决方案;数据一致性,异步复制、半同步复制、组复制
107 11
docker pull mysql:8.0.26提示Error response from daemon: Get “https://registry-1.docker.io/v2/“: EOF错误
docker pull mysql:8.0.26提示Error response from daemon: Get “https://registry-1.docker.io/v2/“: EOF错误
如何排查和解决PHP连接数据库MYSQL失败写锁的问题
通过本文的介绍,您可以系统地了解如何排查和解决PHP连接MySQL数据库失败及写锁问题。通过检查配置、确保服务启动、调整防火墙设置和用户权限,以及识别和解决长时间运行的事务和死锁问题,可以有效地保障应用的稳定运行。
81 25
云数据库:从零到一,构建高可用MySQL集群
在互联网时代,数据成为企业核心资产,传统单机数据库难以满足高并发、高可用需求。云数据库通过弹性扩展、分布式架构等优势解决了这些问题,但也面临数据安全和性能优化挑战。本文介绍了如何从零开始构建高可用MySQL集群,涵盖选择云服务提供商、创建实例、配置高可用架构、数据备份恢复及性能优化等内容,并通过电商平台案例展示了具体应用。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等