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

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

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

我希望只停止 mysql 一个小时,将数据文件复制到新机器,然后重新启动。但是您无法使用 InnoDb 执行此操作,因为某些数据位于共享表空间中。即使我设置了 innodb_file_per_table 选项。

这不是一个网站,而是一个自定义应用程序,目前有数万人在使用,因此正常运行时间和性能非常重要。我想我可以在服务器应用程序中添加逻辑,以允许逐步重新平衡/移动分片。

还有人有更好的主意吗?

答案1

您可以尝试使用 innodb hotcopyhttp://www.innodb.com/products/hot-backup/features/

有点贵,但似乎你可以得到一份评估版。

答案2

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

失败的话...

如果无限期地保留二进制日志不是问题,您可以在加载任何数据之前进行数据转储。初始转储可用于引导复制。然后,只需等待复制跟上进度,然后尝试进行切换即可。

或者,如果您已经使用复制进行备份,则可以改为从备份服务器设置复制。明显的缺点是备份在数据库转储期间将处于离线状态。

第三个选择是,您可以随时将 MySQL 的全部内容复制到新服务器,启动它,然后删除您不使用的任何内容。

答案3

你可以放mysql代理在 appserv 和您的应用程序服务器之间添加一些逻辑[警告 - 它会影响性能]。

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

附言:

是看到别人提出mysqlhotcopy。然后看看备份- 相同但开源。

答案4

我们确实使用 dbShards 技术提供了解决方案。我们可以为您现有的数据库提供一组热辅助服务器,并提供可靠的复制。然后,您可以在不关闭主(主)数据库的情况下对辅助服务器进行重新分片,并顺利过渡到其他分片服务器。

欲了解更多信息,您可以阅读:http://www.dbshards.com

相关内容