MySQL主从复制

作者: mnjnhuang | 来源:发表于2018-11-25 23:29 被阅读784次

主从复制

AB(主从)复制是一种数据复制技术,是myslq数据库提供的一种高可用、高性能的解决方案
必须先将从数据库数据清空后做完数据同步再进行主从复制


AB复制的工作原理
1.主数据库开启二进制日志,并开启一个与从数据库不同的服务ID号
2.从数据库通过I/O线程向主数据库请求二进制日志
3.从数据库将请求的二进制日志内容写入中继日志中
4.从数据库通过SQl线程读取中继日志中的内容并在数据库中执行相应动作,所有动作执行完后从数据库进入等待状态,等待主数据库执行新的动作
各个线程的作用
1.I/O线程:向主数据库请求二进制日志,并存入中继日志中
2.SQL线程:读取中继日志,并在数据库执行动作
3.binlog dump线程:发送二进制日志文件
AB复制的模式
1.一主一从
2.双主复制
3.一主多从
4.多主一从
5.联级复制

搭建MySQL主从复制

主数据库

# yum install mariadb-server
# vim /etc/my.cnf
    [mysqld]
    log-bin=binlog         // 开启二进制日志
    server-id=1            // 制定服务ID号
# systemctl start mariadb
> grant reolication slave,relication client on *.* to 'ABuser'@'192.168.210.10'
-> identified by '123';    // 授权一个实时复制数据的账号
> show master\G;
*************** 1. row***************
        File: binlog.000003
        Position: 1196
        Binlog_Do_DB: 
        Binlog_Ignore_DB: 

从数据库

# yum install mariadb 
# vim /etc/my.cnf
    [mysqld]
    server-id=2    // 指定和主数据库不一样的服务号
> help change master to;
    CHANGE MASTER TO MASTER_HOST='master2.mycompany.com',
        MASTER_USER='replication',
        MASTER_PASSWORD='bigs3cret',
        MASTER_PORT=3306,
        MASTER_LOG_FILE='master2-bin.001',
        MASTER_LOG_POS=4,
        MASTER_CONNECT_RETRY=10;
> chane master to master_host='192.168.210.5',
-> master_user='ABuser',
-> master_password='123',
-> master_port=3306,
-> master_log_file='binlog.000003',
-> master_log_pos=1196;
> start slave;               // stop slavve关闭
> show slave status\G
    Slave_IO_Running: Yes    // I/O线程状态为Yes
    Slave_SQL_Running: Yes   // SQL线程状态为Yes

主从同步的延迟问题,原因及解决方案

从服务器配置过低导致延迟-->
原因:一般是主节点拥有较大规格的配置,而只读节点却购买了一个最小规格的配置,只读节点进行AB复制胡开启两个线程,分别是IO线程和SQL线程,这两个线程会消耗掉只读节点的IO资源,只读节点IOPS配置不够的时候,会导致只读节点的数据出现延迟
解决办法: 升级从服务器的配置,让只读节点的配置大于或者等于主节点的配置
主库的QPS过高导致只读节点延迟-->
原因:由于只读节点与主库的同步采用的是单线程同步,而主库的压力是并发多线程写入,导致只读节点的数据延迟
解决办法:开启只读节点的并行复制 (mysql5.6.3以后支持多线程复制)
在MySQL5.6中,引入了并发复制,这个并发复制是数据库级别的,一个SQL线程可以处理一个数据库的连续事务,而不用等待其它数据库完成.这个版本的并发复制,可以理解成一个数据库一个SQL线程
与并发有关的参数如下:

slave_parallel_workers                 // worker线程的个数                       
slave-checkpoint-group                 // 隔几个事务做一次                
checkpointslave-checkpoint-period      // 隔多长时间做一次      
checkpointslave-pending-jobs-size-max  // 分发给worker的,处于等待状态的event的大小上限

MySQL5.6基于库级别的并发复制可以解决业务表放在不同的database同步延迟的问题,但是在实际生产中大部分表还是放在同一个库中的,这种情况即使设置slave_parallel_workers,也无法进行并发,在高并发的情况下,依然会造成主从复制延迟.
在MySQL5.7中,引入了新的并发复制方法,基于LOGICAL_CLOCK的并发复制,可以支持在一个database中,并发执行relaylog中的事务, 相同的二进制日志组在master上提交并行应用到slave节点上,没有跨数据库的限制,并且不需要把数据分割到多个数据库
具体配置参数如下:

slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=16
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=ON

在MySQL5.7中,已经解决了主从复制延迟的问题
主库的DDL语句导致只读节点延迟-->
原因1.只读节点与主库的DDL同步是串行进行,备库消耗主库DDL操作同样的执行时间.
解决方法:无,执行之前考虑可能带来的影响
原因2.只读节点上有一个执行时间非常长的查询正在执行,那么这个查询会堵塞来自主库的DDL,读节点表被锁,直到查询结束为止,进而导致了只读节点的数据延迟
解决方法:把只读节点的查询操作杀掉,不使用"select *"命令查询

相关文章

  • MySQL如何配置主从复制,如何修复主从复制出现的异常?

    MySQL如何配置主从复制,如何修复主从复制出现的异常? 一、什么是Mysql主从复制 MySQL主从复制是其最重...

  • MySQL-主从复制&读写分离

    零、本文纲要 一、MySQL主从复制 主从复制 主从复制过程 配置主从复制 二、MySQL读写分离 读写分离 Sh...

  • Mysql 主从复制

    Mysql 主从复制 MySQL Replication 主从复制(也称 AB 复制)允许将来自一个MySQL数据...

  • 主从复制 & MHA

    一,mysql主从复制 (1)场景一(主从复制 _ 全新环境下) (2)场景二(主从复制 _ mysql已经使用一...

  • mysql主从复制

    构建MySQL主从复制 MySQL的主从复制和mysql的读写分离两者有着紧密联系,数据的读写分离实在主从复制的基...

  • Spring Data JPA 使用主从数据源

    Mysql 配置主从复制 参考:Mysql主从复制-半同步复制[https://www.jianshu.com/p...

  • MySQL集群篇

    1 集群之主从复制 1.1 主从复制概述 MySQL主从复制也可以称为MySQL主从同步,它是构建数据库高可用集群...

  • 深度探索MySQL主从复制原理

    概要 MySQL Replication (MySQL 主从复制) 是什么? 为什么要主从复制以及它的实现原理是什...

  • 【转】MySQL 8.0复制改进

    1 - MySQL主从复制模型 我们从最基本的主从复制模型开始说起,下图是最经典的MySQL主从复制架构图: My...

  • mysql主从代理

    mysql主从复制+读写分离 环境: mysql主:193.168.1.1 mysql从:193.168.1.2 ...

网友评论

    本文标题:MySQL主从复制

    本文链接:https://www.haomeiwen.com/subject/mkqifqtx.html