【干货】Docker Mysql数据库主从同步配置详细

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 【干货】Docker Mysql数据库主从同步配置详细

一. 说之前


前两天 MTSC 2018 在北京国际会议中心圆满召开,并取得非常好的反响,虽然临时有事,没去成,但还是非常赞许为此会议付出的朋友和小伙伴们~


二.  背景


最近在公司做内部平台架构上的调整,期间顺便弄了一下数据库的高可用的方案,一来记录一下,二来近一年公众号上的文章贡献太少了,争取补上来~


三. 今天分享啥


没错,正如标题上写的,今天会先给大家讲一下,如何《基于docker+mysql实现主从同步配置方法》 ,当然docker只是辅助,重点是Mysql如何实现高可用的方法。


注:有的测试小伙伴会说,这个不是开发或者是架构师的事吗,测试要关注这个干嘛?现在互联网正式在线上运营的产品我相信都是高可用架构的,掌握产品架构的实现,帮助测试更好的掌握先机,再说,让你们多学点知识,总不见得是坏事吧〜


四. 具体操作


4.1 先建立数据存放目录(~/test/mysql_test/)

--mysql
   --master
      --data  
      --conf
         --my.cnf     
   --slave
      --data  
      --conf
         --my.cnf

4.2 准备好 Mysql Master(主库)和Mysql Slave(从库)的my.cnf文件

Master my.cnf 配置文件:

[mysqld]
server_id = 1
log-bin= mysql-bin
read-only=0
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

Slave my.cnf 配置文件:

[mysqld]
server_id = 2
log-bin= mysql-bin
read-only=1
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

注:在本文中,由上述my.cnf配置文件可得知,主从同步针对的数据库(除了mysql,sys,information_schema,performance_schema这些以外)的其它所有数据库都会进行同步(含数据库、表、数据等)

小结:

  • 由上述master my.cnf和slave my.cnf配置文件中可知,两者的区别主要在于server_id和read-only值不同
  • server_id标识服务实例,master和slave值需要保证唯一
  • read-only中值为0表示支持可读写、1的话表明仅支持可读



4.3 创建master主容器

docker run --name mastermysql -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root -v ~/test/mysql_test/master/data:/var/lib/mysql -v ~/test/mysql_test/master/conf/my.cnf:/etc/mysql/my.cnf mysql:5.7

4.4 创建slave从容器

docker run --name slavemysql -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=root -v ~/test/mysql_test/slave/data:/var/lib/mysql -v ~/test/mysql_test/slave/conf/my.cnf:/etc/mysql/my.cnf mysql:5.7

4.5  master容器设置

//进入master容器
docker exec -it mastermysql bash
//启动mysql命令,刚在创建窗口时我们把密码设置为:root
mysql -u root -p
//创建一个用户来同步数据,每个slave使用标准的MySQL用户名和密码连接master。进行复制操作的用户会授予REPLICATION SLAVE 权限。
CREATE USER 'slave'@ '%' IDENTIFIED BY '123456';  (其实可省略)
GRANT REPLICATION SLAVE ON *.* to 'slave'@'%' identified by '123456';
//这里表示创建一个slaver同步账号slave,允许访问的IP地址为%,%表示通配符
//查看状态,记住File、Position的值,在Slave中将用到
show master status/G;

4.6 slave容器设置

//进入slaver容器
docker exec -it slavemysql bash
//启动mysql命令,刚在创建窗口时我们把密码设置为:root
mysql -u root -p
//设置主库链接
change master to master_host='172.17.0.2',master_user='slave',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=0,master_port=3306;
//启动从库同步
start slave;
//查看状态
show slave status\G;

如果 show slave status\G命令结果中出现: Slave_IO_Running: Yes Slave_SQL_Running: Yes 以上两项都为Yes,那说明没问题了。


五、注意事宜


5.1 首先在主从没有生效的时候,要保持两台服务器数据库、表相同,数据相同

那如何实现主从库在开始之间的同步呢,别怕,继续看〜

master容器上执行:

mysqldump -uroot -p --all-databases >/root/all_database.sql

将all_database.sql拷贝到从库中来,在slave从库容器上执行:

mysql -uroot -p <all_database.sql

如此两步骤,主库和从库数据会追加相平,保持同步!

再此过程中,若主库存在业务,在同步的时候要先锁表,让其不要有修改!

#如需要,可以master容器中,执行以下命令锁定数据库以防止写入数据。mysql>FLUSH TABLES WITH READ LOCK;

等待主从数据追平,主从同步后在打开锁!

