美文网首页
MySQL复制-要求及配置

MySQL复制-要求及配置

作者: 月饮沙 | 来源:发表于2020-04-10 17:07 被阅读0次

    本文问题

    1. 简要描述一下复制是如何实现的?
    2. 复制需要在主库和从库上进行哪些配置?
    3. 复制使用了哪些线程?这些线程的作用是什么?如何查看这些线程?
    4. 如何配置延迟复制?

    复制过程

    1. 主库在二进制日志中记录数据库中的所有更改。
    2. 连接到主库的每个从库都请求复制主库的二进制日志,将其写入到自身的中继日志中,并根据从库上的过滤规则执行二进制日志中的事件。
    3. 从库会存储并维护复制相关的信息

    复制要求和简单配置过程

    • 主库必须启用二进制日志
    [mysqld]
    log_bin=mysql-bin
    
    • 主库和从库必须具有不同的ID标识server_id
    [mysqld]
    server-id=1
    
    • 从库上要有一个能够连接到主库的账号,该账号需要具有REPLICATION SLAVE权限
    # 由于复制使用的账号会存储在从库的文件/表中 建议为复制单独创建一个账号
    mysql> CREATE USER 'repl'@'%.example.com' IDENTIFIED BY 'password';
    mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%.example.com';
    
    • 从库需要使用CHANGE MASTER TO语句设置相关主库的信息
    mysql> CHANGE MASTER TO
         >     MASTER_HOST = host,
         >     MASTER_PORT = port,
         >     MASTER_USER = user,
         >     MASTER_PASSWORD = password,;
    
    • 从库需要设置主库的二进制日志文件和位置或者使用GTID进行自动定位
    # 使用二进制日志文件和位点进行复制
    mysql> CHANGE MASTER TO
        ->     MASTER_LOG_FILE='recorded_log_file_name',
        ->     MASTER_LOG_POS=recorded_log_position;
    # 使用GTID自动定位
    mysql> CHANGE MASTER TO
        ->     MASTER_AUTO_POSITION = 1;
    

    复制的启停和控制

    可以独立控制IO THREADSQL THREAD的启停

    启动复制

    START SLAVE
    START SLAVE IO_THREAD
    START SLAVE SQL_THREAD
    

    停止复制

    STOP SLAVE
    STOP SLAVE IO_THREAD
    STOP SLAVE SQL_THREAD
    

    跳过事务

    STOP SLAVE
    SET GLOBAL SLAVE_SQL_SKIP_COUNTER=1
    START SLAVE
    

    复制线程

    复制功能是通过三个线程实现的,对于每套主从,都有一个线程在主库上,两个线程在从库上。

    主库

    • Binlog dump thread
      在从库连接后,主库创建一个线程来发送二进制日志中的内容。
      这个线程可以在SHOW PROCESSLIST中查看到,CommandBinlog Dump

    从库

    从库使用两个线程,将对主库数据的读取和更新拆分为两个独立的任务。

    • Slave I/O thread
      在从库上执行START SLAVE时,从库会创建一个I/O线程来连接主库并请求主库发送二进制日志中的记录
      从库的I/O线程读取主库Binlog Dump线程发送的记录并且将他们复制到本地的中继日志文件中。
      这个线程可以在SHOW SLAVE STATUS中查看,Slave_IO_running
    • Slave SQL thread
      从库创建一个SQL线程来读取I/O线程写入的中继日志并执行其中包含的事件
      这个线程可以在SHOW SLAVE STATUS中查看,Slave_SQL_running

    延迟复制

    MySQL支持延迟复制,可以强制要求从库落后于主库多久后再执行事务。配置方式:
    CHANGE MASTER TO MASTER_DELAY=N N为延迟的秒数

    查看延迟相关信息

    • SHOW SLAVE STATUS
      • SQL_Delay 一个非负整数,表示从库必须落后于主库的秒数
      • SQL_Remaining_Delay 当等待延迟时,显示剩余等待延迟的秒数,其他时间,值为NULL
      • Slave_SQL_Running_State IO线程状态,当等待延迟时,状态为Slave_SQL_Running_State is Waiting until MASTER_DELAY seconds after master executed event

    问题答案

    1. 简要描述一下复制是如何实现的?
      主库把事务记录到日志中,从库获取日志并进行应用
    2. 复制需要在主库和从库上进行哪些配置?
      主库必须启用log_bin,主库和从库的server_id必须不同。
      如果要使用GTID自动定位,主库还需要设置gtid_mode=on,enforce_gtid_consistency=on,当数据库版本为5.6时,从库必须设置log_binlog_slave_updates
    3. 复制使用了哪些线程?这些线程的作用是什么?如何查看这些线程?
      主库binlog dump线程:发送二进制日志
      从库IO线程:获取主库发送的日志并记录到中继日志中
      从库SQL线程:应用中继日志中的事务
    4. 如何配置延迟复制?
      CHANGE MASTER TO MASTER_DELAY=N

    相关文章

      网友评论

          本文标题:MySQL复制-要求及配置

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