docker 配置 Mysql主从集群
Docker version 20.10.17, build 100c701
MySQL Image version: 8.0.32
Docker container mysql-master is source. mys

ql-replica is replication.
master == source. replica == slave.名称叫法不一样而已。
Choose one of the way,与replica同步数据两种情况:
- source有存在的数据并且你想同步到replica,这种需要mysqldump备份source数据,然后CHANGE REPLICATION SOURCE TO
- you are setting up a new source and replica combination,其实就是你source没有数据,没有想同步到replica的,这种的不需要mysqldump备份source数据复原到replica,直接CHANGE REPLICATION SOURCE TO
网络大多为第二种情况,那么我就写第一种情况,第一种情况基本就多了mysqldump这个步骤。
Pull MySQL image And run mysql-master#
docker pull mysql/mysql-server:latest
你可以去Docker Hub寻找适合的版本: docker hub
主节点的my.cnf配置为:
[mysqld]
server_id=1
socket=/var/lib/mysql/mysql.sock
user=mysql
Mysql8很多配置已经为默认,比如binlog默认开启,log_replica_updates默认开启,注意server_id需要source和replica不要相同。
datadir文件夹下要注意为空才行,否则会启动不成功。如果启动过程遇到任何问题,可以使用docker logs mysql-master命令查看出了什么问题。
注意docker使用mount命令,需要文件或者文件夹都存在,而-v不需要。
可搜索--mount和-v两个命令的区别。
docker run -p 3307:3306 --name mysql-master \
--mount type=bind,src=/root/working/mydata/mysql-master/my.cnf,dst=/etc/my.cnf \
--mount type=bind,src=/root/working/mydata/mysql-master/datadir,dst=/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql/mysql-server:latest
-p: 3307为云服务器端口,我用他连接datagrip。3306为容器内部端口。
mount:src为云服务路径,dst为容器内部路径。
MYSQL_ROOT_PASSWORD:为root用户指定密码,否则需要在docker logs去查看此容器自己生成的密码。
创建一个远程访问的账号和一个做主从同步的账号#
创建一个远程访问的账号,方便我们使用datagrip等工具连接我们的数据库。
注意云服务器的安全组规则,是否把我们需要的端口放开了,比如3306,3307,3308
docker exec -it mysql-master mysql -uroot -p命令进入到数据库,root账号的密码为上面我们设置的root
进来数据库后,我们创建账号:
#添加远程登录用户
CREATE USER 'keboom'@'%' IDENTIFIED BY 'keboom';
GRANT ALL PRIVILEGES ON *.* TO 'keboom'@'%';
keboom这个账号用来datagrip软件连接我们的数据库。
接着我们创建一个用来做主从同步的用户:
CREATE USER 'repl'@'%' IDENTIFIED BY 'repl';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
repl这个账号用来replica节点来向source节点同步数据。
mysqldump命令在主库备份数据,接着从库恢复此备份#
-
在主库执行
FLUSH TABLES WITH READ LOCK;将主库只读,这时记录主库binlog位置,并做mysqldump备份。备份做好之后,则解锁。 -
我们新开一个终端,进入数据库执行
SHOW MASTER STATUS\G获得主库binlog位置。mysql> SHOW MASTER STATUS\G *************************** 1. row ***************************File: binlog.000002Position: 2185Binlog_Do_DB: Binlog_Ignore_DB: Executed_Gtid_Set: 1 row in set (0.00 sec) -
我们再新开一个终端,执行
docker exec -it mysql-master bash,进入容器进行备份。注意
docker exec -it mysql-master bash和docker exec -it mysql-master mysql -uroot -p区别 -
mysqldump -uroot -p --databases test --source-data > dbdump.db,这里我自己创建了一个test数据库,我只备份这一个数据库。可以在test数据库创建一个表,插入几条数据,用来验证同步数据是否成功。 -
UNLOCK TABLES;备份好数据之后,就可以解锁了。
启动replica节点#
replica—my.cnf配置为:
[mysqld]
server_id=21
socket=/var/lib/mysql/mysql.sock
user=mysql
docker run -p 3308:3306 --name mysql-replica \
--mount type=bind,src=/root/working/mydata/mysql-replica/my.cnf,dst=/etc/my.cnf \
--mount type=bind,src=/root/working/mydata/mysql-replica/datadir,dst=/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql/mysql-server:latest
-
replica启动好后,将
dbdump.db文件复制到挂载的目录下,进入到replica容器,执行mysql -uroot -p < dbdump.db,这时我们就把备份恢复到从节点了,我们可以在主库试着添加几条数据,可以看到此时从库还不能同步数据。 -
进入到replica数据库,执行命令:
CHANGE REPLICATION SOURCE TO-> MASTER_HOST='172.17.0.2',SOURCE_USER='repl',SOURCE_PASSWORD='repl',SOURCE_LOG_FILE='binlog.000002',SOURCE_LOG_POS=2185,GET_MASTER_PUBLIC_KEY=1;MASTER_PORT如果你的mysql用的不是3306,记得设置一下。获得MASTER_HOST,可执行:
docker inspect mysql-master | grep IP "LinkLocalIPv6Address": "","LinkLocalIPv6PrefixLen": 0,"SecondaryIPAddresses": null,"SecondaryIPv6Addresses": null,"GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"IPAddress": "172.17.0.2","IPPrefixLen": 16,"IPv6Gateway": "","IPAMConfig": null,"IPAddress": "172.17.0.2","IPPrefixLen": 16,"IPv6Gateway": "","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,SOURCE_USER就是我们在主库创建的用于主从同步的用户。
SOURCE_LOG_FILE,SOURCE_LOG_POS是上面在主库中查询到的。
GET_MASTER_PUBLIC_KEY,mysql8 默认使用 caching_sha2_password authentication plugin。replica需要向source获得公匙。
-
START REPLICA; -
SHOW REPLICA STATUS\G查看同步状态。如果Replica_IO_Running和Replica_SQL_Running都为Yes那么基本就成功了。如果有其他问题,可以通过docker logs mysql-replica查看日志。
可以试试在test数据库的表中插入几条数据,看看从库是否同步过来。
相关文章:
docker 配置 Mysql主从集群
Docker version 20.10.17, build 100c701 MySQL Image version: 8.0.32 Docker container mysql-master is source. mys ql-replica is replication. master source. replica slave.名称叫法不一样而已。 Choose one of the way,与replica同步数据两种情况&…...
Layui实现OA会议系统之会议管理模块总合
目录 一、项目背景 二、项目概述 1. 概述 2. 环境搭建 3. 工具类引用 4. 功能设计 4.1 会议发布 4.2 我的会议 4.3 会议审批 4.4 会议通知 4.5 待开会议 4.6 历史会议 4.7 所有会议 5. 性能优点 5.1 兼容性好 5.2 可维护性和可扩展性 5.3 轻量灵活 5.4 模块化设计…...
fishing之踩坑篇捕获数据不齐全
文章目录 一、问题记录二、解决方法三、更新钓鱼模板四、进行点击邮件五、查看仪表盘免责声明 一、问题记录 通过点击邮件内的链接,提交数据,但是只记录密码,无法记录username 二、解决方法 对于需要被捕获的表单数据,除了inp…...
ppt使用笔记
文章目录 如何让文档好看纯文字绝对不可行多用流程图和效果图切换动画母版音乐视频 作品渐变星空放大镜随机抽奖 其他快捷键 作为一个开发,对这种表现类型的软件一直不太上心,但有些场景要用到ppt,例如述职和项目案例分享。 很直观的体验就是…...
java中的hashmap和concurrenthashmap解析
hashmap的初始化数组大小为16,如果发生哈希冲突的时候在当前的索引后面采用头插法以链表的形式继续插入节点。 concurrenthashmap的结构图如下所示: 本身不是16个节点吗?这里分为两个长度为4的数组,变成了4*4总共16个节点&#x…...
元素2D转3D 椭圆形旋转实现
椭圆旋转功能展示 transform-style: preserve-3d;(主要css代码) gif示例(背景图可插入透明以此实现边框线的旋转) 导致的无法点击遮挡问题可以参考我的另一个文章 穿透属性-----------------------css穿透属性 实时代码展示...
Centos7.9 制作openssh9.2p2 rpm升级包和升级实战
一、背景说明 Centos7.9 默认安装的openssh 版本为7.4p1,经绿盟扫描,存在高危漏洞,需要升级到最新。 官网只提供编译安装包,为了方便升级,先通过编译安装包,制作rpm包,并进行升级 如下为做好…...
JavaScript学习(3)
Web API 是开发人员的梦想。 它可以扩展浏览器的功能它可以极大简化复杂的功能它可以为复杂的代码提供简单的语法 什么是 Web API? API 指的是应用程序编程接口(Application Programming Interface)。 Web API 是 Web 的应用程序编程接口…...
2023华为OD机试真题Java实现【寻找最大价值的矿堆/深度优先搜索】
前言 本题使用Java实现,如果需要Python代码,请点击以下链接 点我 题目 我们规定,0表示空地,1表示银矿、2表示金矿,矿堆表示由相邻的金矿或银矿连接形成的地图。 银矿价值是1 ,金矿价值是2 ,你的目标是找出地图中最大价值的矿堆,并且输出该矿堆的价值 示例1 输入:…...
MyCat概述
1.MyCat概述 MyCat是阿里巴巴的产品,他是开源的、基于Java语言编写的MySQL数据库中间件。可以像使用mysql一样来使用mycat,对于开发人员来说根本感觉不到mycat的存在。 MyCat下载地址:http://dl.mycat.org.cn/ MyCat官网:http:/…...
【LeetCode】【数据结构】单链表OJ常见题型(一)
👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》 🌝每一个不曾起舞的日子,都是对生命的辜负。 目录 前言: 【LeetCode】203.移除链表元素 【LeetCo…...
QGraphicsView实现简易地图3『局部加载-地图缩放』
前文链接:QGraphicsView实现简易地图2『瓦片经纬度』 第一篇文章提到过,当地图层级较大时,暴力全加载地图会造成程序卡顿,因此需要实现地图的局部加载。 实现思路:以地图窗口(以下称为视口)为地…...
bash的特性(二)IO重定向与管道
bash的I/O重定向及管道 一、概述 在shell中,最常使用的fd(file descriptor)有三个,标准输入,标准输出,错误输出。进程用文件描述符来管理打开的文件。 名称 文件描述符 标准输入(stdin) 0 键盘,也可以…...
elb 直接配置到后端服务器组
出现上图报错的原因是,前面elb配置了https证书,后端的nginx也配置了证书,导致冲突。 需要修改后端的nginx配置文件,将证书配置注释掉。 如果出现健康检查异常,需要在对应服务器的安全组上配置elb所在的网段的访问权限…...
安卓:BottomNavigationBar——底部导航栏控件
目录 一、BottomNavigationBar介绍 二、BottomNavigationBar的常用方法及其常用类 (一)、常用方法 1. 添加菜单项 2. 移除菜单项 3. 设置选中监听器 4. 设置当前选中项 5. 设置徽章 6. 样式和颜色定制 7. 动画效果 8. 隐藏底部导航栏。 9、设…...
十、用 ChatGPT 辅助写文章
目录 一、实验介绍 二、背景 三、ChatGPT 写作方式 3.1 传统写作方式 3.2 ChatGPT 写作方式...
计算机毕设 深度学习猫狗分类 - python opencv cnn
文章目录 0 前言1 课题背景2 使用CNN进行猫狗分类3 数据集处理4 神经网络的编写5 Tensorflow计算图的构建6 模型的训练和测试7 预测效果8 最后 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往…...
60多行代码仿制B站首页一个好看的卡片效果
文章目录 1、为啥是这个?2、仿制效果3、实现思路4、代码5、查看B站如何实现 1、为啥是这个? 看到Bilibili首页的一个卡片,看着效果很不错,给人很舒适的感觉。一琢磨貌似也不难,甚至只需要一层 div 就可以实现主要框架…...
Redis内网主从节点搭建
Redis内网主从节点搭建 1、文件上传2、服务安装3、服务启动4、配置主从复制 1、文件上传 内网环境手动上传gcc-c、redis.tar文件 2、服务安装 # 解压 unzip gcc-c.zip unzip gcc_rpm.zip tar -zxvf redis-6.2.13.tar.gz# 安装 cd gcc_rpm/ rpm -ivh *.rpm --nodeps --force…...
ESP32-C2开发板 ESP8684芯片 兼容ESP32-C3开发
C2是一个芯片采用4毫米x 4毫米封装,与272 kB内存。它运行框架,例如ESP-Jumpstart和ESP造雨者,同时它也运行ESP-IDF。ESP-IDF是Espressif面向嵌入式物联网设备的开源实时操作系统,受到了全球用户的信赖。它由支持Espressif以及所有…...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...
qt+vs Generated File下的moc_和ui_文件丢失导致 error LNK2001
qt 5.9.7 vs2013 qt add-in 2.3.2 起因是添加一个新的控件类,直接把源文件拖进VS的项目里,然后VS卡住十秒,然后编译就报一堆 error LNK2001 一看项目的Generated Files下的moc_和ui_文件丢失了一部分,导致编译的时候找不到了。因…...
6.9本日总结
一、英语 复习默写list11list18,订正07年第3篇阅读 二、数学 学习线代第一讲,写15讲课后题 三、408 学习计组第二章,写计组习题 四、总结 明天结束线代第一章和计组第二章 五、明日计划 英语:复习l默写sit12list17&#…...
02-性能方案设计
需求分析与测试设计 根据具体的性能测试需求,确定测试类型,以及压测的模块(web/mysql/redis/系统整体)前期要与相关人员充分沟通,初步确定压测方案及具体的性能指标QA完成性能测试设计后,需产出测试方案文档发送邮件到项目组&…...
【R语言编程——数据调用】
这里写自定义目录标题 可用库及数据集外部数据导入方法查看数据集信息 在R语言中,有多个库支持调用内置数据集或外部数据,包括studentdata等教学或示例数据集。以下是常见的库和方法: 可用库及数据集 openintro库 该库包含多个教学数据集&a…...
MCP和Function Calling
MCP MCP(Model Context Protocol,模型上下文协议) ,2024年11月底,由 Anthropic 推出的一种开放标准,旨在统一大模型与外部数据源和工具之间的通信协议。MCP 的主要目的在于解决当前 AI 模型因数据孤岛限制而…...
软件工程教学评价
王海林老师您好。 您的《软件工程》课程成功地将宏观的理论与具体的实践相结合。上半学期的理论教学中,您通过丰富的实例,将“高内聚低耦合”、SOLID原则等抽象概念解释得十分透彻,让这些理论不再是停留在纸面的名词,而是可以指导…...
