我准备将数据库从一台服务器移到另一台服务器。 为了减less客户端的停机时间,我想知道是否可以打开复制并给它时间完全复制,然后把客户指向新的服务器。
我遇到的问题是,我要移动的服务器有其他客户的现有活动数据库。 而且,我正在转移的服务器还有其他活跃的客户,他们现在不会移动。
这甚至有可能吗? 如果是这样,我该如何configuration我正在从中移动的服务器和我正在移动的服务器?
是的 – 这是可能的MySQL服务器同时是主人和奴隶。
如果您使用innodb作为您的数据存储引擎,并且移动整个数据库,应该可以:
这可能会有所帮助:
PS。 我假设新老服务器之间的数据库没有名称重叠。
当然是。
你应该实现的想法被称为MySQL循环复制。
例如,假设您有以下几点:
这是你可以尝试的东西
STEP01)运行GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO replicator@'%' IDENTIFIED BY 'replpass'; 在DBServer1上
STEP02)在DBServer2上安装相同版本的MySQL(你将在/ var / lib / mysql中有默认的数据)
STEP03)rsync DBServer1:/ var / lib / mysql DBServer2:/ var / lib / mysql
STEP04)重复步骤2,直到两个连续的rsyncs是同一时间,最好<2分钟。
STEP05)禁止你的应用程序写任何东西到数据库
STEP06) service mysql stop在DBServer1上停止
STEP07)在DBServer1上configuration二进制日志logging
将此添加到DBServer1上的/etc/my.cnf
[mysqld] server-id=1 log-bin=mysql-bin
将此添加到DBServer2上的/etc/my.cnf
[mysqld] server-id=2 log-bin=mysql-bin
STEP08)rsync DBServer1:/ var / lib / mysql DBServer2:/ var / lib / mysql(FINAL RSYNC)
STEP09) service mysql start DBServer1(二进制日志将开始得到填充)
STEP10) service mysql start DBServer2(二进制日志将开始填充)
STEP11)将您的应用程序指向DBServer1的db1和db2
STEP12)将您的应用程序指向DBServer2的db3和db4
STEP13)在DBServer1上运行
CHANGE MASTER TO MASTER_HOST='xxx.xx.xx.xxx', MASTER_PORT=3306, MASTER_USER='replicator', MASTER_PASSWORD='replpass', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=PPPP;
STEP14)在DBServer2上运行
CHANGE MASTER TO MASTER_HOST='yyy.yy.yy.yyy', MASTER_PORT=3306, MASTER_USER='replicator', MASTER_PASSWORD='replpass', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=PPPP;
对于步骤13和14
STEP15)运行START SLAVE; 在DBServer1上
STEP16)运行START SLAVE; 在DBServer2上
STEP17)在DBServer1上运行SHOW SLAVE STATUS\G ,直到Seconds_Behind_Master为0
STEP18)在DBServer2上运行SHOW SLAVE STATUS\G ,直到Seconds_Behind_Master为0
这个实现不允许拆分数据库,但也允许数据库的备用服务器。
DBServer1将成为读取和写入db1和db2的地方。 它还提供了db3和db4的备份。
DBServer2将是读写db3和db4的地方。 它还提供了db1和db2的备份。
试一试 !!!