MySQL 主从复制架构搭建及其原理

前言

系统的性能瓶颈一般出现在数据库上,以 mysql 为例,如果存在高并发的写请求,势必会有锁表,锁数据行的情况发生,这时候如果有读请求刚好访问到被锁的数据,那么读请求会阻塞,直到写请求处理完释放锁,系统性能大大下降。

为了提高数据库性能,可以搭建一个简单的 mysql 主从复制集群。使用 mysql 主从复制集群,master 节点用来处理写请求,slave 节点用来处理读请求,当 master 数据变化时,自动将新的数据异步同步到 slave 节点上,实现读写分离。根据读请求的并发量的大小,动态扩展集群里的 slave 节点,实现水平化扩容

本文演示搭建一个 mysql 主从复制集群(一主一从)的基本流程。

启动两台虚拟机,地址分别为 192.168.130.128,192.168.130.129,两台机器都以安装了 mysql 8.0.36

Linux(CentOS7)安装 MySQL8-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/typeracer/article/details/137183709

主库

配置文件

[mysqld]下增加以下内容

# 配置要给Slave同步的数据库
binlog-do-db=test
# 不用给Slave同步的数据库,一般是Mysql自带的数据库就不用给Slave同步了
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
# 自动清理7天前的log文件
expire_logs_days=7
# 启用二进制日志
log-bin=mysql-bin
# 为 0 则是文件系统自行决定什么时候来做同步,或者cache满了之后才同步到磁盘,性能最好,不过风险也最大
# 为 n 每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。
sync_binlog=1
# Master的id,这个要唯一,唯一是值,在主从中唯一
server-id=1
# 主库读写
read_only = 0

启动服务

指定我们自己的配置文件启动 mysql  服务

./mysqld --defaults-file=/usr/local/mysql/my.cnf

 查看 log_bin 是否开启

show variables like '%log_bin%';

查看主库状态

show master status;

File 和 Position 需要记下来,在从库配置连接主库时需要用到。 

创建同步用户

create user 'backup'@'%' IDENTIFIED BY '123456';
grant file on *.* to 'backup'@'%';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'backup'@'%';

从库

配置文件

# 指定要同步master的数据库,不填默认复制全部
# replicate-do-db=test
# 配置从服务器的ID,唯一的
server-id=2
# 从库只读
read_only=1

启动服务

指定我们自己的配置文件启动 mysql  服务

./mysqld --defaults-file=/usr/local/mysql/my.cnf

配置主库连接

  • source_host 主库ip
  • source_port 主库端口
  • source_user 主库创建的同步用户
  • source_password 密码
  • master_log_file 主库的binlog文件
  • mast_log_pos 主库的binlog文件偏移量
  • get_master_public_key 获取主库公钥加密密码
change replication source  to source_host='192.168.130.128',source_port=3306,source_user='backup',source_password='123456',master_log_file='mysql-bin.000001',master_log_pos=157,get_master_public_key=1;

注意

这里是从库配置连接主库使用的用户和密码

由于本文使用的是mysql8,在创建主库的同步用户时没有指定认证方式,所以在配置连接主库时需要加上 get_master_public_key=1 这个参数,否则启用同步后,IO线程会出错误,状态一直为Replica_IO_Running: Connecting,从而同步不了。

如果创建用户时指定了 mysql_native_password 认证方式,则不需要加上此参数。

#指定认证方式
create user 'backup'@'%' identified with 'mysql_native_password' by '123456';

#若没有指定认证方式,MySQL 8.0默认使用caching_sha2_password
# 如果使用caching_sha2_password认证方式,mysql会要求连接开启SSL,或者使用RSA对密码进行加密
# 否则连接可能会报如下的错误:Message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.

create user 'backup'@'%' IDENTIFIED BY '123456';

开启同步

开启同步

start replica;

 其他相关命令

stop replica;

reset replica all;

查看从库状态

show replica status\G;

 

IO 线程和 SQL 线程状态都为 Yes,即主从配置成功。

验证

在主库创建 test 库,在 test 库中创建 test 表,插入一条数据

create database test;

use test;

create table test
(
    id           varchar(30) collate utf8mb4_general_ci default '' not null
        primary key,
    name         varchar(100) collate utf8mb4_general_ci           null,
    parentId     varchar(30) collate utf8mb4_general_ci            null comment '父分类id'
)
    comment 'test';