#解锁数据表。
mysql>UNLOCK TABLES;

主从数据追平后,定位好从库到主库日志的文件名字,和相应的位置

master主库运行:

mysql> show master status\G;

微信图片_20220523183623.png

看到且记住相应文件名字和位置,下面会用到哦!

slave从库运行:

#设置主库链接
change master to master_host='172.17.0.9',master_user='slave',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=2037,master_port=3306;
#执行从库同步
start slave;
#查看从库同步状态
show slave status\G;

微信图片_20220523183717.png

在结果中看到:

Slave_IO_Running: Yes
        Slave_SQL_Running: Yes

即可成功同步!


六、主从同步验证


6.1 如当前数据库情况如下:



6.2、在master主库容器中,创建数据库master_demo,并在此库下创建表userinfo,并插入一条记录

create database master_demo;
use master_demo;
create table userinfo(username varchar(50),age int);
insert into userinfo values('Tom',18);

微信图片_20220523183748.png

6.3、此时,进入从库容器中,查看:

微信图片_20220523183829.png


确实已经将在master主库新建的数据库和表记录都同步过来了。

既然是主从同步,那反过来验证一下,在从库下插入记录后,会不会同步到主库中来呢?

在从库上操作插入记录:

insert into userinfo values('slave',20);

查看:

微信图片_20220523183913.png

切到master主库中,查看:

微信图片_20220523183940.png


发现在master主库中,还是只有一条记录,说明与预期设想的一样,在从库中插入记录,是不会同步到master主库中来的

再来一波,在主库master上,插入新记录:

insert into userinfo values('master',25);


微信图片_20220523184009.png

在从库中,查看

微信图片_20220523184040.png

发现在master主库中新加入的master记录,在从库中同步过来了。

到此,基于docker mysql数据库的主从同步配置,验证到此结束,命令、配图给的如此详细,还不来点个赞~

七. 未完待续


接下来,还会给大家介绍的有

  • 《Docker Mysql数据库实现双主同步配置详细》
  • 《Docker Mongo数据库实现主从同步配置详细》
  • 《Docker Mongo数据库实现主主同步配置详细》
  • 《Docker +Nginx+Keepalived实现架构高可用》
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
17天前
|
消息中间件 资源调度 关系型数据库
如何在Flink on YARN环境中配置Debezium CDC 3.0,以实现实时捕获数据库变更事件并将其传输到Flink进行处理
本文介绍了如何在Flink on YARN环境中配置Debezium CDC 3.0,以实现实时捕获数据库变更事件并将其传输到Flink进行处理。主要内容包括安装Debezium、配置Kafka Connect、创建Flink任务以及启动任务的具体步骤,为构建实时数据管道提供了详细指导。
44 9
|
17天前
|
安全 Nacos 数据库
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改。本文详细探讨了这一问题的原因及解决方案,包括限制公网访问、使用HTTPS、强化数据库安全、启用访问控制、监控和审计等步骤,帮助开发者确保服务的安全运行。
29 3
|
20天前
|
PHP 数据库 数据安全/隐私保护
布谷直播源码部署服务器关于数据库配置的详细说明
布谷直播系统源码搭建部署时数据库配置明细!
|
22天前
|
Java 数据库连接 数据库
如何构建高效稳定的Java数据库连接池,涵盖连接池配置、并发控制和异常处理等方面
本文介绍了如何构建高效稳定的Java数据库连接池,涵盖连接池配置、并发控制和异常处理等方面。通过合理配置初始连接数、最大连接数和空闲连接超时时间,确保系统性能和稳定性。文章还探讨了同步阻塞、异步回调和信号量等并发控制策略,并提供了异常处理的最佳实践。最后,给出了一个简单的连接池示例代码,并推荐使用成熟的连接池框架(如HikariCP、C3P0)以简化开发。
45 2
|
23天前
|
存储 SQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(1)作者——LJS[含MySQL的下载、安装、配置详解步骤及报错对应解决方法]
Mysql And Redis基础与进阶操作系列(1)之[MySQL的下载、安装、配置详解步骤及报错对应解决方法]
|
24天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
72 2
|
11天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
50 2
|
9天前
|
运维 Cloud Native 虚拟化
一文吃透云原生 Docker 容器,建议收藏!
本文深入解析云原生Docker容器技术,涵盖容器与Docker的概念、优势、架构设计及应用场景等,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
一文吃透云原生 Docker 容器,建议收藏!
|
1天前
|
Kubernetes Linux 开发者
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
21 5
下一篇
无影云桌面