-
Notifications
You must be signed in to change notification settings - Fork 2
MySql 复制
-
主库把数据更改记录到二进制日志(Binary log)中。 Mysql按照事务的提交顺序记录事务日志
-
备库将主库上的日志复制到自己的中继日志(Relay log)中。 首先,备库启动一个工作线程(I/O线程),与主库建立普通的客户端连接, 然后,主库启动一个特殊的二进制转储(binlog dump)线程,负责读取主库二进制日志中的事件,如果没有事件可读则进入休眠状态,直到有新的事件才被唤醒。 最后,备库上的IO线程会将接收到的事件记录到中继日志中。
-
备库读取中继日志中的事件,将其重放到备库的数据库上。 备库启动一个SQL线程负责将中继日志中的事件在备库中执行,实现备库的更新。
- 在每台服务器上创建复制账号
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 : 设置密码
- 配置主库和备库 主服务器配置
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
- 通知备库连接到主库并从主库复制数据
-
基于语句的复制(逻辑复制) 主库会记录造成数据更改的语句,当备库读取并重放这些事件时,实际上只是把主库上的这些执行过的SQL重新执行一遍。 优点:实现相当简单、不会使用太多带宽。 缺点:主库上的数据更新除了执行语句外还依赖其他因素、更新必须时串行化,需要更多的锁、有些存储引擎不支持这种方式。
-
基于行的复制 将实际数据记录在二进制文件中 优点:可以正确的复制每一行数据、能够更高效的进行复制 缺点:
发送复制事件到其他备库
log_slave_updates:让备库成为其他服务器的主库。
开启这个参数后,Mysql会将其执行过的事件记录到自己的二进制日志中。
过程如下:
复制过滤器 过滤方式:
- 在主库上过滤记录到二进制日志中的事件
- 在备库上过滤记录到中继日志的事件
备库中通过设置replicate_* 选项,从中继日志中读取事件时进行过滤。
基本原则:
- 一个备库只能有一个主库
- 每个备库必须有一个唯一的服务器ID
- 一个主库可以有多个备库
- 如果打开log_slave_updates参数设置,备库可以作为其他服务器的主库
-
一主多备架构
-
主动-主动模式下的主-主复制
-
主动-被动模式下的主-主复制
优点:服务器配置都一样,方便进行主动和被动切换、可以在不进行服务器关闭的情况下进行服务器的维护,优化表等
- 拥有备库的主-主结构
优点:增加冗余,对于不同地理位置的复制拓扑,能够消除站点单点失效的问题。
-
环形复制
-
主库、分发主库及备库 如果主库下面有许多备库,每一个备库都会在主库上创建一个线程,并执行binlog dump命令。如果主库产生很多事件,主库的负载会显著上升。 分发主库也是主库的一个备库,目的是提取和提供主库的二进制日志。
Mysql BlackHole引擎 任何往引擎中写入的数据都将丢失, 作用:
-
作为主库的分发主库
-
作为binlog日志收集器
-
树或金字塔
优点:减轻主库的负担 缺点:中间层出现问题,都会影响到多个服务器、处理故障会更困难,更复杂。