一、概述
- 定义
① 指将主数据库的DDL和DML操作通过二进制日志传到从数据库中,然后在从数据库上对这些二进制日志重新执行(也称为:重做),从而使得从数据库和主数据库的数据保持同步
② MySQL支持一台主数据库同时向多台从数据库进行复制,从数据库同时也可以作为其他从数据库的主数据库,实现链状复制 - 优点
① 如果主数据库出现问题,可以快速切换到从数据库,保障服务正常可用,继续对外提供服务
② 实现读写分离,增删改的操作在主数据库,查询的操作在从数据库,降低主数据库的访问压力
③ 可以在从数据库中执行备份,以避免备份期间影响主数据库的服务(在进行数据备份时,需要加上全局锁,避免数据不一致的情况;一旦加上全局锁,数据库处于只读状态,其他客户端是无法执行增删改操作的)
二、底层原理
- 原理
① 主数据库中一旦发生增删改以及DDL操作时,会将所有数据的变更写入二进制日志文件中
② 从数据库中一个IO线程发起请求连接主数据库,读取主数据库中的二进制日志文件,读取完后会写入到从数据库中的中继日志文件中
③ 从数据库中另一个SQL线程读取中继日志文件中数据,把中继日志文件中的数据变更反映到从数据库中,从而保证主从数据库的数据一致 - 总结
① 主数据库在事务提交时,会把数据变更记录在二进制日志文件Binlog中
② 从数据库读取主数据库的二进制日志文件Binlog,写入到从数据库的中继日志Relaylog中
③ 从数据库重做中继日志中的事件,将改变反映它自己的数据
三、结构搭建
1. 服务器准备
- 准备好两台服务器,分别安装好MySQL服务,并完成基础的初始化准备工作
2. 主数据库配置
- 修改配置文件/etc/my.cnf
- 重启MySQL服务
- 登录MySQL,创建远程连接账号,并授予主从复制权限
- 通过指令,查看二进制日志坐标
- 举例说明
① File:表示主数据库从哪个二进制日志文件开始推送给从数据库
② Position:表示从哪个位置开始推送日志
③ Binlog_Ignore_DB:表示不需要同步的数据库
3. 从数据库配置
- 修改配置文件/etc/my.cnf
- 重启MySQL服务
- 登录MySQL,设置主数据库配置,将从数据库和主数据库进行关联
- 开启同步操作
- 查看主从同步状态
- 举例说明
4. 测试
- 以上的主从复制是从当前主数据库的二进制日志当前位置往后进行的
- 如果要把主数据库之前的数据同步到从数据库,可以先把主数据库之前的数据导出到SQL脚本中,然后在从数据库中将该SQL脚本执行,保证主从数据库的初始化数据一致,然后在从当前位置往后进行主从复制