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