MySQL复制扩展功能

news/2025/2/4 0:58:51/

一、mysql的并行复制

        1.默认情况下slave中使用的是sql单线程回放,在master时多用户读写,如果使用单线程回放会造成主从复制延迟,针对这个问题一般采用mysql多线程回放来解决。

        在slave中设定:

                vim /etc/my.cnf

                [mysqld]

                datadir=/data/mysql

                socket=/data/mysql/mysql.sock

                server-id=2

                gtid-mode=ON                        表示开启全局事务标识,表示每个事务都会有一个全局唯一的标识,可以跨多个mysql实例使用,它可以用来跟踪事务的执行情况无需依赖于传统的二进制日志的位置进行复制

                enforce-gtid-consistency=ON

                slave-parallel-type=LOGICAL_CLOCK        基于组提交

                slave-parallel-workers=16                        开启线程数量

                relay_log_info_repository=TABLE                回放日志在表中记录

                relay_log_recovery=ON                        日志回放恢复功能开启

                mysql组提交是一个性能优化特性,允许在一个事务日志同步操作中将多个事务日志一起写入,可以减少io的次数,提高数据库整体性能

        2.三个线程:

                主从复制的原理是基于binlog进行数据同步,在这个过程中基于3个线程来操作,一个主库线程两个从库线程。

                二进制日志转储线程是一个主库线程,当从库线程连接的时候,主库线程可以将二进制日志发送给从库,一般情况下当主库读取事件时会在binlog上加锁,读取完之后会将锁释放掉

                从库io线程连接到主库,向主库发送请求更新binlog,这是从库的io线程就可以读取到主库的二进制日志转储线程发送的binlog更新部分并且拷贝到本地的中继日志

                从库sql线程会读取从库中的中继日志,并且执行日志中的事件,将从库中的数据和主库保持同步

        3.复制的三步骤:

                master将写操作记录到二进制日志中

                slave将master的binlog events拷贝到它的中继日志

                slave重做中继日志中的事件,将改变应用到自己的数据库中。重启后从接入点开始复制

        4.架构缺陷:

                master更新完成后直接发送二进制日志到slave,但slave是否真正保存数据,master端不会检测

                master端直接保存二进制日志到磁盘

二、半同步模式

        1.原理:

                用户线程写入完成master中的dump会把日志推送到slave端

                slave中的io线程接收后保存到中继日志

                保存完成后slave向master端返回ack

                在未接收slave的ack时master端不做提交而是一直等待

        2.gtid模式

                

               在gtid激活之后,当master出现问题后,slave2和master的数据最接近会作为新的mastser,slave1指向新的master,它不会去检测新的master的pos id,只需要继续读取自己的gtid_next。

                设置gtid:分别在master端和slave端开启gtid模式

                vim  /etc/my.cnf

                [mysqld]

                datadir=/data/mysql

                socket=/data/mysql/mysql.sock

                server-id=1

                log-bin=mysql-bin

                gtid_mode=ON

                enforce-gtid-consistency=ON

                symbolic-links=0

                

        2.启用半同步模式:

                vim  /etc/my.cnf

                [mysqld]

                datadir=/data/mysql

                socket=/data/mysql/mysql.sock

                server-id=1

                log-bin=mysql-bin

                gtid_mode=ON

                enforce-gtid-consistency=ON

                symbolic-links=0

                rpl_semi_sync_master_enabled=1                开启半同步

        进入到mysql的视图下

                install  plugin  rpl_semi_sync_master  SONAME 'semisync_master.so';

         打开半同步功能:

                set  global  rpl_semi_sync_master_enabled=1;

          同理,在slave端也分别开启半同步模式

                        但在slave端,需要重启io线程半同步才生效

                        stop  slave  io_thread;        start  slave  IO_THRED;

