如何从我的 EBS 支持的 EC2 实例创建 AMI?

Posted

技术标签:

【中文标题】如何从我的 EBS 支持的 EC2 实例创建 AMI?【英文标题】:How do I create an AMI from my EBS backed EC2 instance? 【发布时间】:2011-09-13 07:35:25 【问题描述】:

我有一个 EBS 支持的 EC2 运行实例。 EBS 存储拥有一个数据库。我想以此创建一个 AMI。有人可以提供指导吗?

    我必须关闭 mysql 吗? 我的 AMI 会尝试连接到同一个 EBS 存储吗?! (灾难) 创建 AMI 会自动为我的 EBS 卷创建快照并创建副本吗? (希望是这个)

感谢您耐心解答一个很长的问题。我承认那里有类似的信息,但没有真正解决可能出现的问题。

这个问题:

http://***.com/questions/4475532/creating-an-ec2-ami-with-an-ebs-backed-instance-is-it-possible

特定于 ElasticFox,我没有使用任何工具(首选命令行)。我也不相信这个问题得到了回答。

这个博客:

http://instantbadger.blogspot.com/2009/09/how-to-create-and-save-ami-image-from.html

虽然对创建 AMI 很有指导意义,但根本没有提到 EBS,我有点担心所有这些数据。

提前致谢!

【问题讨论】:

【参考方案1】:

在回答您的问题之前,我建议您在开始创建映像之前将 MySQL 数据库备份到不存储为快照或 EBS 的文件中。 (当然要测试您是否可以将其恢复到生产系统以外的其他地方。)

我使用:

mysqldump --add-drop-table -u root -p databasename > database.sql

备份和:

mysql -u root -p databasename < database.sql

恢复。

    不,您不必关闭 MySQL,但您必须在创建 AMI 时阻止写入数据库。 不,创建 AMI 还会创建 EBS 卷的新快照(内容与创建映像时的内容相同)。 是的,见 2

更多信息: 我更喜欢在拍摄快照或创建图像时尽可能关闭数据库。也就是说,我绝不是 MySQL 专家,但这里有来自 http://aws.amazon.com/articles/1663?_encoding=UTF8&jiveRedirect=1 的一些指导

使用您在上面设置的密码在实例上启动 MySQL 会话。

mysql -u root -p

在 mysql 会话中,将表刷新到磁盘并获取锁。将文件系统刷新到磁盘并冻结它。不要退出 MySQL 会话,否则您将丢失锁定和快照可能不一致的数据库文件!

FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
SYSTEM sudo xfs_freeze -f /vol

【讨论】:

谢谢。这是我最终将使用的方法。这相当复杂,因为我也设置了复制,但这篇文章给了我起点。一旦我得到完整的答案,我也会将其发布给其他人。【参考方案2】:

亚马逊控制台为您提供了执行此操作的选项。

只需登录到您的 aws 控制台并导航您希望创建 AMI 的实例 ID。

    右键单击实例并单击“停止”。 右键单击实例并单击“创建 AMI”。 输入 AMI 的名称并点击 OK。

就是这样。这将创建一个 AMI。详细信息请参见:http://docs.amazonwebservices.com/AWSEC2/2011-05-15/UserGuide/index.html?Tutorial_CreateImage.html。

【讨论】:

【参考方案3】:

确保您始终按照 steenhulthin 的建议通过转储备份 MySQL。

此链接将帮助您创建新的 EBS 支持的 AMI: http://www.capsunlock.net/2009/12/create-ebs-boot-ami.html

我还建议将您的 MySQL 数据放置到单独的 EBS 卷或更好的 RAID 卷中。

【讨论】:

【参考方案4】:

正如@steenhulthin 提到的,您应该执行 FS Freeze 并将数据库置于 readlock 模式以进行一致的备份,否则您将只有崩溃一致

备份类型 https://asvignesh.in/backup-types-inconsistent-app-consistent-crash-consistent/

您可以使用 SSM 命令执行 FLUSH 并锁定数据库的表,这将为您带来 MySQL 数据的一致性并从控制台创建映像,一旦触发 AMI 创建,您就可以解锁表 确保在后台脚本中运行 Flush 表,一旦关闭会话,MySQL 中的锁将被释放

您可以找到用于锁定和解锁表的脚本,您可以通过 SSM https://asvignesh.in/mysql-app-consistent-backup-using-nimesa/ 调用这些脚本

这是文件系统冻结的脚本 https://asvignesh.in/consistent-backup-of-your-ec2-instance/

【讨论】:

以上是关于如何从我的 EBS 支持的 EC2 实例创建 AMI?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 EC2 运行 Redshift 复制命令

如何使用 Boto 启动 EC2 实例,指定 EBS 的大小?

如何从备份中排除附加到 EC2 实例的某些 EBS 卷?

将 EBS 添加到 Ubuntu EC2 实例

Amazon EC2 - 使用实例存储根设备转换 EBS 根设备

如何将映像传输到 Amazon EBS 卷以供 EC2 使用?