EBS AMI 和持久性上的 MySQL

标签 mysql amazon-web-services

我正在尝试在 EBS 支持的 AMI 上安装 MySQL。

EBS 支持的 AMI 是指存储在 EBS 而不是 S3 中的 AMI。

  • 我选择了一个由 Amazon/Ubuntu 提供的现有 EBS 支持的 Ubuntu AMI,我启动它,对其进行自定义并创建一个新的 AMI,这特定于我的需求。应该使用什么过程来创建这个新的 AMI?我应该小心任何公钥和 .SSH 文件夹吗(我这样说是因为我试过了但无法登录)

  • 一旦我有了新的 AMI ID,原始 EBS 的快照就会添加到卷列表中,这是新的自定义 AMI 所在的位置。从 AMI 列表中,我现在可以启动这个新的 AMI。 当我启动新创建的 AMI(自定义)时,快照大小(根卷大小)与原始 AMI 的根大小相同。我想增加这个尺寸以获得更多的存储空间。我该怎么做?

  • 一旦我有足够的存储空间,我想在此 AMI 上安装 MySQL。在此之后,我是否应该重新创建另一个新的 AMI 来保存这个新安装?还是会自动保留在根 EBS 卷中。

最佳答案

以下是与您所描述的问题和情况相关的一些要点:

  • 如果您正在创建供其他人或公众使用的 AMI,那么您需要非常小心接触磁盘的任何信息。其他人通常可以从已删除的文件中恢复信息。这是我写的一篇文章,其中涉及:http://alestic.com/2011/06/ec2-ami-security

  • 如果您创建的 AMI 仅供您自己使用(而非供其他人使用),那么您就不必对敏感信息那么小心。请记住,您永远不能将曾经包含敏感信息的私有(private)实例变成公共(public) AMI。

  • 您应该能够使用 ec2-create-image 命令或 AWS 控制台中的等效命令从正在运行的实例创建您的私有(private) AMI。新的 AMI 应该支持传递新的 ssh key ,而且(正如您提到的)可能还允许您使用在创建 AMI 时放置的任何 ssh key 进行 ssh。

  • EBS 启动 AMI 存储在 EBS 快照中。 EBS 快照在后台存储在 S3 中,但您无法通过标准 S3 API 访问它们。当您运行 EBS 引导 AMI 时,它会启动一个 EBS 引导实例,其中根磁盘是一个 EBS 卷(从 AMI 的 EBS 快照创建)。

  • 您可以使用比 AMI 指定的启动磁盘更大的启动磁盘启动实例,方法是在运行时使用 block 设备映射参数。这是我写的一篇解释此问题的文章:http://alestic.com/2009/12/ec2-ebs-boot-resize

  • 您可以更改已运行实例的根磁盘大小,方法是停止它,用更大的副本替换 EBS 卷,然后重新启动它。我在这里提供示例步骤:http://alestic.com/2010/02/ec2-resize-running-ebs-root

  • 我建议将您的 MySQL 数据库文件分离到一个单独的数据 EBS 卷中。我写了一篇文章来描述执行此操作的步骤:http://aws.amazon.com/articles/1663

  • 如果您使用单独的数据 EBS 卷,您可能不需要调整根 EBS 卷的大小。

  • 无论您使用一个还是两个 EBS 卷,无论您是否创建新的 AMI,卷以及安装在它们上的软件和数据都会保留。事实上,创建一个包含完整数据库的 AMI 有点奇怪,因为数据库中的信息很快就会过时。也就是说,您应该定期为 EBS 卷创建快照,尤其是那些包含数据的卷。

  • 始终准确记录/自动执行您启动新实例的方式,包括软件安装和配置。能够在未来重现这一点会派上用场,尤其是在某些紧急情况下。

我对你的问题思考得越多,我就越认为你可能认为你需要做一些你不需要做的事情。这是我的建议:

  1. 启动 EBS 启动实例,并开始记录您在以下步骤中所做的一切。

  2. 为 MySQL 和其他数据附加一个单独的 EBS 卷(见上文)。

  3. 安装和自定义所有其他软件。

  4. 为两个 EBS 卷设置常规 EBS 快照。

您可能不需要创建自定义 AMI,也可能不需要调整根磁盘的大小。

关于EBS AMI 和持久性上的 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10355485/

相关文章:

mysql - 其中不同的 ID 有两个值

java - 如何将一对多结果映射到使用非主键连接的 Hibernate 实体?

MySQL用一行用户显示几行内容?

django - AWS Elastic Beanstalk - 使用 Python 和 Django 环境使用 Mongodb 而不是 RDS

php - 从具有总成本的两个表中选择全部

mysql - SQL 按日期排序,但需要最大值和最小值随时间发生。我需要 minTime minValue maxTime maxValue 按日期

amazon-web-services - 使用 secret 管理器的 AWS lambda 函数

node.js - 在 AWS EC2 上部署 https node express 服务器托管网站

javascript - Dynamodb put 项目覆盖旧项目

amazon-web-services - 以相同的文件名上传到 S3 后立即在 CDN 中刷新图像