可能使MySQL服务器既主和奴隶?

我准备将数据库从一台服务器移到另一台服务器。 为了减less客户端的停机时间,我想知道是否可以打开复制并给它时间完全复制,然后把客户指向新的服务器。

我遇到的问题是,我要移动的服务器有其他客户的现有活动数据库。 而且,我正在转移的服务器还有其他活跃的客户,他们现在不会移动。

这甚至有可能吗? 如果是这样,我该如何configuration我正在从中移动的服务器和我正在移动的服务器?

是的 – 这是可能的MySQL服务器同时是主人和奴隶。

如果您使用innodb作为您的数据存储引擎,并且移动整个数据库,应该可以:

  • 在旧服务器上启用binlogging
  • 从旧服务器获取完全一致的转储,而不会阻止任何正在进行的stream量
  • 将该转储转移到新的服务器,在那里恢复
  • 打开所选数据库的复制,并允许新服务器“赶上”生产机器
  • 一旦服务器需要数据库同步 – 切换stream量

这可能会有所帮助:

  • pt-table-checksum来检查你的表/数据库是否同步
  • 一旦你拥有新服务器上的大部分数据, pt-table-sync就可以解决潜在的问题
  • mysql的复制过滤 – 无论是在主[旧服务器] – binlog – 做的数据库或奴隶[新的服务器]方 – replicate-do-db
  • mysqldump的主数据和单个事务选项用于初始数据转储

PS。 我假设新老服务器之间的数据库没有名称重叠。

当然是。

你应该实现的想法被称为MySQL循环复制。

例如,假设您有以下几点:

  • DBServer1有数据库db1,db2,db3,db4
  • 您想要将db3和db4移动到DBServer2
  • 您想限制读取和写入DBServer1上的db1和db2
  • 您想限制读取和写入DBServer2上的db3和db4

这是你可以尝试的东西

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

  • xxx.xx.xx.xxx是DBServer2的专用IP地址
  • yyy.yy.yy.yyy是DBServer1的私有IP地址
  • PPPP是任何二进制日志的初始位置
    • 对于MySQL 5.5,PPPP是107
    • 对于MySQL 5.1,PPPP是106
    • 在MySQL 5.1之前,PPPP是98

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的备份。

试一试 !!!