在Amazon EC2上使用EBS运行MySQL

问题描述:

我有一台生产服务器,其MYSQL可能无法备份。有问题的实例有一个EBS支持的根设备(/ dev/sda1),它永久存储文件。我不清楚它是否自然地永久存储我的MYSQL数据和二进制日志文件。在Amazon EC2上使用EBS运行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 

我没有系统管理员专家,我不想搞砸了我现有的数据库。这里有风险吗?我是否应该在这里额外添加一个设备,或者坚持使用内置的根设备?

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

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

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

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

+0

Hi Kayak。主/主配置究竟意味着什么?您建议我可以开始了解它的任何资源? – Ben 2011-05-26 21:31:07

+1

使用标准的主/从复制,从站可以落后而不是当前的。在师父失败之前,这通常不是问题。此时,您必须确定从属服务器在复制过程中的位置,然后才能将其作为主服务器在线。通过主/主配置,2台服务器始终保持相同,从而形成完整的备份和故障切换解决方案。这里有一个设置它的指南,可以让你更好地理解一个想法。 – 2011-05-31 13:43:48

如果你担心数据持久性:

采取的/ dev/sda1的快照,创建一个完全独立的实例(t1.micro这个伟大工程),创建一个新的基于卷关闭了快照,则使用/ dev/sda1,然后在新的独立实例上挂载新卷?如果您的数据存在于新卷中,则它肯定会存储在/ dev/sda1上的EBS中。尽管如此:许多默认的Linux映像被设置为在实例终止时自动终止根(/ dev/sda1)卷。意思是:如果你失去了一个实例,如果你没有在别处备份,你也将失去该卷上的所有数据。保留备份的简单方法是仅使用EC2工具每天拍摄卷。创建一个脚本可以轻松创建快照,并在新快照完成后删除旧的每日定期快照。如果您正在寻找更小的备份大小或增量备份策略,您可以编写更高级的脚本,在备用可用区域或区域中启动t1.micro,通过您喜欢的任何机制仅对MySQL数据执行备份,然后关闭t1.micro实例。

+0

很好的答案。作为奖励,您每次都在测试灾难恢复过程。 – ceejayoz 2011-05-26 19:34:44

+0

@ceejayoz:谢谢!我已经进行了战斗测试,处理困难的方式已经几次... – BobG 2011-05-26 19:35:42

+0

嗨,鲍勃,很好的答案。我想我的困惑之处在于我尝试了你在这里提出的建议(拍摄sda1的快照)并将其安装在新实例上。我的问题是,我下载到我的原始实例(即MYSQL,APACHE等)上的一些软件没有通过卷进行传输。我不明白,因为音量挂载在/ – Ben 2011-05-26 20:40:30

如果您停止您的实例,它将类似于常规关机,并且EBS卷应该保留所有数据。 如果您终止实例,我认为自快照以来的所有数据都将消失。

但通常我没有看到很多理由来终止它。无论如何,在测试实例上尝试 应该很简单。你可以写一些文件,看看在不同的用例下会发生什么。

这样,你也会觉得比只依赖别人的回答更安全。

+1

请注意,您可以打开一个实例的终止保护以避免“whoopsies!” :-) – ceejayoz 2011-05-26 19:35:04