为什么要使用Replication?

1. 通过热备份(hot standby)来避免灾难

2. 生成报表

如果在数据库服务器上生成报表,很有可能会影响到整个服务器的性能。如果使用大量的后台调度来生成报表,那么很有必要使用额外的服务器来执行这些工作。可以在某一时点停止复制(replication),然后在不影响到猪服务器性能的情况下来运行大的查询。

3. 调试和审计

复制(replication)的基本步骤

  1. 配置一个服务器为master(主控端)
  2. 配置一个服务器为slave(从属端)
  3. 将slave连接到master

配置master

要使得一个服务器成为master,需确保它有活动的二进制日志(active binary log)和唯一的服务器ID(server ID)。

活动的二进制日志用于记录master上的所有的改变,以便它们可以被复制到slave上。服务器ID用于区分不同的服务器。

要创建二进制日志和服务器ID,需要停止服务器然后将log-bin、log-bin-index、server-id选项添加到my.cnf(Linux环境下)或my.ini(Windows下)配置文件中。例如:

 
  
  1. [mysqld] 
  2. #other settings goes here 
  3. #replication settings 
  4. log-bin = master-bin 
  5. log-bin-index = master-bin.index 
  6. server-id = 1 

严格来说,log-bin属性可以不设置。其默认值为hostname-bin。Hostname即我们的主机名。如果管理员修改了主机名,那么记录文件将会同时改变名称。

当修改完配置信息后,重启下MySQL服务,以便这些配置信息可以生效。

Slave初始化一个正常的到master的连接后,然后请求master发送所有的变更。此时master上需要一个账号来进行这些操作:

 
  
  1. master>CREATE USER repl_user; 
  2. Query OK, 0 rows affected (0.00 sec) 
  3. master> GRANT REPLICATION SLAVE ON *.* 
  4. -> TO repl_user IDENTIFIED BY 'xyzzy'
  5. Query OK, 0 rows affected (0.00 sec) 

REPLICATION SLAVE权限除了能从master上获取二进制日志文件外没有什么特别之处。为replication创建一个独立的用户是一个好主意,这样做当你不需要replication时,可以安全的移除该用户。

配置slave

在配置完master后,必须配置slave。跟master相同,你也需要为slave分配一个唯一的服务器ID。同时,需要考虑增加relay log和relay log索引文件名。例如:

 
  
  1. [mysqld] 
  2. #other settings goes here 
  3. #replication settings 
  4. server-id = 2 
  5. relay-log-index = slave-relay-bin.index 
  6. relay-log = slave-relay-bin 

修改完相应文件(Linux下为my.cnf、windows下为my.ini),重启slave服务器。

将slave连接到master

现在可以完成设置一个基本的replication的最后的步骤:指导slave连接到master上以便它可以知道从何处复制。要进行此步骤需要知道如下信息:

1. Master所在的主机名
2. Master的端口号
3. Master上带有replication slave权限的用户名
4. Master上该用户的密码

本机环境如下:

 
  
  1. slave>CHANGE MASTER TO 
  2. ->MASTER_HOST = ‘127.0.0.1’, 
  3. ->MASTER_PORT = 3306, 
  4. ->MASTER_USER = ’repl_user’, 
  5. ->MASTER_PASSWORD = ‘xyzzy’; 
  6.  
  7. slave>START SLAVE; 

到目前为止,一个简单的replication就搭建起来了,你可以在master数据库上进行一些操作,如创建数据库、创建表、插入记录等,然后到slave所在的机器进行查看,相应的数据应该会同步到slave上。