一、概述
原理图如下:
功能:
- BinLog:二进制文件,存储MasterDB(主数据库)中修改数据的内容,存储内容的格式有Statement,Row,Mixed。
- Relay Log:功能作用与Binlog一样,不同点在于当日志内的内容被读取完后,会被删除。
- Binlog dump:将读取Binlog后发送数据给IO线程。
- IO线程:将接收到数据传给RelayLog日志。
- SQL线程:读取RelayLog数据。
流程:
- 从库,配置主库信息,建立连接。
- MasterDB数据库数据发生变化时,会记录在Binlog日志中。
- Binlog dump线程读取Binlog中的内容,将数据发送给IO线程。
- IO线程再将数据存入RelayLog中。
- SQL线程读取RelayLog中的数据并写入从库。
二、安装和配置
1 环境说明
提示:主从库的数据库版本最好保持一致,或者,从库的版本一定要高于主库版本,否则在数据同步过程中可能会出现问题,切记。
这里使用测试环境来记录。
Master(主数据库)环境:
- 系统:Windows 10
- IP:192.168.1.166
- 数据库版本:MySQL 5.7.19
Slave(从数据库)环境:
- 系统:虚拟机 Linux Centos 7
- IP:192.168.1.167
- 数据库版本:MySQL 5.7.30
2 配置主数据库(Master)
1.修改【主数据库】配置文件,Windows 下默认配置文件(my.ini)路径可以通过服务里面查询。
2.修改my.ini配置文件,找到以下2行代码取消注释并修改。
- Master(主数据库)192.168.1.166
[mysqld]
# 启用二进制日志
log-bin=mysql-bin
# 服务唯一ID,默认是1,一般取IP最后一段,如IP:192.168.1.166
server-id=166
3.重启数据库服务。
4.进入到主数据库中,创建从数据库的操作用户账号和权限。
# 1.登录
mysql -uroot -p
# 2.创建用户并授权,用户:backup-user,密码:backup-user,授权IP:192.168.1.167(从数据库IP)
grant replication slave on *.* to "backup_user"@"192.168.1.167" identified by "backup_user";
# 3.刷新权限
flush privileges;
# 4.查询用户表
select user,host from mysql.user;
5.查询 master 状态。
show master status;
- File:mysql-bin.000001
- Position:1348
6.完成后,暂时不要对主数据库进行操作,否则master数据值会改变,接下来配置从数据库。
3配置从数据库(Slave)
1.修改my.ini配置文件(Linux下,执行 vim /etc/my.cnf),添加以下2行代码。
- Slave(从数据库)192.168.1.167
[mysqld]
# 启用二进制日志
log-bin=mysql-bin
# 服务唯一ID,默认是1,一般取IP最后一段,如IP:192.168.1.167
server-id=167
3.重启数据库服务。(systemctl restart mysqld.service)
4.修改从数据库的master链接配置。
- MASTER_HOST="192.168.1.166" # 连接主机地址
- MASTER_USER="backup_user" # 连接主机账号
- MASTER_PASSWORD="backup_user" # 连接主机账号密码
- MASTER_LOG_FILE="mysql-bin.000001" # 日志文件-通过查询主数据库master状态取得
- MASTER_LOG_POS=1348 # 日志文件起始位置-通过查询主数据库master状态取得
# 1.修改master信息
CHANGE MASTER TO MASTER_HOST="192.168.1.166",MASTER_USER="backup_user",MASTER_PASSWORD="backup_user",MASTER_LOG_FILE="mysql-bin.000001",MASTER_LOG_POS=1348;
# 2.开启
start slave;
# 3.查询状态
show slave statusG;
三、测试
四、参考文章