什么是主从同步
MySQL 主从同步是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。
原理图
操作原则
主库:负责增删改操作
从库:负责查
主库自动同步数据到从库中,保持数据一致
方式:
- Master中开启一个线程,把数据变动记录到一个二进制的日志文件(binary log)中
- Slave中开启一个IO线程专门用于读取Master中二进制日志内容,并且把数据写入自己的回放日志文件(relay log)
中 - Slave中SQL线程去读取回放日志(relay log)的内容,把Master中执行的DML进行回放,完成主从同步
注意:主从同步是有一定延迟的,所以无法保证从数据库中马上能读取到主数据库同步的信息,因此只要业务方法中涉及到写的操作,那么该操作必须在主数据库上执行
实现步骤
master与Slave拥有相同的库,且数据一致
1.在Master的配置文件中[mysqld]部分做以下配置,开启binary-log
#配置当前服务器的id
server-id=1
#配置二进制日志文件名
log-bin=master-bin
#配置记录哪个数据库的日志,可以多次配置
binlog-do-db=rbac
然后重启MySQL服务器后,再次登录进去看使用SQL命令查看信息,显示以下内容及表示第一步成功了
-- 查看主服务器状态
show master status;
-- 注意:bin-log的文件名会随着主服务器的重启发送变化
2.在Master数据库中新建一个新用户专门用于做主从同步
-- 可以使用图形化界面来操作
-- 创建用户slave用于主从同步,并授予rbac数据库操作权限
GRANT ALL ON `rbac`.* TO 'slave'@'%' IDENTIFIED BY '1'
-- 授予主从同步权限,该权限是一个全局的权限
GRANT replication slave ON *.* TO 'slave'@'%'
-- 刷新权限
flush privileges
3. 在Slave的配置文件中[mysqld]部分做以下配置,然后重启服务器
#配置从服务器id,必须唯一不能重复
server-id=2
#回放哪个数据库的日志,可以多次配置
replicate-do-db=rbac
linux中重启mysql则需要用到命名: service mysqld restart
linux中mysql配置文件的默认路径是: /etc/my.cnf
4. 登录Slave中执行SQL
-- 设置主服务器的信息
CHANGE MASTER TO MASTER_HOST='master的ip', MASTER_USER='主从操作的账号',
MASTER_PASSWORD='密码',
MASTER_LOG_FILE='bin-log的文件名',
MASTER_LOG_POS=日志长度位置
-- 如果从服务器已经开启了主从同步则需要先关闭,才能执行上面的配置 stop slave
-- 开启主从同步
start slave
-- 查看从服务器状态
show slave status
-- 看到Slave_IO_Running和Slave_SQL_Running都为YES表示成功了
-- 如果有错误,请查看对应的Last_Error_Log