在已有MySQL同步数据基础上添加新的同步数据库

背景

情况如下:机器Master上的MySQL数据库web, webext已经在机器Slave上做了同步(Replicaton),Master上的数据库cs没有做同步,因为Slave上使用

replicate-wild-do-table=web%.%

配置使得Slave上只同步机器Master的以web开头的数据库。
现在要把cs库同步到Slave上,但又不要破坏现有的web, webext同步机制,使Master停机时间最短。

方案

  1. 在Slave上停止同步,使用命令
    mysql> stop slave
  2. 在Master上取到cs库数据的文件和相应的位置。因为cs库使用MyISAM引擎,使用mysqlhotcopy即可。我的mysqlhotcopy是自己改版的,会在复制锁住表的时候打印show master status的结果,补丁如下:
    463a464,465
    >     printf "status %s:%s\n", get_row( $dbh, "show master status" );
    >

    执行命令,记录下输出的mysql binlog的文件名和位置,等会start slave的参数要用到。

    [root@localhost ~] mysqlhotcopy -u user -p xxxx --addtodest --noindices -q cs .
    status mysql-bin.000247:708377668
  3. 将数据复制到Slave上,并且启动Slave
    [root@localhost mysql] tar xzvf cs.tgz
    [root@localhost mysql] cd cs
    [root@localhost cs] myisamchk -rq *
    [root@localhost cs] cd ..
    [root@localhost mysql] chown mysql:mysql -R cs

    进入mysql,执行

    mysql> start slave until MASTER_LOG_FILE = 'mysql-bin.000247' , MASTER_LOG_POS = 708377668;
  4. 等slave执行到拷贝cs库的位置后,停止Slave的数据库服务器,加上复制库的名字,再启动之即可

您也许对以下文章感兴趣