• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    详细分析MySQL主从复制

    前言:

    在MySQL中,主从架构应该是最基础、最常用的一种架构了。后续的读写分离、多活高可用架构等大多都依赖于主从复制。主从复制也是我们学习MySQL过程中必不可少的一部分,关于主从复制的文章有很多,笔者也来凑凑热闹,写写这方面的内容吧,同时分享下自己的经验和方法。

    1.主从复制简介及原理

    主从复制(也称 AB 复制)是指一台服务器充当主数据库服务器,另一台或多台服务器充当从数据库服务器,主服务器中的数据自动复制到从服务器之中。对于多级复制,数据库服务器既可充当主机,也可充当从机。MySQL默认采用异步复制方式。

    主从复制的过程及原理可以总结如下:

    1. master服务器将数据的改变记录二进制binlog日志,当master上的数据发生改变时,则将其改变写入二进制日志中。
    2. slave服务器会在一定时间间隔内对master二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/OThread请求master二进制事件。
    3. 同时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至从节点本地的中继日志中,从节点将启动SQL线程从中继日志中读取二进制日志,在本地重放,使得其数据和主节点的保持一致。

     2.基于二进制文件位置配置主从复制

    基于二进制文件位置的主从复制又可以称为传统复制,即从服务器依赖于主服务器的binlog文件位置,当主库发生数据变更时,binlog pos位点会增长,从库会感应到变化来完成同步。

    配置主从复制,我们首先要准备至少两台MySQL实例,一台充当主服务器、一台充当从服务器。由于主从复制依赖于binlog,所以主库必须开启binlog,且主从要配置不同的server_id,下面具体展示下配置过程:

    2.1 确认主从库配置参数

    MySQL主从服务器建议有如下配置,可以先确认下,如果未配置,则需要修改配置文件然后重启。

    # 主库参数配置 要有以下参数
    vim /etc/my.cnf 
    [mysqld] 
    log-bin = binlog //启用二进制日志
    server-id = 137 //服务器唯一ID,默认值是1,一般设置为IP地址的最后一段数字
    binlog_format = row //bilog设置为row模式 防止复制出错
    
    # 从库建议配置以下参数
    vim /etc/my.cnf 
    [mysqld] 
    relay-log = relay-bin
    server-id = 138

    2.2 确定主库二进制位置,创建同步账号

    若主从库都是刚刚初始化完成,且主库无操作时,从库可不用同步主库的数据,直接确定主库的binlog位置即可。

    # 查看主库binlog文件位置
    show master status;
    
    # 主库创建同步账号
    create user 'repl'@'%' identified by '123456';
    grant replication slave on *.* to 'repl'@'%';

    若主库已经运行了一段时间,有业务数据在,而从库刚刚初始化完成,此时则需要备份主库的数据,然后导入从库,使得主从数据一致。

    # 主库创建同步账号
    create user 'repl'@'%' identified by '123456';
    grant replication slave on *.* to 'repl'@'%';
    
    # 全备主库数据
    mysqldump -uroot -pxxxx -A -R -E --single-transaction --master-data=2 > all_db.sql
    
    # 从库端恢复
    mysql -uroot -pxxxx  all_db.sql
    
    # 从备份文件中可以找到主库的binlog位置

    2.3 进入从库,开启主从复制

    找到主库二进制文件位置且完成主从数据一致后,我们就可以正式开启主从复制了。

    # 进入从库MySQL命令行 执行change master语句连接主库
    # 二进制文件名及pos位置由上面步骤获得
    CHANGE MASTER TO MASTER_HOST='MySQL主服务器IP地址',
     MASTER_PORT=3306,
     MASTER_USER='repl',
     MASTER_PASSWORD='123456',
     MASTER_LOG_FILE='binlog.000002',
     MASTER_LOG_POS=154;
     
    # 开启主从复制 并坚持状态
    start slave;
    show slave status \G //查看slave状态 确保Slave_IO_Running: Yes Slave_SQL_Running: Yes

    3.基于GTID的主从复制

    GTID是MySQL 5.6的新特性,其全称是Global Transaction Identifier,可简化MySQL的主从切换以及Failover。GTID用于在binlog中唯一标识一个事务。当事务提交时,MySQL Server在写binlog的时候,会先写一个特殊的Binlog Event,类型为GTID_Event,指定下一个事务的GTID,然后再写事务的Binlog。

    在基于GTID的复制中,首先从服务器会告诉主服务器已经在从服务器执行完了哪些事务的GTID值,然后主库会有把所有没有在从库上执行的事务,发送到从库上进行执行,并且使用GTID的复制可以保证同一个事务只在指定的从库上执行一次,这样可以避免由于偏移量的问题造成数据不一致。也就是说,无论是级联情况,还是一主多从的情况,都可以通过GTID自动找位置,而无需像之前那样通过File_name和File_position找主库binlog位置了。

    基于GTID的主从复制与上面基于二进制文件位置的主从复制搭建步骤类似,同样简单展示下搭建过程:

    3.1 确认主从库配置,开启GTID

    # 主库参数配置 要有以下参数
    vim /etc/my.cnf 
    [mysqld] 
    server-id = 137
    log-bin = binlog 
    binlog_format = row 
    gtid-mode = ON //开启gtid模式
    enforce-gtid-consistency = ON //强制gtid一致性,用于保证启动gitd后事务的安全 
    
    # 从库建议配置以下参数
    vim /etc/my.cnf 
    [mysqld] 
    server-id = 138
    log-bin = binlog 
    binlog_format = row 
    gtid-mode = ON 
    enforce-gtid-consistency = ON 
    relay-log = relay-bin

    3.2 创建同步账号,保持主从库数据一致

    若主库刚初始化完成或者主库端保留有全部二进制文件,则从库无需手动同步数据。否则需要手动同步数据使得主从一致。

    # 主库创建同步账号
    create user 'repl'@'%' identified by '123456';
    grant replication slave on *.* to 'repl'@'%';
    
    # 若主库刚初始化或保留有完整二进制文件 则无需执行下面步骤
    # 全备主库数据
    mysqldump -uroot -pxxxx -A -R -E --single-transaction > all_db.sql
    # 从库端恢复
    mysql -uroot -pxxxx  all_db.sql

    3.3 进入从库,开启主从复制

    # 进入从库MySQL命令行 执行change master语句连接主库
    CHANGE MASTER TO MASTER_HOST='MySQL主服务器IP地址',
     MASTER_PORT=3306,
     MASTER_USER='repl',
     MASTER_PASSWORD='123456',
     MASTER_AUTO_POSITION = 1;
     
    # 开启主从复制 并坚持状态
    start slave;
    show slave status \G

     4.一些经验及建议

    在日常学习及工作过程中,主从复制方面也积累了一些经验,下面简单分享几点,希望各位少踩坑。

    总结:

    本文介绍了主从复制的原理及搭建过程,其实关于主从复制的内容还有很多,需要不断的学习。这里推荐大家使用GTID模式来搭建主从复制,关于后面分享的几点经验,也是自己日常积累的,希望对你有所帮助。写作不易,觉得还不错的话,请顺手转发分享下哦。

    以上就是详细分析MySQL主从复制的详细内容,更多关于MySQL主从复制的资料请关注脚本之家其它相关文章!

    您可能感兴趣的文章:
    • mysql主从复制配置过程
    • 全面解读MySQL主从复制,从原理到安装配置
    • MySQL 4种常用的主从复制架构
    • 关于MySQL主从复制的几种复制方式总结
    • MySQL 主从复制原理与实践详解
    • Windows下MySQL主从复制的配置方法
    • Mysql主从复制作用和工作原理详解
    • MySQL数据库主从复制延时超长的解决方法
    • MYSQL 完全备份、主从复制、级联复制、半同步小结
    • 深入理解MySQL主从复制线程状态转变
    • MySQL主从复制延迟原因以及解决方案
    上一篇:MySQL百万级数据量分页查询方法及其优化建议
    下一篇:利用MySQL空间函数实现位置打卡的完整步骤
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    详细分析MySQL主从复制 详细,分析,MySQL,主从,复制,