background image

MySQL 的复制 

 
一、概述
复制解决的基本问题是让一台服务器的数据与其他服务器保持同步。

MySQL 支持两种

复制方式:基于行的复制和基于语句的复制。

基于语句的复制(也称为逻辑复制)早在

MySQL3.23 版本中就存在,而基于行的复制

方式在

5.1 版本中才被加进来。

新版本的服务器可以作为老版本服务器的备库,但反过来是不可行的。
通过复制可以将读操作指向备库来获得更好的读扩展,但对于写操作,除非设计得当,

否则并不适合通过复制来扩展写操作。在一主多备的架构中,写操作会被执行多次,这时候
这个系统的性能取决于写入最慢的那部分。

复制比较常见的用途:
数据分布、负载均衡、备份、高可用性和故障切换、

MySQL 升级测试。

复制的三个步骤:
1、在主库上把数据更改记录到二进制日志(Binary Log)中。
2、备库将主库上的日志复制到自己的中继日志(Relay Log)中。
3、备库读取中继日志中的时间,将其重放到备库数据上。
MySQL 的复制架构有一个弱点:在主库上并发运行的查询在备库只能串行化执行,因

为只有一个

SQL 线程来重放中继日志中的事件。

 
二、配置复制
 为 MySQL 服务器配置复制非常简单,分为以下几步:
在每台服务器上创建复制账号。

(严格来讲不是必须每台,但推荐这么做)。

配置主库和备库。
通知备库连接到主库并从主库复制数据。
1、创建复制账号
给复制线程特殊权限
Mysql

 

代码

mysql>  GRANT  REPLICATION  SLAVE,  REPLICATION  CLIENT  ON  *.*  TO 

repl@'192.168.0.%' IDENTIFIED BY 'p4ssword';  

mysql>  GRANT  REPLICATION  SLAVE,  REPLICATION  CLIENT  ON  *.*  TO 

repl@'192.168.0.%' IDENTIFIED BY 'p4ssword';

 我们在主库和备库创建该账号。
注意:
把账号限制在本地网络,因为这是一个特权账号。
REPLICATION SLAVE 是全局权限,不能限定某个数据库或表。过滤备份用其他方法,

后面会介绍到。

实 际 上 主 库 只 需 要

REPLICATION  SLAVE 权 限 , 并 且 不 是 每 一 端 服 务 器 都 需 要

REPLICATION CLIENT 权限,这么配置时方便出现问题时,主备互换角色。

2、配置主库和备库
主库:

my.cnf 文件中增加或修改如下内容:

log_bin=mysql-bin
server_id=10