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)
更改 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。