所有表都是 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
答案4
我们确实使用 dbShards 技术提供了解决方案。我们可以为您现有的数据库提供一组热辅助服务器,并提供可靠的复制。然后,您可以在不关闭主(主)数据库的情况下对辅助服务器进行重新分片,并顺利过渡到其他分片服务器。
欲了解更多信息,您可以阅读:http://www.dbshards.com