MySQL学习笔记之十六 使用MySQL内建复制功能

来源:互联网 发布:三笠宫崇仁亲王知乎 编辑:程序博客网 时间:2024/05/22 00:46

    MySQL内部复制功能是建立在两个或两个以上服务器之间,通过设定它们之间的主从关系来实现的。其中一个作为主服务器,其它的作为从服务器。本节将详细讨论如何配

置两台服务器,将一个设为主服务器,另一个设为从服务器。并且描述一下在它们之间进行切换的处理过程。

    第一步:配置主服务器

    我们将指定两台服务器。A(IP为192.168.0.1)作为主服务器(简称为主机)。B(IP为192.168.0.2)作为从服务器(简称为从机)。

    1、建立用于备份的帐号

    MySQL的复制功能的实现过程为:从机(B)与主机(A)连接,然后读出主机的二进制更新日志,再将发生的变化合并到自已的数据库中。从机需要一个用户帐号来与主机连接,所

以在主机上创建一个帐号,并只给它FILE权限,如下操作:

    mysql>GRANT FILE ON *.* TO replicate@192.168.0.2 IDENTIFIED BY 'password';

    为了从机能够与主机连接,要在主机上运行'FLUSH PRIVILEGES':

    mysql> 'FLUSH PRIVILEGES;

    2、修改选项文件

    现在我们需要主机数据库的一个快照,并且对主机进行配置,允许生成二进制的更新日志。首先编辑'my.cnf'文件,以便允许二进制更新日志,所以在[mysqld]部分的下面某

个地方增加一行:'log-bin'。在下一次服务器启动时,主机将生成二进制更新日志(名为:<主机名>-bin.<增量序号#>)。

   [mysqld]
    ……
    log-bin

    为了让二进制更新日志有效,关闭MySQL服务程序,然后将主机上的所有数据库目录到另一个目录中,接着重新启动mysqld。

    3、得到服务器数据库的一个快照

    请确定得到了所有数据库,否则在进行复制时,如果一个表在主机上存在但在从机上不存在,将因为出错而退出。现在你已经得到了数据的快照,和一个从建立快照以来的

二进制日志,上面记录着任何对数据库的修改。

    请注意MySQL数据文件(*.MYD,*.MYI和*.frm)是不依赖于文件系统的,但是ISAM表的数据文件是依赖系统的,但是MySQL3.23以上均采用MyISAM表。所以你可以仅仅进行文

件传输,如从Solaris到Linux。只有你处于一个异种的服务器环境,并且仅仅复制不能共享数据表文件时,你将不得不使用mysqldump实用程序或其它的定制脚本来得到数据快

照,但是这种可能性还是很小的。

   第二步、配置从服务器

    1、迁移主机的数据库目录

    停掉从机上的MySQL服务程序,并且把从主机上拷贝来的数据库目录移到从机上的data目录下。请确认将目录的拥有者和属组改变为MySQL用户相应值,并且修改文件模式为

660(只对拥有者和属组可读、可写),目录本身为770(只对拥有者和属组可读、可写和可执行)。

    在从机上启动MySQL服务程序,确认MySQL工作正常。运行几个select查询(不要update或insert查询),看一看在第一步中得到的数据快照是否成功。接着,在测试成功后关

掉MySQL服务程序。

    2、修改选项文件

    在从机上配置需要访问的主机,以便接收主机的更改。所以需要编辑务机上的'my.cnf'文件,在[mysqld]部分中增加下面几行:

    master-host=192.168.0.1   (视你自己IP而定)
    master-user=replicate
    master-password=password

    在启动从机服务程序后,从机服务程序将查看在'my.cnf'文件中所指定的主机,查看是否有改变,并且将这些改变合并到自已的数据库中。从机保持了主机的更新记录,这

些记录是从主机的'master.info'文件中接收下来的。从机线程的状态可以通过sql命令'SHOW SLAVE-STATUS'看到。在从机上处理二进制日志中如果发生错误,都将导致从机线

程的退出,并且在*.err的日志文件中生成一条信息。然后错误可以被改正,接着可以使用sql语句'SLAVE START'来重新启动从机线程。线程将从主机二进制日志处理中断的地

方继续处理。

    至此,在主机上所发生的数据改变应该已经复制到从机上了,要测试它,你可以在主机上插入或更新一条记录,而在从机上选择这条记录。

    现在我们拥有了从A机到B机的这种主-从关系,这样当A机可能当机的时候,允许我们将所有的查询重定向到B机上去,但是当A机恢复时,我们没有办法将发生的改变恢复到

A机中去。为了解决这个问题,我们创建从B机到A机的主-从关系。

    第三步、创建相互的主从关系

    1、从机配置

    首先在B机上的my.cnf文件中,在[mysqld]部分中加入'log-bin',接着重新启动mysqld,然后创建可在它的上面执行复制功能的用户帐号,使用:

    GRANT FILE ON *.* TO replicate@192.168.0.1 IDENTIFIED BY 'password';

    在B机上运行'FLUSH PRIVILEGES'命令,以便装入在加入复制用户后的新的授权表。

    2、主机配置

    接着回到A机上,在它的'my.cnf'中加入下面几行:

    master-host=192.168.0.2  (视你自己IP而定)

    master-user=replicate

    master-password=password

    在重启A机的服务程序之后,现在我们一拥有了在A机与B机之间的相互主-从关系。不管在哪个服务器上更新一条记录或插入一条记录,都将被复制到另一台服务器上。要注

意的是:我不敢确定一个从机合并二进制日志变化的速度有多快,所以用这种方法来进行插入或更新语句的负载平衡可能不是一个好办法。

0 0
原创粉丝点击