我们想从在ec2示例上使用mysql转向rds和设置复制。好像没什么大不了的,对吧?嗯,我有30000个数据库要移动(不要问)。虽然设置复制似乎很有效,但将30000个数据库放入rds的过程是一个巨大的难题;这需要很长时间,而且几乎总是会发生一些事情。
夜间备份大约需要两个小时。我最终得到了一个多gbsql转储文件。当我尝试还原它时,几乎总是会出错:rds示例的内存不够大,崩溃了,localhost耗尽了交换空间,网络连接出现问题。无论什么!我确实让它恢复了一次;iirc花了23个小时(30k mysql数据库是大量的文件io)。
所以今天,我决定用我的垃圾车。它在大约两个小时内为数据库生成了30000个模式文件,然后突然,源mysql进入不间断睡眠状态,我失去了客户端连接,strace显示它仍在尝试读取文件,mydumper进程崩溃。我重新启动了整个过程,只是检查了状态;出于某种原因,mysqld重启了2.5个小时。
下面是我的想法,我想听听你的意见:我编写了两个python脚本:firstscript.py将在单个数据库上运行mydumper,更新一个状态表,打包sql,将其放入aws sqs队列,重复操作,直到找不到更多的数据库;secondscript.py从队列中读取数据,运行sql并更新状态表,一直重复,直到找不到更多消息为止。
我想这行得通。你…吗?我不确定的主要问题是:我可以简单地在后台通过ctrl-z-ing运行多个secondscript.py吗?
还是有人有更好的方法移动30000个数据库?
1条答案
按热度按时间brqmpdu11#
我不会使用mysqldump或mydumper进行逻辑转储。加载生成的sql格式转储花费的时间太长。
相反,使用percona xtrabackup对ec2示例进行物理备份,并将备份上传到s3。然后从s3恢复到rds示例,在rds示例上设置复制到ec2示例,让它跟上。
将mysql物理备份恢复到rds的功能于2017年11月发布。
另请参见:
https://www.percona.com/blog/2018/04/02/migrate-to-amazon-rds-with-percona-xtrabackup/
https://aws.amazon.com/about-aws/whats-new/2017/11/easily-restore-an-amazon-rds-mysql-database-from-your-mysql-backup/
你应该用一个比你的30k数据库小的示例来试一下,这样你就可以练习一下这些步骤了。请参阅我上面链接的percona博客中的步骤。