MySQL Slave 设置有大量数据库

MySQL Slave 设置有大量数据库

我发现我需要在具有 4000 多个数据库的 MySQL 服务器和它的第一个从属服务器之间建立主从复制。

数据库目前正在处理生产工作负载,并且必须在不导致停机的情况下启动复制。

是否有任何工具或久经考验的程序可以做到这一点?(以最少的锁定转储所有数据并完全准确地保存主 binlog 位置?)

到目前为止,我一直在思考的是在保存 binlog 位置的同时逐个转储数据库,将数据加载到从属服务器然后使用 replicate-do-db 启动从属服务器并加载迄今为止的所有数据库,一旦从属服务器赶上就停止复制,冲洗并重复...但我不能 100%确定这是最好的方法。

谢谢你,Rares

后来编辑:表主要是 MyISAM,但也有少数 InnoDB。

答案1

您的 MySQL 数据库是纯 InnoDB 还是也包含 MyISAM?如果是 InnoDB,您可以使用带有选项“--single-transaction --master-data”的 mysqldump 为您的复制从属服务器获取可靠的转储。

如果您不幸拥有 MyISAM,为了获得可靠的转储,它必须锁定服务器上的所有事务,直到整个备份完成为止..并且该时间取决于数据库大小(以 GB 为单位)和总行数的组合。

答案2

我创建了一个 bash 脚本,它可以从主服务器逐步转储数据库并将它们加载到从服务器中,同时跟踪 replicate_do_db。

谢谢多马斯·米图萨斯为了这个帖子这使我可以即时更新 replicate_do_db。我还从转储的 sql 中提取 master_log_file 和 master_log_pos 以发出 START SLAVE UNTIL 和 SELECT MASTER_POS_WAIT,以便在正确的时间点加载数据。

稍后编辑:为了使其按预期工作,基于行的复制是必须的。

相关内容