复制是一个允许提供相同数据库的多个数据库服务器的技术。这样,可以载入共享并提高系统可靠性;如果有一个服务器停止运行,其他服务器还能继续工作。复制一旦设置成功。它也可以用作备份。
其基本思想就是拥有一个主服务器,并且为其添加几个从服务器。每一个从服务器都镜像了主服务器。当最初设置了从服务器后,可以在任何时候在主服务器上复制所有数据的快照。这样,从服务器将请求来自主服务器的更新。主服务器将传输通过其二进制日志而执行的查询细节,而从服务器可以重新将这些查询应用于它们的数据。
使用这种设置的常规方法是在主服务器应用写查询,而对从服务器应用读查询。这是通过应用程序逻辑来实现的。更复杂的架构也是可能的,例如具有多个主服务器,但是我们只介绍典型示例的设置。
我们必须意识到,通常从服务器的数据都没有主服务器的数据新。这发生在任何分布式数据库中。
要开始设置主服务器和从服务器架构,必须确认主服务器上启用了二进制日志记录。启用二进制日志记录将在附录A详细介绍。
必须在主服务器和从服务器上编辑my.ini或my.cnf文件。在主服务器上,需要如下所示的设置:
[mysqld]
log-bin
server-id=1
首要的操作就是开启二进制日志记录(这样就已经启动了二进制日志;如果没有,现在添加该语句)。第二个设置是为主服务器分配一个唯一的ID。每一个从服务器都需要一个ID,因此必须在每一个从服务器的my.ini/my.cnf文件中添加类似行。请确认,ID号是唯一的。例如,第一个从服务器可以设置为server-id=2;而下一个可以为server-id=3;等。
12.7.1 设置主服务器
在主服务器上,必须为从服务器创建一个用来连接主服务器的用户。从服务器的这个特殊的权限级别称作复制从服务器。根据如何策划实现初始数据传输的不同,可以临时授予某些额外的权限。
在大多数情况下,可以使用数据库快照来传输数据,而在这个例子中,只需要特殊的复制从服务器器权限。如果决定使用LOAD DATA FROM MASTER命令来传输数据(在下一节学习此内容),该用户还需要RELOAD、SUPER和SELECT权限,但是只用作初始的设置。根据第9章介绍的最少权限原则,在系统设置成功并运行起来后,必须撤销额外的权限。
在主服务器上创建一个用户。我们可以定义任意的用户名并且给定任意的密码,但是必须记住所选择的用户名和密码。在我们的例子中,用户名为rep_slave:
grant replication slave
on*.*
to'rep_slave'@'%'identified by'password';
很明显,我们必须修改该密码。