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 更新时间:2023-01-06 14:11