binlog 复制原理

  • MySQL 对于二进制日志 (binlog)的复制类型
    • 基于语句的复制:在Master 上执行的SQL 语句,在Slave 上执行同样的语句。MySQL 默认采用基于语句的复制,效率比较高。一旦发现没法精确复制时,会自动选着基于行的复制。
    • 基于行的复制:把改变的内容复制到Slave,而不是把命令在Slave 上执行一遍。从MySQL5.0 开始支持。
    • 混合类型的复制:默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制

replication 集群原理

image.png
image.png
image.png


配置步骤

主节点

  1. 开启 binlog (important) 、开启 GTID (可选)

    1. # 集群中 server_id 要求不一致
    2. server_id = 100
    3. # 开启 binlog 日志,并且设置 binlog 日志名称
    4. log_bin = mysql_bin
    5. ##主从复制的 格式 mixed,statement,row ,默认格式是 statement
    6. binlog_format=row
    1. gtid_mdoe=on
    2. ## gtid_mode 的前置条件
    3. enforce_gtid_consistency
    4. log_slave_updates=on #表示 slave 将复制事件写进自己的 binlog
    5. master_info_repository=TABLE
    6. relay_log_info_repository=TABLE
  2. 建立同步所用的 db 账号

    1. CREATE USER 'backup'@'%' IDENTIFIED BY "Root666.";
    2. GRANT super,reload,replication slave ON *.* TO 'backup'@'%';
    3. flush privileges;
  3. 使用 mysqldump 时候加上 --master_data=2 参数备份数据库

    1. --master-data 在建立slave数据库的时候会经常用到
      1. 默认值为1,会包含 change master to语句
      2. 设置会2,会注释掉该语句,用于提示复制file和offset
        1. --
        2. -- Position to start replication or point-in-time recovery from
        3. --
        4. -- 如果 --master-data=2,则会注释该语句
        5. CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000090', MASTER_LOG_POS=107;

从节点

  1. 开启 binlog (important) 、开启 GTID (可选)
    1. 和主节点类型,只不过 server_id 需要更改,并且配置 relay_log
  2. 恢复主节点的备份数据库
  3. 使用 change master to 配置链路
    1. 如果没有恢复主节点的备份数据库,直接指定 master_host 等从头开始复制即可
    2. 如果恢复了,就要查看之前 dump 出来的 sql ,另外配置 MASTER_LOG_FILEMASTER_LOG_POS 属性
  4. start slave 启动复制