mysql 支持单向、双向、链式级联、异步复制

5.5版本之后加入 半同步复制;
5.6版本之后加入 GTID复制;
5.7版本之后加入 多源复制、并行复制、loss-less复制

主库(master)、从库(slave)

生产中 建议使用 GTID + rows 复制模式

1、常见几种主从复制架构

主从复制,可以实现实时灾备、分担主库压力,做读写分离,提供查询服务。

也可以利用从库来实现 mysql 的 平滑升级。

2、主从复制原理

主从复制过程中工作的 线程(thread)。

主服务器(master)有一个工作线程 I/O dump thread。

从服务器 有 两个工作线程,一个是 I/O thread,另一个是SQL thread。

主库 把外界接收的SQL请求记录到自己的 二进制日志(binary log) 中,从库的 I/O thread 去请求主库的 binary log 日志, 并将得到的 binary log 日志 写入 自己的 中继日志 (Relay log)文件中。

然后 在从库上 重做 应用 中继日志 (Relay log)中的 SQL 语句。主库 通过 I/O dump thread 给 从库I/O thread 传送 二进制日志(binary log)。

原理图如下:

3、重点参数说明

  • log-bin:搭建主从复制,必须开启二进制日志。

  • server-id:MySQL 服务器ID,同一主从结构中的唯一标识(主从服务器上该参数不能一致)

  • server-uuid:MySQL5.6新增,数据库启动过程中自动生成,每台机器的server-uuid是不一样的,uuid存放在数据目录的auto.cnf 文件下。

  • read only:设置从库为只读状态,避免在从库上进行写入操作。注:对超级权限(super)账号无效。mysql5.7之后新增了super_read_only参数,开启此参数,超管也无权进行写入操作。

  • binlog_format:二进制日志的格式,必须使用row格式。

  • log_slave_updates:作用是 将 主服务器(master) 上获取数据变更的信息 记录到 从服务器(slave)的二进制日志文件中。

  • binlog_error_action:改参数用于控制当不能写binlog文件时,MySQL server 将会怎样。(MySQL5.7后新增)
    可选值:

    • ABORT_SERVER:表示mysql server 在写binlog遇到磁盘满 或 文件系统不可写时退出;
    • IGNORE_ERROR:表示如遇到binlog无法写入时,mysql server会在 错误日志中记录错误,并且同时强制关闭 binlog 功能(这样会影响获取主库binlog,从而导致主从不一致)

    mysql5.7.7之后,默认使用 binlog_error_action=ABORT_SERVER



gtid:全局事务ID,是一个已提交事务的编号,是一个全局唯一的编号(mysql5.6之后在主从复制类型上新增了GTID复制)

作者:admin  创建时间:2022-12-27 16:56
最后编辑:admin  更新时间:2023-01-06 14:11