在Amazon EC2上使用EBS运行MySQL

4
我有一台生产服务器,其中的MYSQL可能没有备份。该实例具有EBS支持的根设备(/dev/sda1),可持久存储文件。目前不清楚它是否自然地持久存储了我的MYSQL数据和二进制日志文件。
如果挂载在根目录,它应该这样做吗?我认为是的。
还是我应该附加和挂载另一个卷,然后将MYSQL服务器指向新位置?
我的命令看起来像以下内容(同时在创建快照时锁定MYSQL表):
    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 

我不是系统管理员专家,也不想搞砸现有的数据库。这里有任何风险吗?我应该使用额外的设备还是坚持使用内置的根设备?

3个回答

7
我将 /etc/mysql 和 /var/lib/mysql 目录移动到我的 EBS 并在它们以前的位置创建了符号链接。这样我就不必修改配置文件或担心某些文件找不到。
我也移动 /etc/mysql 的原因是,如果我将 EBS 附加到另一个实例上,配置文件和维护脚本不会丢失。
至于数据备份,最好创建另一个实例并创建主/主配置,这样您也可以获得故障转移的好处。

嗨,Kayak。"master/master config" 究竟是什么意思?你有什么推荐的资源可以让我开始学习它吗? - Ben
1
使用标准的主/从复制,从服务器可能会落后并且不是最新的。通常情况下这不是问题,直到主服务器出现故障。此时,您必须确定从服务器在复制过程中的位置,然后使其保持最新状态,才能将其作为主服务器上线。使用主/主配置,两个服务器始终相等,因此提供了完整的备份和故障转移解决方案。以下是设置指南,以便您更好地了解。 - daemonofchaos

3
如果您担心数据持久性:
1. 拍摄/dev/sda1的快照 2. 创建一个完全独立的实例(t1.micro非常适合此项工作) 3. 基于您拍摄的/dev/sda1快照创建一个新卷 4. 然后将该新卷挂载到新的独立实例上
如果您的数据存在于新卷上,那么它一定存储在/dev/sda1上的EBS中。
话虽如此:许多默认的Linux映像都设置为在实例终止时自动终止根(/dev/sda1)卷。这意味着:如果您失去了一个实例,如果您没有在其他地方备份,您还会丢失卷上的所有数据。保留备份的简单方法是使用EC2设施每天对卷进行快照。很容易编写一个脚本,在新快照完成后删除旧的每日周期性快照。如果您正在寻找更小的备份大小或增量备份策略,则可以编写更高级的脚本,启动备用可用区或区域中的t1.micro,通过您喜欢的任何机制执行仅对MySQL数据的备份,然后关闭t1.micro实例。

很棒的回答。作为一个额外的好处,每次你都在测试你的灾难恢复过程。 - ceejayoz
@ceejayoz:谢谢!我已经亲身经历了几次这个过程的艰辛考验... - BobG
嗨Bob,非常好的回答。我猜我的困惑源于我尝试过你在这里提出的方法(对sda1进行快照),并将其挂载到新实例上。我的问题是,我在原始实例上下载的一些软件(即MYSQL,APACHE等)没有随卷传输。我不理解,因为该卷已挂载在/下。 - Ben
另外,我正在使用的Ubuntu Lucid AMI默认情况下附带一个根EBS设备(如我之前所说),我应该将其分离并手动将快照卷附加到根吗? - Ben
1
@Brendan:我通常不会碰我的 EBS 根卷,然后按照 KayamJim 下面写的类似程序进行操作——基本上是挂载额外的 EBS 卷到我的数据库表空间通常所在的位置,这样当我拍摄快照时,我只获取数据库表空间而不是整个根卷(可以轻松从 AMI 重新创建)。 - BobG
肯定是这样,Bob,那就是我的计划。我发布的代码就是为了做这件事情。我只是想确保移动/etc/mysql时不会搞砸什么。我对所有服务器相关的事情都有点过于多疑 :) - Ben

2

如果您停止实例,它将类似于常规关闭,EBS卷应保留所有数据。 如果您终止实例,则自快照以来的所有数据都将丢失。

但通常我不认为有很多理由终止它。无论如何,尝试在测试实例上进行操作应该很简单。您可以编写一些文件并查看在不同用例下会发生什么。

这样您会感觉比仅仅依赖别人的答案更加安全。


1
请注意,您可以为实例启用终止保护以避免出现“失误”! :-) - ceejayoz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接