使用EBS在AmazonEC2上运行MySQL

使用EBS在AmazonEC2上运行MySQL,mysql,amazon-ec2,amazon-web-services,volume,amazon-ebs,Mysql,Amazon Ec2,Amazon Web Services,Volume,Amazon Ebs,我有一个生产服务器,其MYSQL可能无法备份。所讨论的实例有一个EBS支持的根设备(/dev/sda1),该设备持续存储文件。我不清楚它是否自然地持久存储我的MYSQL数据和二进制日志文件 如果它安装在根目录下,是否应该这样做?我想是的 我是否应该连接并挂载另一个卷,然后将MYSQL服务器指向新位置 我的命令如下所示(加上在创建快照时锁定MYSQL表) 我不是系统管理专家,我不想把我现有的数据库搞砸。这里有风险吗?我是否应该在这里使用其他设备,还是只使用内置的根设备?如果您关心数据持久性: 拍摄

我有一个生产服务器,其MYSQL可能无法备份。所讨论的实例有一个EBS支持的根设备(/dev/sda1),该设备持续存储文件。我不清楚它是否自然地持久存储我的MYSQL数据和二进制日志文件

如果它安装在根目录下,是否应该这样做?我想是的

我是否应该连接并挂载另一个卷,然后将MYSQL服务器指向新位置

我的命令如下所示(加上在创建快照时锁定MYSQL表)


我不是系统管理专家,我不想把我现有的数据库搞砸。这里有风险吗?我是否应该在这里使用其他设备,还是只使用内置的根设备?

如果您关心数据持久性:

拍摄/dev/sda1的快照,创建一个完全独立的实例(t1.micro在这方面非常有用),根据您拍摄的/dev/sda1快照创建一个新卷,然后将该新卷装载到新的独立实例上?如果新卷上存在您的数据,那么它肯定会存储在/dev/sda1上的EBS中


话虽如此:许多默认Linux映像都设置为在实例终止时自动终止根(/dev/sda1)卷。意思是:如果您丢失了一个实例,如果您没有在其他地方备份它,那么您也会丢失卷上的所有数据。保存备份的一种简单方法是,只需使用EC2工具每天拍摄卷的快照。创建一个脚本非常容易,该脚本拍摄快照并在新快照完成后删除旧的每日定期快照。如果您正在寻找较小的备份大小或增量备份策略,您可以编写更高级的脚本,在备用可用性区域或区域启动t1.micro,通过您喜欢的任何机制仅对MySQL数据执行备份,然后关闭t1.micro实例。

如果停止实例,将类似于常规关闭,EBS卷应保留所有数据。 若终止实例,我认为,自快照之后的所有数据都将消失

但通常我看不出有什么理由终止它。无论如何,它应该很容易尝试 在测试实例上。您可以编写一些文件,看看在不同的用例下会发生什么


这样,您也会觉得比仅仅依靠别人的答案安全得多。

我将/etc/mysql和/var/lib/mysql目录移动到了我的EBS,并在它们以前的位置创建了符号链接

这样我就不必修改配置文件或担心找不到文件

我还移动/etc/mysql的原因是,如果我将EBS连接到另一个实例,那么配置文件和维护脚本就不会丢失


对于该数据的备份,最好创建另一个实例并创建一个主/主配置,这样您也可以获得故障切换的好处。

回答得很好。作为奖励,您每次都在测试灾难恢复过程。@ceejayoz:谢谢!我已经对这个过程进行了几次艰苦的测试……嗨,鲍勃,回答得很好。我想我的困惑源于我确实尝试了您在这里提出的建议(拍摄sda1的快照)并将其装载到一个新实例上。我的问题是,我下载到原始实例上的一些软件(即MYSQL、APACHE等)没有随卷传输。我不明白,因为卷是在/同时挂载的,所以我使用的Ubuntu Lucid AMI在默认情况下在根目录下附带了一个EBS设备(如我之前所说)我应该将其分离并手动将快照卷附加到根目录吗?@Brendan:我通常会将我的EBS根目录卷单独放置,然后执行类似于KayamJim在下面所写的过程-基本上在我的数据库表空间通常所在的位置装载一个额外的EBS卷,这样,当我拍摄快照时,我只获取数据库表空间,而不是整个根卷(可以很容易地从AMI中重新创建)。请注意,可以为实例启用终止保护以避免“whoopsies!”:-)Hi Kayak。主/主配置的确切含义是什么?您推荐我开始了解它的任何资源?使用标准的主/从复制,从复制可能会落后,并且不是最新的。在主机出现故障之前,这通常不是问题。此时,您必须确定从机在复制过程中的位置,然后将其更新,然后才能将其作为主机联机。通过主/主配置,这两台服务器始终相等,从而形成了完整的备份和故障切换解决方案。这里有一个设置指南,可以让您更好地了解它。
    sudo mkdir /vol/etc /vol/lib /vol/log
    sudo mv /etc/mysql     /vol/etc/
    sudo mv /var/lib/mysql /vol/lib/
    sudo mv /var/log/mysql /vol/log/

    sudo mkdir /etc/mysql
    sudo mkdir /var/lib/mysql
    sudo mkdir /var/log/mysql

    echo "/vol/etc/mysql /etc/mysql     none bind" | sudo tee -a /etc/fstab
    sudo mount /etc/mysql

    echo "/vol/lib/mysql /var/lib/mysql none bind" | sudo tee -a /etc/fstab
    sudo mount /var/lib/mysql

    echo "/vol/log/mysql /var/log/mysql none bind" | sudo tee -a /etc/fstab
    sudo mount /var/log/mysql