当前位置: 首页 > news >正文

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-master192.168.1.23306
mysql-slave1192.168.1.33307
mysql-slave2192.168.1.43308

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.2​mysql-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.3​mysql-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.4​networks: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  var​bash-5.1# mysql -uroot -prootmysql> CREATE DATABASE shuyan;  # 创建数据库mysql> USE shuyan   # 切换到数据库Database changed​mysql> 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 -A​Database 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 系统的采购流程中,采购订单行项目的“交货”页签承载着关键的信息,其中的字段更是对整个交货环节的精准描述和把控的重要元素。理解和正确解析这些字段,对于确保采购流程的顺利进行、优化…...

分布式日志系统设计

一、分布式日志系统定义 分布式日志系统是一种用于收集、存储和分析大规模分布式系统日志的系统。它可以帮助开发人员和系统管理员实时监控和调试系统,提高系统可靠性和可用性,同时也可以用于日志分析和故障排查。 二、简单设计思路 日志收集&#xff…...

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]补&#xff…...

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 时代的高速发展&#xff0c;我们都习惯了使用 ChatGPT、Claude、Gemini 和其他 AI 工具来询问各种问题&#xff0c;目前大部分的 AI 应用都是通过服务端 API 来实现的。 如果想要在 Web 上使用 AI 功能往往需要靠服务器来处理一些非常大的模型。这在制作一些生成内容的 AI …...

微信小程序调用腾讯地图-并解读API文档 JavaScript SDK和 WebService API

搜索&#xff1a;腾讯位置服务 找到API文档&#xff1a; 入门中第一步&#xff1a;申请开发者密钥key 前往控制台&#xff1a; 创建应用并获取key: 设置key的时候&#xff0c;还需要小程序的APPID。所以要前往微信公众平台中获取小程序的APPID&#xff1a; 限制要求&#xff1a…...

WPF 控件

<div id"content_views" class"htmledit_views"><p id"main-toc"><strong>目录</strong></p> WPF基础控件 按钮控件&#xff1a; Button:按钮 RepeatButton:长按按钮 RadioButton:单选按钮 数据显示控件 Te…...

VScode执行任务

背景 在vscode 中 如果执行命令需要传递进来参数&#xff0c;那么直接通过命令行终端的方式不太方便。通过task 任务的方式来进行启动执行&#xff0c;降低反复输入参数等繁琐工作。 首先可以查看vscode 官方文档 task 启动 crtl shift p .vscode/task.json 示例 执行cp…...

MySQL(数据类型)

目录 1. 数值类型 2. bit类型 3.小数类型 3. 字符串类型 4 日期和时间类型 5. enum和set 1. 数值类型 对标C语言&#xff1a; tinyint->char(1字节)&#xff1a; 有符号&#xff1a;127 ~ 255 无符号&#xff1a;0 ~ -128。 smalli…...

pytorch中的tqdm库

tqdm 是一个 Python 的进度条库&#xff0c;名字来源于阿拉伯语 "taqaddum"&#xff08;意思是“进步”&#xff09;。它以简单易用、高效著称&#xff0c;常用于循环操作中显示进度信息。 基本用法 1. 普通循环 tqdm 可以轻松为 for 循环添加进度条&#xff1a; …...

NoSQL大数据存储技术测试(5)MongoDB的原理和使用

单项选择题 第1题 关于 MongoDB 集群部署下面说法不正确的是&#xff08;&#xff09; 已经不使用主从复制的模式 在实际应用场景中&#xff0c; Mongodb 集群结合复制集和分片机制 MongoDB 支持自动分片&#xff0c; 不支持手动切分 &#xff08;我的答案&#xff09; 每…...

【Golang】Go语言编程思想(六):Channel,第四节,Select

使用 Select 如果此时我们有多个 channel&#xff0c;我们想从多个 channel 接收数据&#xff0c;谁来的快先输出谁&#xff0c;此时应该怎么做呢&#xff1f;答案是使用 select&#xff1a; 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上实现低延时直播?

随着流媒体技术的迅速发展&#xff0c;H5流媒体播放器已成为现代网络视频播放的重要工具。其中&#xff0c;EasyPlayer.js播放器作为一款功能强大的H5播放器&#xff0c;凭借其全面的协议支持、多种解码方式以及跨平台兼容性&#xff0c;赢得了广泛的关注和应用。 那么要在iOS上…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...

PHP 8.5 即将发布:管道操作符、强力调试

前不久&#xff0c;PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5&#xff01;作为 PHP 语言的又一次重要迭代&#xff0c;PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是&#xff0c;借助强大的本地开发环境 ServBay&am…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制

目录 节点的功能承载层&#xff08;GATT/Adv&#xff09;局限性&#xff1a; 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能&#xff0c;如 Configuration …...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …...

上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式

简介 在我的 QT/C 开发工作中&#xff0c;合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式&#xff1a;工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...

恶补电源:1.电桥

一、元器件的选择 搜索并选择电桥&#xff0c;再multisim中选择FWB&#xff0c;就有各种型号的电桥: 电桥是用来干嘛的呢&#xff1f; 它是一个由四个二极管搭成的“桥梁”形状的电路&#xff0c;用来把交流电&#xff08;AC&#xff09;变成直流电&#xff08;DC&#xff09;。…...

Mac flutter环境搭建

一、下载flutter sdk 制作 Android 应用 | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 1、查看mac电脑处理器选择sdk 2、解压 unzip ~/Downloads/flutter_macos_arm64_3.32.2-stable.zip \ -d ~/development/ 3、添加环境变量 命令行打开配置环境变量文件 ope…...