首页 > 数据库 >【MySQL】开启并行复制

【MySQL】开启并行复制

时间:2024-08-16 16:18:10浏览次数:9  
标签:binlog 备库 并行复制 mysql 开启 MySQL slave

一、介绍

在官方的 5.6 版本之前,MySQL 只支持单线程复制,由此在主库并发高、TPS 高时就会出现严重的主备延迟问题。

如果备库执行日志的速度持续低于主库生成日志的速度,那么主从延迟就有可能成了小时级别。而且对于一个压力持续比较高的主库来说,备库很可能永远都追不上主库。

1>MySQL 5.6版本的并行复制策略

官方 MySQL5.6 版本,支持了并行复制,只是支持的粒度是按库并行。这个策略的并行效果,取决于压力模型。如果在主库上有多个 DB,并且各个 DB 的压力均衡,使用这个策略的效果会很好。

优点:实现逻辑简单,binlog格式同时支持statement和row。

缺点:如果热点数据在同一个DB,则没有并行效果了。另外在企业级架构设计时,DBA会用多实例单库(共享存储,多个mysql实例)的模式来分解多个DB的并行压力。

2>MySQL 5.7版本的并行复制策略

在官方的 MySQL5.7 版本中,由参数 slave-parallel-type 来控制并行复制策略:

  1. 配置为 DATABASE,表示使用 MySQL 5.6 版本的按库并行策略;
  2. 配置为 LOGICAL_CLOCK,代表 MySQL 5.7 这个引入的新的并行策略。

原理:redo log组提交(group commit)策略,为同一组一起提交的事务维护一个commit_id,并写入binlog日志。日志传到备库后,coordinator会以轮询的方式将相同commit_id的事务分发到多个worker执行,待一组执行完成后,再取下一批。

MySQL 5.7.22 版本里,MySQL 增加了一个新的并行复制策略,基于 WRITESET 的并行复制。新增了一个参数 binlog-transaction-dependency-tracking,用来控制是否启用这个新策略,默认为commit_order,即上面介绍的这种。

二、开启并行复制

  1.  mysql> stop slave sql_thread; 
  2.  mysql> set global slave_parallel_type='LOGICAL_CLOCK'; 
  3. mysql> set global slave_parallel_workers=8;
  4.  mysql> set global binlog_transaction_dependency_tracking=COMMIT_ORDER;
  5.  mysql> start slave sql_thread;

注意

在MySQL 5.7.22中,默认binlog_transaction_dependency_tracking=commit_order,但是slave_parallel_type=database,此时我们以slave_parallel_type=database为准。

三、优化选项

1>设置并发线程数

slave_parallel_workers

建议把这个值设置为 8~16 之间最好(32 核物理机的情况),毕竟备库还有可能要提供读查询,不能把 CPU 都吃光了。

2>binlog组提交控制

binlog_group_commit_sync_delay 参数,表示延迟多少微秒后才调用 fsync;

binlog_group_commit_sync_no_delay_count 参数,表示累积多少次以后才调用 fsync。

这两个参数是用于故意拉长 binlog 从 write 到 fsync 的时间,以此减少 binlog 的写盘次数。在 MySQL 5.7 的并行复制策略里,它们可以用来制造更多的“同时处于 prepare 阶段的事务”。这样就增加了备库复制的并行度。

也就是说,这两个参数,既可以“故意”让主库提交得慢些,又可以让备库执行得快些。在 MySQL 5.7 处理备库延迟的时候,可以考虑调整这两个参数值,来达到提升备库复制并发度的目的。

 

参考链接:

【MySQL】开启并行复制_mysql开启并行复制-CSDN博客

 

标签:binlog,备库,并行复制,mysql,开启,MySQL,slave
From: https://www.cnblogs.com/linuxmysql/p/18363081

相关文章

  • Node.js在MySQL做增删改查
    constmysql=require('mysql');require('dotenv').config();varconnection=mysql.createConnection({host:'xxx.xx.xxx.187',port:'13306',user:'root',password:process.env.MYSQL_P......
  • JDBC连接MySQL实现增删改查
    准备工作下载安装MySQL下载安装MySQLWorkbench下载mysql-connector-java.jar放在java新建项目新建文档libs下步骤总结1、对数据库进行连接2、写SQL语句3、执行SQL语句4、关闭资源一、JDBC概念JDBC(JavaDataBaseConnectivity)就是Java数据库连接,就是用Java语言来操作......
  • MySQL数据库支持存储引擎
    MySQL数据库支持多种存储引擎,以下是几种常见的存储引擎:###1.**InnoDB**-**特性**:InnoDB是MySQL默认的事务型存储引擎,支持ACID事务、行级锁定和外键约束。-**优点**:提供高可靠性、自动恢复、并发性强,适合高并发的应用场景。-**缺点**:相比其他存储引擎,InnoDB在......
  • mysql8.0 主从架构模式【0到1架构系列】
    前提条件准备3,4,5台虚拟机祼装mysql8.0主从架构常见两种模式“一主多从”和“级联复制”两种,基本都很简单,都是依赖binlog日志文件进行同步,binlog日志会记录DDL和部分DDL语句,进行同步时从库会重新执行这些语句从而实现主从同步。步骤1:配置主/从服务器的server_id,如......
  • 面试mysql
      在MySQL中,索引用于提高查询性能。索引的类型有多种,主要包括以下几种:1.**普通索引(NormalIndex)**:-这是最常见的索引类型,没有任何约束条件。-可以重复,允许`NULL`值。-创建方法:```sqlCREATEINDEXindex_nameONtable_name(column_name);```......
  • MySQL-主主模式集群部署
    目录一、简介什么是双主复制二、服务器规划三、安装MySQL1.下载安装包1.1关闭防火墙2.创建相关目录3.配置环境变量4.初始化数据库A4.1设置环境变量4.2初始化配置文件4.3初始化数据目录4.4配置启动脚本4.5启动MYSQL4.6设置root密码4.7允许root远程登录5.初始化数据库B5.1......
  • MySql介绍
    MySQL是单进程多线程模型,一个SQL语句无法利用多个cpucore去执行,这也就决定了MySQL比较适合OLTP(特点:大量用户访问、逻辑读,索引扫描,返回少量数据,SQL简单)业务系统key、uniquekey、primarykey:https://blog.csdn.net/nanaMasuda/article/details/52543177sql语句执行顺序(8)S......
  • [笔记]关于在linux中通过yum安装mysql错误--因为Centos 7官方镜像不可用的解决方法
     因为Centos7在2024年6月30号停止维护   在执行命令时找不到镜像源, 在下载时出现的错误为,还有一种错误由于没有截图,但是问题一样先通过yumremovemariadb*-y去删除自带的sql包通过命令编辑这个文本文件 vim/etc/yum.repos.d/CentOS-Base.repo这里举......
  • MySQL - [18] mysql中关于cascade的用法
    dropdatabase语句用于删除数据库。但如果想要删除一个数据库并且还要删除所有依赖于该数据库的存储过程、函数等,可以使用cascade关键字。dropdatabasetestcascade的效果相当于以下步骤: 一、查询依赖于该数据库的对象SELECT*FROMinformation_schema.VIEWSWHERETAB......
  • MySql计算用户留存率
    定义,每日新增的10个用户,在次日再次登陆有5个记为留存数5个,次日留存率为50%,在第七日还有3个,记为留存数3个,次日留存率为30%;表1:hlj_user_base_info(用户注册表,记录用户注册信息);关键字段,user_id,device_id,register_time表2:hlj_user_click_url_point(用户点击表,记录用户点击行为);关键字......