Mysql主从复制架构搭建

Mysql主从复制搭建

  • 手动搭建mysql复制架构
    • 配置主库
    • 配置从库
    • 从库连接到主库
    • 检查复制是否开启
  • 同步复制、半同步复制、异步复制选择
  • 基于行复制、基于列复制、混合型选择

手动搭建mysql复制架构

配置主库

  1. 关闭mysql服务

  2. 对主库进行配置
    a. log-bin为开启二进制日志
    b. server-id为服务器ID,主、从库都都需要配置,且值不同
    c. binlog-format复制类型

    Mysql主从复制架构搭建_第1张图片
    c. 创建mysql复制账号
    主库、从库都需要配置复制账号,主库宕机后,复制进度最快的从库可立刻切换为主库
    Mysql主从复制架构搭建_第2张图片

  3. 启动数据库

配置从库

  1. 关闭mysql数据库
  2. 对从库进行配置
    relay-log开启从服务中级日志
    server-id服务器id
    Mysql主从复制架构搭建_第3张图片

从库连接到主库

  1. 参数包含主库ip,配置主库中创建拥有复制权限的账号、密码
    Mysql主从复制架构搭建_第4张图片

检查复制是否开启

  1. Slave_IO_Running和Slave_SQL_Running为从复制的线程,前者负责接收主节点master线程发送的二进制日志,并写入中继日志;后者负责将中继日志中的记录重放到从数据库。
    Mysql主从复制架构搭建_第5张图片
  2. 当前从库复制到从库的二进制日志,及对应日志中的位置。也可以从mysql.master.info中查看相关信息,集群下主库宕机,复制进度最快的从库提升为主库也需要读取该文件。(relay_log_info_repository=table,就会创建mysql.slave_relay_info表来记录同步的位置信息)
    Mysql主从复制架构搭建_第6张图片

同步复制、半同步复制、异步复制选择

  1. 同步复制
    主库有更新操作后,需要等待从库同步完毕,返回给主库成功的信息后,主库才能继续进行更新操作。相较于另外两种复制,安全但主库效率低。
    mysql> SET GLOBAL group_replication_bootstrap_group=ON;
    mysql> START GROUP_REPLICATION;
    mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
  2. 半同步复制(建议)
    a. 主库有更新操作后,需要等待从库将更新操作写入中级日志,返回给主库成功的信息后,主库才能进行更新操作。相对异步复制,安全性较高,主库效率较低。
    b. 主库安装半同步模块,并开启该功能
    主库:
    mysql>INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_master.so’;
    mysql>set global rpl_semi_sync_master_enabled=on;
    从库:
    mysql>INSTALL PLUGIN rpl_semi_sync_slave SONAME ‘semisync_slave.so’;
    mysql>SET GLOBAL rpl_semi_sync_slave_enabled=1;
  3. 异步复制(默认)
    主库有更新操作后,不需要等待从库。相较于其他两种复制方式,安全性较低,主库效率较高。

基于行复制、基于列复制、混合型选择

  1. 基于行复制(statement-based)(默认)
    优点:
    a. 成熟的技术。
    b. 写入日志文件的数据更少(更新或删除影响多行时),即从备份中获取和还原可以更快的完成。
    c. 日志包含任何更改的语句,可用于审核数据库。
    缺点:
    a. INSERT … SELECT需要比row-based复制更多的行级锁。
    b. UPDATE语句必须锁定比row-based复制更多的行。
    c. 对于InnoDB:使用AUTO_INCREMENT的INSERT语句会阻止其他非冲突的INSERT语句。
    d. 执行复杂语句时,statement-based复制的从库需要评估并执行该语句,且出现异常后,可能会逐渐增加受影响行的错误范围。
    e.使用以下基于语句的复制无法正确复制使用以下任何功能的语句:
    LOAD_FILE()
    UUID(), UUID_SHORT()
    USER()
    FOUND_ROWS()
    SYSDATE()(除非主机和从机都通过该–sysdate-is-now 选项启动 )
    GET_LOCK()
    IS_FREE_LOCK()
    IS_USED_LOCK()
    MASTER_POS_WAIT()
    RAND()
    RELEASE_LOCK()
    SLEEP()
    VERSION()
  2. 基于列复制(row-based)
    优点:
    a. 可以复制所有更改,是最安全的复制形式。
    b. 如GRANT,REVOKE和触发器操作,存储的例程(包括存储过程、视图)都使用 row-based复制复制到从服务器。
    c. 对于任何INSERT,UPDATE或DELETE语句,从上都需要更少的行锁,有更高的并发性。
    缺点:
    a. 相对于statement-based,生成更多的日志,尤其在主库一次性更新、删除很多行的情况下。
    b. 生成大型BLOB值的确定性UDF使用row-based复制比使用statement-based复制需要更长的时间。
    c. 无法在从上看到从主站接收和执行的语句(但可以使用mysqlbinlog辅助查看更改了哪些数据)。
    d. row-based复制时,不支持在MyISAM表上进行并发插入。
  3. 混合型(mixed)
    默认使用statement-based模式保存二进制日志,正确复制的操作,会自动切换到row-based
  4. 配置基于行复制
    binlog_format = row

你可能感兴趣的:(主从复制搭建)