我必须分割一个MySQL数据库。 我想在2台机器上开始12个碎片。 当我想添加一个新的服务器时,移动其中一些的最佳方法是什么?

所有表都是InnoDb。 我宁愿不使用mysqldump,因为碎片大小约为200 GB(约7亿行),这将花费太长时间。

我希望只停止一个小时的MySQL,将数据文件复制到一台新的机器,并开始备份。 但是你不能用InnoDb来做到这一点,因为有些数据在共享表空间中。 即使我已经设置了innodb_file_per_table选项。

这不是一个网站,而是一个定制的应用程序,现在已经有成千上万的使用,所以正常运行时间和性能是非常重要的。 我想我可以将逻辑添加到我的服务器应用程序中,以便逐渐重新平衡/移动碎片。

有没有人有更好的主意?

您可以尝试从http://www.innodb.com/products/hot-backup/features/ innodb hotcopy

有点贵,但似乎你可以得到一个评估副本。

如果在启用innodb_file_per_table选项后创build表,则所有表内容都应存储在表中唯一的文件中。

如果没有…

如果无限制地保存二进制日志不成问题,则可以在加载任何数据之前进行数据转储。 该初始转储可用于引导复制。 那么在您尝试进行切换之前,只需等待复制即可完成。

或者,如果您已经在使用复制进行备份,则可以设置来自备份服务器的复制。 数据库转储过程中备份将处于脱机状态是一个显而易见的惩罚。

第三个选项,你可以随时将MySQL的全部内容复制到一个新的服务器上,启动它,然后删除你没有使用的任何东西。

你可能会把mysqlproxy放在appserv和你的应用程序服务器之间来添加一些逻辑(警告 – 对性能有影响)。

您也可以使用mysql复制 – 但仍然需要从完全备份引导它。

PS。

是看别人提出的mysqlhotcopy。 然后看xtrabackup – 相同,但开源。

Percona xtrabackup似乎做了什么要求。 具体来说,如果设置了inndb_table_per_file,则可以对数据库中的innodb表进行“热”备份,并将它们导入到另一个mysql实例中。

请参阅以下步骤以了解:

http://www.percona.com/docs/wiki/percona-xtrabackup:xtrabackup_manual#restoring_a_single_ibd_file

我们使用我们的dbShards技术提供了一个解决scheme。 我们可以为您现有的数据库提供一组热备份服务器,并提供可靠的复制。 然后,您可以重新安装辅助服务器,而无需closures主(主)数据库,并顺利过渡到其他分片服务器。

欲了解更多信息,你可以阅读有关这个​​: http : //www.dbshards.com