将数据库添加到使用 binlog_do_db 的现有复制?

BT6*_*643 3 mysql replication mysql-5.5

我们有两台MySQL 5.5服务器在运行Ubuntu 12.04

我们成功地将 3 个数据库从server01复制到server02,但需要添加第 4 个(新)数据库。

我们my.cnf对主人有:

binlog_do_db = database1
binlog_do_db = database2
binlog_do_db = database3
Run Code Online (Sandbox Code Playgroud)

如何将第四个数据库添加到复制?我读过的所有内容都表明我们需要重新启动 MySQL,有什么办法可以解决这个问题吗?还是我们只需要安排它?

这是我们迄今为止的计划,但我希望有一种不需要重新启动的方法。我是否过于复杂了?




GRANT REPLICATION SLAVE ON *.* TO 'slaveusr'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
QUIT;
Run Code Online (Sandbox Code Playgroud)

编辑 my.cnf 以包含新数据库:

binlog_do_db = database4
Run Code Online (Sandbox Code Playgroud)

重启 MySQL

  service mysql restart
Run Code Online (Sandbox Code Playgroud)

将初始副本的数据库备份到从服务器

USE database4;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
Run Code Online (Sandbox Code Playgroud)

在新的外壳中

mysqldump -u root -ppassword --opt database4 > database4.sql
scp database4.sql root@server02:/home
Run Code Online (Sandbox Code Playgroud)

在旧壳中

UNLOCK TABLES; 
QUIT;
Run Code Online (Sandbox Code Playgroud)

更改从服务器上的 my.cnf

replicate-do-db = database4
Run Code Online (Sandbox Code Playgroud)

重启 MySQL

service mysql restart
Run Code Online (Sandbox Code Playgroud)

恢复转储的数据库

mysql -u root -ppassword database4 < database4.sql 
Run Code Online (Sandbox Code Playgroud)

IGG*_*GGt 7

更改 binlog-do-db 恐怕需要重新启动。

就我个人而言,我会从 Masters my.cnf 中删除所有 binlog-db-db,只需在从属设备上使用 replica-do-db 来过滤您想要处理的内容。

这样你以后可以在master上添加更多的数据库而无需重启。


如果我理解正确,您正在尝试将新数据库 (database4) 复制到已经有 3 个数据库复制的从属设备上(这些都在同一个 MySQL 数据库上)。

那么问题是在您执行此操作时需要暂停复制。

我将使用的过程是:

1) MASTER - 用 new 重启 master binlog-do-db| 删除所有binlog-do-db以开始使用 database4 的数据填充二进制日志

2) SLAVE - 检查从属数据库的复制是否是最新的 ( SHOW SLAVE STATUS> Seconds_Behind_master)。如果不等到它

3) MASTER -FLUSH TABLES WITH READ LOCK;阻止新数据进入 master

4) SLAVE - 检查复制是否完全赶上并且没有数据正在复制(read_master_log_pos并且exec_master_log_pos应该相同并且没有改变(在show slave status;))

5) SLAVE -STOP SLAVE;一旦您很快解锁主服务器,就停止将任何数据复制到数据库中。

6)运行MySQLDUMP--single-transaction选项

7) 一旦 MySQLDUMP 开始运行,解锁主数据库,UNLOCK TABLES;这样你的系统就可以继续读写主数据库,希望将停机时间降到最低

注意 MySQLDUMP 可能会在它根据您的系统工作时锁定 database4 模式

8) 一旦 MySQLDUMP 完成,将其导入从数据库

9) 检查新导入的database4 看起来是否正确

10)重启slave数据库,replicate-do-db=database4边走边添加my.cnf文件

一旦它重新启动,它应该从它停止的地方继续复制,但包括 database4。