主从同步

什么是主从同步

MySQL 主从同步是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。

原理图

image.png

操作原则

主库:负责增删改操作
从库:负责查
主库自动同步数据到从库中,保持数据一致

方式:

  1. Master中开启一个线程,把数据变动记录到一个二进制的日志文件(binary log)中
  2. Slave中开启一个IO线程专门用于读取Master中二进制日志内容,并且把数据写入自己的回放日志文件(relay log)
  3. 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的文件名会随着主服务器的重启发送变化
image.png

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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容