四、mysql高可用之组复制

        1.mysql  group  replication(mgr)对属于同一组的服务器自动进行协调,对于要提交的事务组成员必须就全局事务序列中给定事务的顺序达成一致

                

                

        将多个节点组成一个复制组,在执行读写事务的时候需要通过一致性协议层的同意,也就是读写事务想要进行提交,必须经过组里大多数节点的同意才可以提交,但针对只读事务不需要经过组内同意,直接提交即可。

        2.single-primary mode(单写或单主模式)

                组内只有一个节点可读可写,其他节点只可读

        3.多写或多组模式(multi-primary  mode)

                组内的所有机器都是primary节点,同时可以进行读写操作

        4.实现mysql组复制

                在上述的一般配置代码上加入以下配置信息:

                        plugin_load_add='group_replication.so'        加载组复制插件

                        group_replication_group_name="fhdfh udhfudfhudhfbdufdufudb"

                        group_replication_start_on_boot=off        在server启动的时候不自动启动组复制

                        group_replication_local_address="172.25.254.10:3306"        指定插件接受其他成员的信息端口

                        group_replication_group_seeds="172.25.254.10:3306,172.25.254.20:3306"        本地地址允许访问成员列表

                        group_replication_ip_whitelist="172.25.254.0/24,127.0.0.1/8"        主机白名单

                        group_replication_bootstrap_group=off        不随系统自启而启动,仅在初始成员主机中手动启动

                        group_replication_single_primary_mode=OFF        使用多主模式

                        group_replication_enforce_update_everywhere_checks=ON        组同步有任何改变检测更新

                        group_replication_allow_local_disjoint_gtids_join=1        放弃自己的信息以master事件为主

                配置sql

                

                

                        


http://www.ppmy.cn/news/1569099.html

相关文章

基于SpringBoot的美食烹饪互动平台的设计与实现(源码+SQL脚本+LW+部署讲解等)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

DeepSeek-R1 论文解读 —— 强化学习大语言模型新时代来临?

近年来,人工智能(AI)领域发展迅猛,大语言模型(LLMs)为通用人工智能(AGI)的发展开辟了道路。OpenAI 的 o1 模型表现非凡,它引入的创新性推理时缩放技术显著提升了推理能力…

解锁计算机视觉算法:从理论到代码实战

目录 计算机视觉:开启智能视觉新时代 核心算法大揭秘 传统计算机视觉算法 深度学习驱动的计算机视觉算法 基于深度学习框架的算法实现 应用领域大放送 自动驾驶 医疗影像分析 安防与监控 其他领域 挑战与应对策略 数据质量问题 计算资源需求 模型鲁棒…

lstm代码解析1.2

在使用 LSTM(长短期记忆网络)进行训练时,model.fit 方法的输入数据 X 和目标数据 y 的形状要求是不同的。具体来说: 1. 输入数据 X 的形状 LSTM 层期望输入数据 X 是三维张量,形状为 (samples, timesteps, features)…

MVANet——小范围内捕捉高分辨率细节而在大范围内不损失精度的强大的背景消除模型

一、概述 前景提取(背景去除)是现代计算机视觉的关键挑战之一,在各种应用中的重要性与日俱增。在图像编辑和视频制作中有效地去除背景不仅能提高美学价值,还能提高工作流程的效率。在要求精确度的领域,如医学图像分析…

力扣第149场双周赛

文章目录 题目总览题目详解找到字符串中合法的相邻数字重新安排会议得到最多空余时间I3440.重新安排会议得到最多空余时间II 第149场双周赛 题目总览 找到字符串中合法的相邻数字 重新安排会议得到最多空余时间I 重新安排会议得到最多空余时间II 变成好标题的最少代价 题目…

使用TensorFlow实现逻辑回归:从训练到模型保存与加载

1. 引入必要的库 首先,需要引入必要的库。TensorFlow用于构建和训练模型,pandas和numpy用于数据处理,matplotlib用于结果的可视化。 import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layer…

浅谈 JSON 对象和 FormData 相互转换,打通前端与后端的通信血脉_json转formdata

formData 请求头: formData 负荷: 通过上面的几张图我们就能大概明白了,前端传的都是二进制数据,两者的 content-type 是不同的,json 我们已经序列化好了,而 formdata 还是需要进行处理。 formdata 的两种格…