本篇笔记记录了MySQL 5.7在CentOS中配置主从同步实现读写分离的过程,在mysqldump过程中记录binlog的File和Position参数,所以也适用于不停机增加从库
MySQL安装请参考如下笔记
CentOS 6.9 yum安装MySQL 5.7
CentOS7源码编译安装nginx+php7.2+mysql5.7并使用systemctl管理
将要配置主从的服务器ip
主:192.168.75.134
从:192.168.75.135
在主库上创建测试库
登录mysql
执行创建数据库语句
创建测试数据表
插入测试数据
查看数据
通过以上操作,我们已经在主库上创建了测试数据
主库配置
配置my.conf
配置含义
log-bin - 启用二进制日志
binlog-format - 日志格式
server-id - 服务器唯一ID,一般取IP最后一段
binlog-do-db - 要同步的数据库名
配置给从库Slave服务器使用的账号
CREATE USER - 创建用户
GRANT REPLICATION - 配置权限
FLUSH PRIVILEGES - 刷新,立即生效
从库配置
配置my.cnf
replicate-do-db - 要同步的数据库名
log-slave-updates - 写入从库binlog
备份主库中要同步的数据库
参数说明:
routines - 导出数据库中的存储过程和函数
single_transaction - 导出开始时设置事务隔离状态,并使用一致性快照开始事务,然后unlock tables;而lock-tables是锁住一张表不能写操作,直到dump完毕。
master-data - 默认等于1,将dump起始(change master to)binlog点和pos值写到结果中,等于2是将change master to写到结果中并注释。
将备份传入从库服务器并恢复
从主库备份到从库设置完成同步是存在间隔的,这个间隔主库可能又产生了新的写操作,所以我们获取binlog的File和Position参数是通过mysqldump生成的备份文件,而不是在主库上执行show master status;的结果,如果这个间隔中可以保证主库不会出现写操作,也可以通过show master status;获取binlog的File和Position参数,以下做个小实验,主库备份以后,再向主库插入两条记录
执行sql
进入从服务器,从库导入备份
查看备份文件中的File和Position参数
我们看到File是mysql-bin.000004,Position是154,进入从库mysql,继续操作
设置同步参数
在进行本步骤之前,请确认主库服务器防火墙开启了3306端口,并且关闭了selinux,否则从库无法从主库获得binlog,同步无法进行
启动从库同步
查看同步是否正确
以上结果中第13,14行,Slave_IO_Running: Yes和Slave_SQL_Running: Yes都是yes,表示同步开启成功
主库再插入一条数据
查看从库数据是否正确
从库查到13条记录,主库备份时product表是10条数据,备份成功后导入从库前主库又插入了2条数据,同步设置成功后主库又插入1条数据,主从数据相同,OK,数据同步成功!