insert into test values('1','name1',null);

 

从库检查

主从复制原理

plantUML

@startuml
'https://plantuml.com/sequence-diagram

autonumber

database master
participant 主库bin_log
participant 从库IO线程
participant 从库relay_log
participant 从库SQL线程
database slave

master <- slave: 连接主库
master -> 主库bin_log: 数据更新\n写入二进制日志
从库IO线程 -> 主库bin_log: 读取
从库IO线程 -> 从库relay_log: 写入
从库SQL线程 -> 从库relay_log: 读取
从库SQL线程 -> slave: 重放

@enduml

时序图

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/516866.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++ STL迭代器】iterator

文章目录 【 1. 迭代器的属性 】【 2. 不同容器支持的迭代器 】【 3. 迭代器的定义方式 】【 4. 实例 】4.1 定义方式&#xff1a;正向迭代器和反向迭代器4.2 迭代器属性&#xff1a;前向迭代、双向迭代、随机迭代4.2 迭代器的遍历方法4.3 auto关键字 自动指定迭代器定义类型 背…

C语言进阶课程学习记录-第21课 - 宏定义与使用分析

C语言进阶课程学习记录-第21课 - 宏定义与使用分析 宏定义的本质实验-字面量比较宏定义表达式实验-表达式有效性宏的作用域实验-作用域分析内置宏内置宏演示小结 本文学习自狄泰软件学院 唐佐林老师的 C语言进阶课程&#xff0c;图片全部来源于课程PPT&#xff0c;仅用于个人学…

蓝桥杯python组真题练习1

目录 1.单词分析 2.成绩统计 3.门牌制作 4.卡片 5.跑步训练 6.蛇形填数 7.时间显示 1.单词分析 1.单词分析 - 蓝桥云课 (lanqiao.cn) s list(input()) maxx 0 for i in s:num s.count(i)if num>maxx:sm imaxx numif num maxx:if ord(sm)>ord(i):sm i print…

ctypes 封装c语言

一&#xff0c;python与C类型对应关系 最左边一列的ctypes type&#xff0c;以替代C库中的各种类型。 二&#xff0c;不带参数的调用 1&#xff0c;target.c #include <stdio.h>void hello_world(){printf("hello downey!!\r\n"); } 2&#xff0c;执行命令…

基于Java,SSM,html,Vue在线视频播放管理系统网站设计

摘要 基于Java, SSM, HTML, Vue的在线视频播放管理系统网站设计是一个利用Spring框架、SpringMVC、MyBatis&#xff08;SSM&#xff09;和前端技术HTML与Vue.js实现的多功能Web应用。这个系统旨在为用户提供一个便捷、高效的平台来上传、管理和观看视频内容&#xff0c;同时兼…

吴恩达2022机器学习专项课程(一) 5.1 多元特征回归

问题预览/关键词 多元特征回归是什么&#xff1f;多元特征回归的符号多元特征回归的函数是&#xff1f;函数简化版 笔记 1.多元特征回归 从单一的输入特征&#xff08;如房子的大小&#xff09;扩展到多个输入特征&#xff08;如卧室数量、楼层、房龄&#xff09;。 2.多元…

Android java基础_类的继承_android 类继承(2)

运行结果&#xff1a;rootubuntu:/home/topeet/guyilian# javac Ext2.java rootubuntu:/home/topeet/guyilian# java Ext2 10 ustc **子类继承父类的方法和属性都可以进行覆写&#xff0c;我们在子类覆写父类的printInfo方法。**class Person { private int age; public void …

图像拼接——最小割准则提取拼接缝

一、最大流问题与Ford-Fulkerson算法介绍 二、最大流与最小割 显然,我们有对任意一个割,穿过该割的净流量上界就是该割的容量,即不可能超过割的容量。所以网络的最大流必然无法超过网络的最小割。最小割是指割的容量最小,最大流是指网络当中最大的净流量,简单的例子s是水龙…

深入浅出 -- 系统架构之微服务架构选型参考图

技术选型架构图 是一个用于展示项目中所采用的各种技术和组件之间关系的图表。 它通常包括以下几个部分&#xff1a; 1. 项目名称和描述&#xff1a;简要介绍项目的背景和目标。 2. 技术栈&#xff1a;列出项目中使用的主要技术和工具&#xff0c;如编程语言、框架、数据库…

