MySQL-9.1.0 实现最基础的主从复制
目录
1 实验介绍
2 实验准备
2.1 创建目录为MySQL挂载使用
2.2 编写 docker-compose.yml 文件
2.3 启动容器
3 主从复制操作
3.1 MASTER 操作指令
3.2 SLAVE1 操作指令
3.3 SLAVE2 操作指令
4 验证是否实现主从
4.1 导入sql脚本查看是否正常主从复制
4.2 检验从库是否看见复制是否成功
1 实验介绍
本次实验 使用 docker 镜像,开启三个容器,实现一主两从。
容器主机 | IP地址 | 映射主机端口 |
---|---|---|
mysql-master | 192.168.1.2 | 3306 |
mysql-slave1 | 192.168.1.3 | 3307 |
mysql-slave2 | 192.168.1.4 | 3308 |
2 实验准备
2.1 创建目录为MySQL挂载使用
使用 docker 做MySQL这一种有状态的,需要很好的保持数据的可靠性,所以得使用宿主机挂载到容器内
[root@chucong mysql_zhucong]# tree /data/ -L 3/data/├── master # master的目录│ ├── conf # 配置文件存放目录│ │ └── my.cnf # 配置文件│ └── master-data # 存放数据的地方├── slave1│ ├── conf│ │ └── my.cnf│ └── slave1-data└── slave2├── conf│ └── my.cnf└── slave2-data# MySQL 配置文件[root@chucong mysql_zhucong]# cat /data/master/conf/my.cnf [mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.socksymbolic-links=0log_bin=mysql-bin # 开启bin-log日志,注意只有主配置文件需开启server_id=10#gtid_mode=ON # 开启GTID#enforce-gtid-consistency=ON # 保证GTID的强一致性[root@chucong mysql_zhucong]# cat /data/slave1/conf/my.cnf [mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.socksymbolic-links=0server_id=20#super_read_only=on #只读#gtid_mode=ON # 开启GTID#enforce-gtid-consistency=ON # 保证GTID的强一致性[root@chucong mysql_zhucong]# cat /data/slave2/conf/my.cnf [mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.socksymbolic-links=0server_id=30#super_read_only=on #只读#gtid_mode=ON # 开启GTID#enforce-gtid-consistency=ON # 保证GTID的强一致性
2.2 编写 docker-compose.yml 文件
[root@chucong mysql_zhucong]# docker pull mysql:9.1.0
[root@chucong mysql_zhucong]# vim docker-compose.yml version: '2.27.1'services:mysql-master:image: mysql:9.1.0container_name: mysql-masterenvironment: # 定义系统值MYSQL_ROOT_PASSWORD: root # root密码MYSQL_USER: repl # 创建复制用户MYSQL_PASSWORD: root # 设置密码ports:- 3306:3306volumes:- /data/master/master-data:/var/lib/mysql # 挂载宿主机目录到容器- /data/master/conf/my.cnf:/etc/my.cnfrestart: alwaysnetworks:mynet1:ipv4_address: 192.168.1.2mysql-slave1:image: mysql:9.1.0container_name: mysql-slave1environment:MYSQL_ROOT_PASSWORD: rootMYSQL_USER: replMYSQL_PASSWORD: rootports:- 3307:3306volumes:- /data/slave1/slave1-data:/var/lib/mysql # 挂载宿主机目录到容器- /data/slave1/conf/my.cnf:/etc/my.cnfrestart: alwaysnetworks:mynet1:ipv4_address: 192.168.1.3mysql-slave2:image: mysql:9.1.0container_name: mysql-slave2environment:MYSQL_ROOT_PASSWORD: rootMYSQL_USER: replMYSQL_PASSWORD: rootports:- 3308:3306volumes:- /data/slave2/slave2-data:/var/lib/mysql # 挂载宿主机目录到容器- /data/slave2/conf/my.cnf:/etc/my.cnfrestart: alwaysnetworks:mynet1:ipv4_address: 192.168.1.4networks:mynet1: # 使用自定义桥接模式driver: bridgeipam:config:- subnet: 192.168.1.0/24 # 定义网段gateway: 192.168.1.1 # 定义网关
2.3 启动容器
[root@chucong zhucong]# docker compose up -d # 查看容器是否运行[root@chucong zhucong]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESe5776a980697 mysql:9.1.0 "docker-entrypoint.s…" 59 minutes ago Up 43 minutes 33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp mysql-slave10bb3a700077c mysql:9.1.0 "docker-entrypoint.s…" 59 minutes ago Up 43 minutes 33060/tcp, 0.0.0.0:3308->3306/tcp, :::3308->3306/tcp mysql-slave2af2f63aa00e8 mysql:9.1.0 "docker-entrypoint.s…" 59 minutes ago Up 4 seconds 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql-master
3 主从复制操作
3.1 MASTER 操作指令
[root@chucong mysql_zhucong]# docker exec -it mysql-master bash
bash-5.1# mysql -uroot -proot# 假如说没有设置变量自动创建可以手动创建,设置了可以省略以下命令mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'root';# 赋予所有库所有表 repl 用户 REPLICATION SLAVE 的权限mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';mysql> FLUSH PRIVILEGES;mysql> SHOW BINARY LOG STATUS\G # 与过往版本不一样了,以前为 SHOW MASTER status\G*************************** 1. row ***************************File: mysql-bin.000034 # 注意此处的Position: 198 # 还有此出处,这两行在从库操作的时候有至关重要的作用Binlog_Do_DB: Binlog_Ignore_DB: Executed_Gtid_Set: d83de5a7-b723-11ef-a65b-0242c0a80104:1-21 row in set (0.00 sec)
3.2 SLAVE1 操作指令
[root@chucong mysql_zhucong]# docker exec -it mysql-slave1 bashbash-5.1# mysql -uroot -proot# 假如说没有设置变量自动创建可以手动创建,设置了可以省略以下命令mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'root';# 以下这整条命令也是发生了巨大的改变,并且不需要指定端口了mysql> CHANGE REPLICATION SOURCE TOSOURCE_HOST='192.168.1.2', # MASTER 的 IPSOURCE_USER='repl', # 创建的用户SOURCE_PASSWORD='root', # 密码SOURCE_LOG_FILE='mysql-bin.000034', # 为主库使用 SHOW BINARY LOG STATUS\G 中的File值GET_SOURCE_PUBLIC_KEY=1, # 此处注意 自动获取主服务器的公钥(适用于caching_sha2_password)SOURCE_LOG_POS=198; # 为主库使用 SHOW BINARY LOG STATUS\G 中的Position值# 旧版本的命令如下,可指定端口# mysql> CHANGE MASTER TO # -> MASTER_HOST='192.168.1.2',# -> MASTER_PORT=3306,# -> MASTER_USER='repl',# -> MASTER_PASSWORD='root',# -> MASTER_LOG_FILE='mysql-bin.000034',# -> MASTER_LOG_POS=198;mysql> START REPLICA; # 启动复制 9.1.0 变化的命令 以前版本为 START SLAVE;mysql> SHOW REPLICA STATUS; # 启动复制 9.1.0 变化的命令 以前版本为 SHOW SLAVE STATUS;mysql> SHOW REPLICA STATUS\G*************************** 1. row ***************************Replica_IO_State: Waiting for source to send eventSource_Host: 192.168.1.2Source_User: replSource_Port: 3306Connect_Retry: 60Source_Log_File: mysql-bin.000034Read_Source_Log_Pos: 7061047Relay_Log_File: e5776a980697-relay-bin.000002Relay_Log_Pos: 7061177Relay_Source_Log_File: mysql-bin.000034Replica_IO_Running: Yes # IO 线程YES表示已经连接成功,如果不是会显示no或者connectReplica_SQL_Running: Yes
3.3 SLAVE2 操作指令
[root@chucong mysql_zhucong]# docker exec -it mysql-slave2 bashbash-5.1# mysql -uroot -proot# 假如说没有设置变量自动创建可以手动创建,设置了可以省略以下命令mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'root';# 以下这整条命令也是发生了巨大的改变,并且不需要指定端口了mysql> CHANGE REPLICATION SOURCE TOSOURCE_HOST='192.168.1.2', # MASTER 的 IPSOURCE_USER='repl', # 创建的用户SOURCE_PASSWORD='root', # 密码SOURCE_LOG_FILE='mysql-bin.000034', # 为主库使用 SHOW BINARY LOG STATUS\G 中的File值GET_SOURCE_PUBLIC_KEY=1, # 此处注意 自动获取主服务器的公钥(适用于caching_sha2_password)SOURCE_LOG_POS=198; # 为主库使用 SHOW BINARY LOG STATUS\G 中的Position值# 旧版本的命令如下,可指定端口# mysql> CHANGE MASTER TO # -> MASTER_HOST='192.168.1.2',# -> MASTER_PORT=3306,# -> MASTER_USER='repl',# -> MASTER_PASSWORD='root',# -> MASTER_LOG_FILE='mysql-bin.000034',# -> MASTER_LOG_POS=198;mysql> START REPLICA; # 启动复制 9.1.0 变化的命令 以前版本为 START SLAVE;mysql> SHOW REPLICA STATUS; # 启动复制 9.1.0 变化的命令 以前版本为 SHOW SLAVE STATUS;mysql> SHOW REPLICA STATUS\G*************************** 1. row ***************************Replica_IO_State: Waiting for source to send eventSource_Host: 192.168.1.2Source_User: replSource_Port: 3306Connect_Retry: 60Source_Log_File: mysql-bin.000034Read_Source_Log_Pos: 7061047Relay_Log_File: 0bb3a700077c-relay-bin.000002Relay_Log_Pos: 7061177Relay_Source_Log_File: mysql-bin.000034Replica_IO_Running: YesReplica_SQL_Running: Yes
4 验证是否实现主从
4.1 导入sql脚本查看是否正常主从复制
# MASTER[root@chucong ~]# docker cp smart_work_v3.sql mysql-master:/Successfully copied 6.53MB to mysql-master:/[root@chucong ~]# docker exec -it mysql-master bashbash-5.1# ls afs boot docker-entrypoint-initdb.d home lib64 mnt proc run smart_work_v3.sql sys usrbin dev etc lib media opt root sbin srv tmp varbash-5.1# mysql -uroot -prootmysql> CREATE DATABASE shuyan; # 创建数据库mysql> USE shuyan # 切换到数据库Database changedmysql> SOURCE smart_work_v3.sql # 导入sql脚本mysql> SHOW TABLES;+----------------------------------------+| Tables_in_shuyan |+----------------------------------------+| aaa || abi_http_log || act_app_appdef || act_app_databasechangelog || act_app_databasechangeloglock || act_app_deployment || act_app_deployment_resource || act_cmmn_casedef |+----------------------------------------+
4.2 检验从库是否看见复制是否成功
mysql> USE shuyan;Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> SHOW TABLES;+----------------------------------------+| Tables_in_shuyan |+----------------------------------------+| aaa || abi_http_log || act_app_appdef || act_app_databasechangelog || act_app_databasechangeloglock || act_app_deployment || act_app_deployment_resource || act_cmmn_casedef || act_cmmn_databasechangelog || act_cmmn_databasechangeloglock || act_cmmn_deployment |+----------------------------------------+
相关文章:
MySQL-9.1.0 实现最基础的主从复制
目录 1 实验介绍 2 实验准备 2.1 创建目录为MySQL挂载使用 2.2 编写 docker-compose.yml 文件 2.3 启动容器 3 主从复制操作 3.1 MASTER 操作指令 3.2 SLAVE1 操作指令 3.3 SLAVE2 操作指令 4 验证是否实现主从 4.1 导入sql脚本查看是否正常主从复制 4.2 检验从库是否看见复制…...
Java中的“泛型“
泛型(Generics)是Java中的一种重要特性,它允许在定义类、接口和方法时使用类型参数(type parameters)。泛型的主要目的是提高代码的类型安全性和重用性。下面我将详细讲解Java中的泛型。 1. 泛型的基本概念 泛型允许我…...
前端(五)css属性
css属性 文章目录 css属性一、字体属性二、文本属性三、背景属性四、盒子模型 一、字体属性 font-weight:文字粗细,在100到900之间,normal(400),bord(700),inherit(继承父类) font-style:文字风格,normal表示正常(默认…...
总结拓展十七:SAP 采购订单行项目“交货“页签解析
《 SAP采购订单行项目“交货”页签字段解析》 在 SAP 系统的采购流程中,采购订单行项目的“交货”页签承载着关键的信息,其中的字段更是对整个交货环节的精准描述和把控的重要元素。理解和正确解析这些字段,对于确保采购流程的顺利进行、优化…...
分布式日志系统设计
一、分布式日志系统定义 分布式日志系统是一种用于收集、存储和分析大规模分布式系统日志的系统。它可以帮助开发人员和系统管理员实时监控和调试系统,提高系统可靠性和可用性,同时也可以用于日志分析和故障排查。 二、简单设计思路 日志收集ÿ…...
DApp开发如何平衡性能与去中心化?
DApp的核心价值在于信任、透明和去中心化,但这些特点往往伴随着性能的瓶颈和高成本。在DApp开发中,如何在保证去中心化的前提下提升性能,成为开发者面临的重要挑战。如何实现性能与去中心化的平衡是一个重要课题。 一、为什么去中心化影响性…...
RK3588开发笔记-Buildroot编译Qt5WebEngine-5.15.10
目录 前言 一、Qt5WebEngine简介 二、Qt5WebEngine编译 总结 前言 Rockchip RK3588是一款强大的多核处理器,广泛应用于边缘计算、人工智能、嵌入式系统等领域。为了在RK3588上运行自定义的Linux系统,并使用Qt5WebEngine进行Web内容渲染,Buildroot是一个非常合适的工具。本…...
2024年12月GESPC++三级真题解析
一、单选题(每题2分,共30分) 题目123456789101112131415答案 B D A A D B C A A D D C D C A 1.下列二进制表示的十进制数值分别是( )[10000011]原( ) [10000011]补ÿ…...
vue-router路由传参的两种方式(params 和 query )
一、vue-router路由传参问题 1、概念: A、vue 路由传参的使用场景一般应用在父路由跳转到子路由时,携带参数跳转。 B、传参方式可划分为 params 传参和 query 传参; C、而 params 传参又可分为在 url 中显示参数和不显示参数两种方式&#x…...
Asp.net 做登录验证码(MVC)
public class ValidateCode{/// <summary>/// 创建随机数/// </summary>/// <param name"num"></param>/// <returns></returns>public string CreateRandom(int num){string str "ABCDEFGHJKMNPQRSTUVWXYZabcdefghjkmnpq…...
在 Chrome中直接调用大型语言模型的API
AI 时代的高速发展,我们都习惯了使用 ChatGPT、Claude、Gemini 和其他 AI 工具来询问各种问题,目前大部分的 AI 应用都是通过服务端 API 来实现的。 如果想要在 Web 上使用 AI 功能往往需要靠服务器来处理一些非常大的模型。这在制作一些生成内容的 AI …...
微信小程序调用腾讯地图-并解读API文档 JavaScript SDK和 WebService API
搜索:腾讯位置服务 找到API文档: 入门中第一步:申请开发者密钥key 前往控制台: 创建应用并获取key: 设置key的时候,还需要小程序的APPID。所以要前往微信公众平台中获取小程序的APPID: 限制要求:…...
WPF 控件
<div id"content_views" class"htmledit_views"><p id"main-toc"><strong>目录</strong></p> WPF基础控件 按钮控件: Button:按钮 RepeatButton:长按按钮 RadioButton:单选按钮 数据显示控件 Te…...
VScode执行任务
背景 在vscode 中 如果执行命令需要传递进来参数,那么直接通过命令行终端的方式不太方便。通过task 任务的方式来进行启动执行,降低反复输入参数等繁琐工作。 首先可以查看vscode 官方文档 task 启动 crtl shift p .vscode/task.json 示例 执行cp…...
MySQL(数据类型)
目录 1. 数值类型 2. bit类型 3.小数类型 3. 字符串类型 4 日期和时间类型 5. enum和set 1. 数值类型 对标C语言: tinyint->char(1字节): 有符号:127 ~ 255 无符号:0 ~ -128。 smalli…...
pytorch中的tqdm库
tqdm 是一个 Python 的进度条库,名字来源于阿拉伯语 "taqaddum"(意思是“进步”)。它以简单易用、高效著称,常用于循环操作中显示进度信息。 基本用法 1. 普通循环 tqdm 可以轻松为 for 循环添加进度条: …...
NoSQL大数据存储技术测试(5)MongoDB的原理和使用
单项选择题 第1题 关于 MongoDB 集群部署下面说法不正确的是() 已经不使用主从复制的模式 在实际应用场景中, Mongodb 集群结合复制集和分片机制 MongoDB 支持自动分片, 不支持手动切分 (我的答案) 每…...
【Golang】Go语言编程思想(六):Channel,第四节,Select
使用 Select 如果此时我们有多个 channel,我们想从多个 channel 接收数据,谁来的快先输出谁,此时应该怎么做呢?答案是使用 select: package mainimport "fmt"func main() {var c1, c2 chan int // c1 and …...
Vue2简介
一、官网 英文官网: https://vuejs.org/中文官网: https://cn.vuejs.org/ 二、介绍与描述 动态构建用户界面的渐进式 JavaScript 框架 作者: 尤雨溪 三、Vue 的特点 遵循 MVVM 模式 编码简洁, 体积小, 运行效率高, 适合移动/PC 端开发 它本身只关注 UI, 也可以引入其它第三…...
EasyPlayer.js播放器如何在iOS上实现低延时直播?
随着流媒体技术的迅速发展,H5流媒体播放器已成为现代网络视频播放的重要工具。其中,EasyPlayer.js播放器作为一款功能强大的H5播放器,凭借其全面的协议支持、多种解码方式以及跨平台兼容性,赢得了广泛的关注和应用。 那么要在iOS上…...
ChatGPT Pro是什么
ChatGPT Pro 和 ChatGPT Plus 的区别主要体现在功能范围、适用场景和目标用户上。 ChatGPT Plus 功能 • 价格:20美元/月。 • 目标用户:针对个人用户设计。 • 主要特点: • 在高峰期响应速度更快。 • 使用高级模型(如 GPT-4…...
基于Springboot汽车资讯网站【附源码】
基于Springboot汽车资讯网站 效果如下: 系统主页面 汽车信息页面 系统登陆页面 汽车信息推荐页面 经销商页面 留言反馈页面 用户管理页面 汽车信息页面 研究背景 随着信息技术的快速发展和互联网的普及,互联网已成为人们查找信息的重要场所。汽车资讯…...
MySQL-DQL之数据表操作
文章目录 零. 准备工作一. 简单查询1.查询所有的商品.2.查询商品名和商品价格.3.查询结果是表达式(运算查询):将所有商品的价格10元进行显示. 二. 条件查询1. 比较查询2. 范围查询3. 逻辑查询4. 模糊查询5. 非空查询 三. 排序查询四. 聚合查询…...
Luckysheet 实现 excel 多人在线协同编辑(全功能实现增强版)
前言 感谢大家对 Multi person online edit(多人在线编辑器) 项目的支持,mpoe 项目使用 quill、luckysheet、canvas-editor 实现的 md、excel、word 在线协同编辑,欢迎大家Fork 代码,多多 Start哦~ Multi person online edit 多人协同编辑器…...
vue 给div增加title属性
省略号 移入显示文字 在很多时候,我们页面上其实有时候展示不出来很多很多文字的,这个时候我们就不得不对这个文字进行处理,但是我们鼠标放到文字上时,还想展示所有的文字,这种方式其实有2种 一Tooltip 文字提示 第一…...
设计模式之工厂模式:从汽车工厂到代码工厂
~犬📰余~ “我欲贱而贵,愚而智,贫而富,可乎? 曰:其唯学乎” 工厂模式概述 想象一下你走进一家4S店准备买车。作为顾客,你不需要知道汽车是如何被制造出来的,你只需要告诉销售顾问&a…...
人脸识别Adaface之libpytorch部署
目录 1. libpytorch下载2. Adaface模型下载3. 模型转换4. c推理4.1 前处理4.2 推理4.3 编译运行4.3.1 写CMakeLists.txt4.3.2 编译4.3.3 运行 1. libpytorch下载 参考: https://blog.csdn.net/liang_baikai/article/details/127849577 下载完成后,将其解…...
vue3+echarts+websocket分时图与K线图实时推送
一、父组件代码: <template> <div class"chart-box" v-loading"loading"> <!-- tab导航栏 --> <div class"tab-box"> <div class"tab-list"> <div v-for"(item, index) in tabList…...
小程序开发实战项目:构建简易待办事项列表
随着移动互联网的飞速发展,小程序以其便捷性、即用即走的特点,成为了连接用户与服务的重要桥梁。无论是电商平台的购物助手,还是餐饮行业的点餐系统,小程序都在各个领域发挥着巨大的作用。 小程序开发基础 1. 小程序简介 小程序是…...
SD Express 卡漏洞导致笔记本电脑和游戏机遭受内存攻击
Positive Technologies 最近发布的一份报告揭示了一个名为 DaMAgeCard 的新漏洞,攻击者可以利用该漏洞利用 SD Express 内存卡直接访问系统内存。 该漏洞利用了 SD Express 中引入的直接内存访问 (DMA) 功能来加速数据传输速度,但也为对支持该标准的设备…...
汽车之家网站是怎么做的/网站构建的基本流程
注意:以下内容如果没有特别申明,默认使用的EF6.0版本,code first模式。 推荐MiniProfiler插件 工欲善其事,必先利其器。 我们使用EF和在很大程度提高了开发速度,不过随之带来的是很多性能低下的写法和生成不太高效的sq…...
如何建设和优化一个网站/百度开户返点
相比LCS的组策略,OCS增加了很多功能。做为IT人员管理和实施人员统一部署的好助手,它的一些功能非常有用,比如保存用户密码、设置通讯薄URL和限制用户添加数量等,有效的扩展和补充了了OCS控制台的现有功能而不必再做二次开发。策略…...
厦门微信网站建/今天新闻
如图所示: 如果此时给.div1添加属性 position属性是 .div1就会消失不见 那么此时就必须显示给.div1加上宽度,才能显示出来结果如图所示:转载于:https://blog.51cto.com/11871779/2072041...
精品课网站怎么做/好的seo网站
值传递!Java中只有按值传递,没有按引用传递! 回家后我就迫不及待地查询了这个问题,觉得自己对java这么基础的问题都搞错实在太丢人! 综合网上的描述,我大概了解了是怎么回事,现在整理如下&#…...
怎样做网站的源代码/百度一下app下载安装
什么是DOM? DOM是W3C(万维网联盟)的标准,是Document Object Model(文档对象模型)的缩写,它定义了访问HTML和XML文档的标准: “W3C文档对象模型(DOM)是中立于平…...
展示型网站设计/游戏推广引流
大家都知道的是算法面试占比高,可现在系统设计面试也避无可避! 有人问:不是SDE2才问系统设计,SDE1只考察OOD吗? 往年也许如此,但今年面试的小伙伴反馈:亚麻分别在三、四轮里出现OOD和系统设计…...