Skip to content

MySql 复制

litter-fish edited this page Dec 13, 2019 · 2 revisions

复制的工作

复制的工作

  1. 主库把数据更改记录到二进制日志(Binary log)中。 Mysql按照事务的提交顺序记录事务日志

  2. 备库将主库上的日志复制到自己的中继日志(Relay log)中。 首先,备库启动一个工作线程(I/O线程),与主库建立普通的客户端连接, 然后,主库启动一个特殊的二进制转储(binlog dump)线程,负责读取主库二进制日志中的事件,如果没有事件可读则进入休眠状态,直到有新的事件才被唤醒。 最后,备库上的IO线程会将接收到的事件记录到中继日志中。

  3. 备库读取中继日志中的事件,将其重放到备库的数据库上。 备库启动一个SQL线程负责将中继日志中的事件在备库中执行,实现备库的更新。

配置复制

  1. 在每台服务器上创建复制账号
grant all privileges on *.* to ‘su’@'192.168.206.186' identified by '12345'
参数说明:
       grant : 授权
       replication slave ,all privileges 操作动作   select update delete
       on 作用范围
       *: 库
       *: 表
       to:指定账号
       user1,backuser:账号
       @ 接 访问来源
       192.168.134 允许从192.168.1.%用backuser连接  
       identified by : 设置密码
  1. 配置主库和备库 主服务器配置
server-id = 1            # 区别服务器的标识符,只要唯一就行,默认1
log-bin = mysql-bin        # 手动指定二进制日志的存储路径和名称,

从服务器配置

log_bin           = mysql-bin  可以不开启
server_id         = 12  // 必须的
relay_log         = mysql-relay-bin // 指定中继日志的存储位置和名称
log_slave_updates = 1  // slave将复制事件写进自己的二进制日志
read_only         = 1
  1. 通知备库连接到主库并从主库复制数据

复制的原理

  1. 基于语句的复制(逻辑复制) 主库会记录造成数据更改的语句,当备库读取并重放这些事件时,实际上只是把主库上的这些执行过的SQL重新执行一遍。 优点:实现相当简单、不会使用太多带宽。 缺点:主库上的数据更新除了执行语句外还依赖其他因素、更新必须时串行化,需要更多的锁、有些存储引擎不支持这种方式。

  2. 基于行的复制 将实际数据记录在二进制文件中 优点:可以正确的复制每一行数据、能够更高效的进行复制 缺点:

发送复制事件到其他备库 log_slave_updates:让备库成为其他服务器的主库。 开启这个参数后,Mysql会将其执行过的事件记录到自己的二进制日志中。 过程如下:

复制过滤器 过滤方式:

  1. 在主库上过滤记录到二进制日志中的事件
  2. 在备库上过滤记录到中继日志的事件 备库中通过设置replicate_* 选项,从中继日志中读取事件时进行过滤。

复制拓扑

基本原则:

  • 一个备库只能有一个主库
  • 每个备库必须有一个唯一的服务器ID
  • 一个主库可以有多个备库
  • 如果打开log_slave_updates参数设置,备库可以作为其他服务器的主库
  1. 一主多备架构

  2. 主动-主动模式下的主-主复制

  3. 主动-被动模式下的主-主复制

优点:服务器配置都一样,方便进行主动和被动切换、可以在不进行服务器关闭的情况下进行服务器的维护,优化表等

  1. 拥有备库的主-主结构

优点:增加冗余,对于不同地理位置的复制拓扑,能够消除站点单点失效的问题。

  1. 环形复制

  2. 主库、分发主库及备库 如果主库下面有许多备库,每一个备库都会在主库上创建一个线程,并执行binlog dump命令。如果主库产生很多事件,主库的负载会显著上升。 分发主库也是主库的一个备库,目的是提取和提供主库的二进制日志。

Mysql BlackHole引擎 任何往引擎中写入的数据都将丢失, 作用:

  1. 作为主库的分发主库

  2. 作为binlog日志收集器

  3. 树或金字塔 优点:减轻主库的负担 缺点:中间层出现问题,都会影响到多个服务器、处理故障会更困难,更复杂。

Clone this wiki locally