47.函数基本概念和用法

目录 一.什么是函数 二.定义函数 三.函数调用 四.函数的声明 五.函数的分类 六.视频教程 一.什么是函数 每个C语言程序至少有一个函数&#xff0c;即主函数man函数。除了主函数以外&#xff0c;我们也可以自定义其他函数。 函数可以看作是某个功能的封装&#xff0c;而且…

[AutoSar]BSW_Memory_Stack_004 创建一个简单NV block并调试

目录 关键词平台说明背景一、需求二、配置2.1 NvMBlockDescriptors2.2 NvMFeeRef2.3 FeeBlockConfigurations 三、code3.1 声明和定义3.2 调试 关键词 嵌入式、C语言、autosar、OS、BSW 平台说明 项目ValueOSautosar OSautosar厂商vector &#xff0c; EB芯片厂商TI 英飞凌编…

useBlocker 防止页面跳转导致的表单丢失

关于useBlocker The hook allows you to prevent the user from navigating away from the current location, and present them with a custom UI to allow them to confirm the navigation 在react-router的v6版本之前&#xff0c;我们会使用<Prompt />组件来拦截路由的…

9、鸿蒙学习-开发及引用静态共享包(API 9)

HAR&#xff08;Harmony Archive&#xff09;是静态共享包&#xff0c;可以包含代码、C库、资源和配置文件。通过HAR可以实现多个模块或多个工程共享ArkUI组件、资源等相关代码。HAR不同于HAP&#xff0c;不能独立安装运行在设备上&#xff0c;只能作为应用模块的依赖项被引用。…

【C++ STL排序容器】set 集合

文章目录 【 1. 基本原理 】【 2. set 的定义 】2.1 调用默认构造函数&#xff0c;创建空的 set 容器2.2 在创建 set 容器的同时&#xff0c;对其进行初始化2.3 拷贝构造的方式创建2.4 取已有 set 容器中的部分元素&#xff0c;来初始化新 set 容器2.5 修改排序规则的方式创建 …

1.Spring Boot框架整合

Spring Boot项目创建&#xff08;约定大于配置&#xff09; 2.1.3.RELEASE版本示例 idea创建 从官网下载&#xff08;https://start.spring.io/&#xff09;单元测试默认依赖不对时&#xff0c;直接删除即可 Web支持&#xff08;SpringMVC&#xff09; <dependency>&…

Linux操作系统之防火墙

目录 一、防火墙 1、防火墙的类别 2、安装iptables(四表五链&#xff09; ​​​​​​​一、防火墙 1、防火墙的类别 安全产品 杀毒 针对病毒&#xff0c;特征篡改系统中文件杀毒软件针对处理病毒程序 防火墙 针对木马&#xff0c;特征系统窃密 防火墙针对处理木马 防火墙…

基于springboot实现美容院管理系统项目【项目源码+论文说明】

基于springboot实现美容院管理系统演示 摘要 如今的信息时代&#xff0c;对信息的共享性&#xff0c;信息的流通性有着较高要求&#xff0c;因此传统管理方式就不适合。为了让美容院信息的管理模式进行升级&#xff0c;也为了更好的维护美容院信息&#xff0c;美容院管理系统的…

关于第十二届蓝桥杯时间显示题中包和模块的使用解释

题目信息&#xff1a; 解题代码&#xff1a; from datetime import datetime, timedelta # 定义起始时间&#xff0c;即 Unix 时间戳的零点&#xff08;1970年1月1日&#xff09; start datetime(year1970, month1, day1) # 定义时间间隔&#xff0c;这里以毫秒为单位 dela …

用3点结构数列构造4点结构数列

在一个行和列可以自由变换的平面上&#xff0c;3个点只有6种相对位置关系 现在有一个3点的数列就按照1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;6的顺序排列&#xff0c;让这个数列按照431&#xff0c;34-1的方式递推&#xff0c;直到稳定。 前4次迭…

混合专家(MoE)模型示例

文心一言 混合专家&#xff08;Mixture of Experts&#xff0c;MoE&#xff09;模型是一种机器学习架构&#xff0c;它结合了多个专家模型&#xff08;或子模型&#xff09;以处理不同的输入数据或任务。每个专家模型在其特定领域内表现出色&#xff0c;而MoE模型则负责根据输…