首页 > 数据库 >Mysql解决主从慢同步问题(下)

Mysql解决主从慢同步问题(下)

时间:2023-11-18 16:22:46浏览次数:45  
标签:binlog 同步 slave parallel 线程 Mysql commit 主从 group

Mysql解决主从慢同步问题(下)

原创  https://cloud.tencent.com/developer/article/1836131  

三.解决办法

参数

关闭binlog日志可以减轻从库的负载

配置文件添加如下,将不缓冲直接写入,从而加速性能

  1. sync_binlog=0
  2. innodb_flushlog
  3. innodb_flush_log_at_trx_commi=0

多线程

5.6开始MySQL正式支持多线程复制,如下命令查看有多少个线程在同步。 show variables like '%slave_parallel%'

file file

slave_parallel_type 为DATABASE时,基于数据库的并发,也就是每一个数据库都有一个线程去同步,如果只有一个数据库,那其它线程不工作。不同库下的表并发提交时的数据不会相互影响,即slave节点可以用对relay log中不同的库各分配一个类似SQL功能的线程,来重放relay log中主库已经提交的事务,保持数据与主库一致。

为LOGICAL_CLOCK时,则可以一个数据库一个多线程同步。一个组提交的事务都是可以并行回放(配合binary log group commit)。

slave_parallel_workers 代表启动多少个线程用于同步,0就是默认1个。

静态设置:

  1. slave_parallel_type='LOGICAL_CLOCK'
  2. slave_parallel_workers=8

动态设置:

SET GLOBAL slave_parallel_type='LOGICAL_CLOCK';

SET GLOBAL slave_parallel_workers=8;

 

组提交

在5.7中,多线程复制的功能有很很大的改善,支持LOGICAL_CLOCK的方式,在这种方式下,并发执行的多个事务只要能在同一时刻commit,就说明线程之间没有锁冲突,那么Master就可以将这一组的事务标记并在slave机器上安全的进行并发执行。

因此,可以尽可能地使所有线程能在同一时刻提交,这样就能很大程度上提升从机的执行的并行度,从而减少从机的延迟。

有了这个猜想后,很自然想到了人为控制尽可能多地使所有线程在同一时刻提交,其实官方已经给我们提供了类似的参数,参数如下: binlog_group_commit_sync_delay

备注:这个参数会对延迟SQL的响应,对延迟非常敏感的环境需要特别注意,单位是微秒。

由于是监控的DB,主要是load数据,然后进行展示,1秒左右的导入延迟对业务没什么影响,因此将两个参数调整为: SET GLOBAL binlog_group_commit_sync_delay = 1000000; SET GLOBAL binlog_group_commit_sync_no_delay_count = 20;

备注:这两个参数请根据业务特性进行调整,以免造成线上故障。

为了防止导入SQL堆积,设置SET GLOBAL binlog_group_commit_sync_no_delay_count为20,在达到20个事务时不管是否达到了1秒都进行提交,来减少对业务的影响。

标签:binlog,同步,slave,parallel,线程,Mysql,commit,主从,group
From: https://www.cnblogs.com/xiondun/p/17840669.html

相关文章

  • Mysql数据库查询之模糊查询(基础常用)
    1.基础模糊查询1.1查询三字结尾的数据select*fromawhere`name`like'%三'1.2查询张字开头的数据select*fromawhere`name`like'张%' 1.3所以模糊查询查询全部数据.select*fromawhere`name`like'%%'1.4所以多模糊查询,以此类推sele......
  • MySQL索引的创建与设计原则
    索引的创建与设计原则1.索引的声明与使用1.1索引的分类MySQL的索引包括普通索引,唯一性索引,全文索引,单列索引,多列索引和空间索引等...。从功能逻辑上说,索引主要有4种,分别是普通索引,唯一索引,主键索引,全文索引。按照物理实现方式,索引分为2种:聚簇索引和非聚簇索引。按照......
  • MySQL逻辑架构
    逻辑架构扩展(c/s架构和b/s架构)c/s架构,即Client/Server架构:需要安装专用的客户端软件,然后联网请求服务器获取数据。b/s架构,即Brower/Server架构:需要安装浏览器,然后联网请求服务器获取数据c/s架构和b/s架构的区别标准:BS开发更标准一些,而CS需要在不同的系统上执......
  • MySQL 8.0 主从复制
    主从复制1.主从复制概述1.1如何提升数据库的并发能力在实际工作中,我们常常将redis作为缓冲与MySQL配合来使用,当有请求的时候,首先会从缓存中进行查找,如果存在就直接取出。如果不存在再访问数据库,这样就提升了读取的效率,也减少了堆后端数据库的访问压力。redis的缓存架......
  • MySQL的数据目录
    MySQL的数据目录1.MySQL的主要目录结构方式1:通过命令搜索find/-namemysql方式2(推荐):通过查看配置文件获取目录结构vim/etc/my.cnf(重要)-my.cnf配置信息说明[mysqld]bind-address=0.0.0.0port=3306#端口号user=mysql#用户basedir=/usr/local/mysq......
  • MySQL概述安装
    一,数据库概述1.为什么要使用数据库将数据持久化。持久化主要作用:是将内存中的数据库存储在关系型数据库中,本质也就是存储在磁盘文件中。数据库在横向上的存储数据的条数,以及在纵向上存储数据的丰富度,都要好于其他介质。2.数据库与数据库管理系统1.数据库的相关概念......
  • 总结MYSQL中VHARCHAR和TEXT
    前几天在设计表结构时,针对表中的一个字段使用text还是使用varchar是受到了开发同学的挑战。本篇文章对text和varchar的区别做个总结。VHARCHAR和TEXT对比char(n)varchar(n)中括号中n代表字符的个数,并不代表字节个数,所以当使用了中文的时候(utf8)意味着可以插入m个中文,但是实际会占......
  • mysql数据库ERROR 1193 (HY000): Unknown system variable 'validate_password_policy
    一、概况  平时我们安装完数据库,需要进行对应的密码或者密码策略修改,此时需要mysql的密码验证插件。MySQL可能没有这个插件,就需要进行相应的处理。二、问题描述mysql>setglobalvalidate_password_policy=0;ERROR1193(HY000):Unknownsystemvariable'validate_passw......
  • Mysql数据库的四大语言
    1.DDL(数据定义语言):DDL主要用于定义数据库对象,如创建、修改和删除表、索引、视图、序列等对象。常用的DDL命令包括:CREATE、ALTER、DROP、TRUNCATE等 2.DML(数据操作语言) :DML主要用于对数据库中的数据进行操作,如插入、更新和删除数据等。常用的 DML命令包括:INSERT、UPDATE、......
  • 数据库入门:掌握MySQL数据库的五大基本操作,轻松驾驭数据世界!
    对数据库进行查询和修改操作的语言叫做SQL(StructuredQueryLanguage,结构化查询语言)。SQL语言是目前广泛使用的关系数据库标准语言,是各种数据库交互方式的基础。在之前的文章中,我们已经掌握了SQL语言的基本概念以及常用的DDL(数据定义)和DML(数据操作)语句。接下来,我们将探讨如何......