当前位置: 首页 > 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上…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...