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

MySQL复制扩展功能

一、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.kler.cn/a/529179.html

相关文章:

  • 十分钟快速上手 markdown
  • LeetCode:494.目标和
  • 芯片AI深度实战:给vim装上AI
  • 【Docker】ubuntu中 Docker的使用
  • [创业之路-270]:《向流程设计要效率》-2-企业流程架构模式 POS架构(规划、业务运营、支撑)、OES架构(业务运营、使能、支撑)
  • c++ 定点 new 及其汇编解释
  • AI基本概念之——张量(Tensor)
  • 遗传算法与深度学习实战(33)——WGAN详解与实现
  • 小巧免费,本地视频播放器MPC-BE
  • 理解 InnoDB 如何处理崩溃恢复
  • Java小白入门教程:Object
  • 一个 windows 自动语音识别案列
  • 我用Ai学Android Jetpack Compose之LazyColumn
  • 【LLM-agent】(task2)用llama-index搭建AI Agent
  • Miniconda 安装及使用
  • 创建Springboot项目的五种方式
  • 能靠定制拓扑化学,解锁磁性嵌入化合物的异质结构?
  • Memcached数据库简单学习与使用
  • c语言进阶(简单的函数 数组 指针 预处理 文件 结构体)
  • 安全防护前置
  • Kafka中文文档
  • Theorem
  • LeetCode LCR180文件组合
  • 进阶数据结构——双向循环链表
  • 8.攻防世界Web_php_wrong_nginx_config
  • pandas中的str使用方法