我启动了一个使用 Amazon Linux 和 Amazon-EBS 作为根卷的 Amazon EC2。我还在这个 EBS 卷上启动了 tomcat7 和 mysql 5.5。
后来我决定从 Amazon Linux 改为 Ubuntu。为此,我需要使用新的 EBS 根卷启动另一个 Amazon EC2 实例。现在我想将旧 EBS 卷中的 tomcat7 和 mysql 复制到新卷中。我在 mysql 中有不想丢失的表和数据以及在 tomcat 上运行的应用程序。怎么办?
我启动了一个使用 Amazon Linux 和 Amazon-EBS 作为根卷的 Amazon EC2。我还在这个 EBS 卷上启动了 tomcat7 和 mysql 5.5。
后来我决定从 Amazon Linux 改为 Ubuntu。为此,我需要使用新的 EBS 根卷启动另一个 Amazon EC2 实例。现在我想将旧 EBS 卷中的 tomcat7 和 mysql 复制到新卷中。我在 mysql 中有不想丢失的表和数据以及在 tomcat 上运行的应用程序。怎么办?
一些想法和建议。
首先,如果您要在数据库上承受任何类型的重大负载,那么在 EBS 支持的卷上运行它可能不是一个好主意,因为 EBS 支持的存储相对于机器的本地/临时存储 (/mnt) 非常慢)。现在显然你不希望数据库数据在临时存储上,所以如果你想在 EC2 上运行 MySQL,你真的无能为力。因此,如果您的基础架构要求允许,我的建议是为您的数据库使用 RDS 实例。
其次,如果这是一个生产应用程序,那么在进行此转换时,您无疑会有一些停机时间。问题是您是否需要绝对减少停机时间。如果是这样,那么您需要了解数据库的大小。转储/加载需要很长时间吗?如果没有,您可能只是让您的新实例启动并运行,并在数据库的旧副本上进行测试,然后在切换时转储并加载当前数据库。
如果它是一个大型数据库,那么也许您可以打开 MySQL 二进制日志记录。然后在已知的二进制日志位置转储数据库。然后在您的新实例上安装此转储。然后,当准备好切换时,您可以在新实例上重放二进制日志以使其处于最新状态。同样,您可以将新实例上的数据库设置为副本,直到切换,此时您将其设为主实例。
如果您不想弄乱二进制日志记录,您甚至可以考虑只使用 rsync 来同步物理数据库文件,但如果您不熟悉处理实际的物理数据库文件,这可能是一个有问题的方法。
就您的应用程序而言,假设它只是一个文件集合,那么迁移应该要简单得多。我不会复制 Tomcat7 安装本身,而只是在 Ubuntu 上安装 Tomcat,然后调整配置以匹配当前。
就切换本身而言,这应该非常简单,并且方法会有所不同,具体取决于您是为服务器使用弹性 IP 还是在负载均衡器后面,