技术提示:Gnull 和 Voyd

作者:Chester Gnull

大家好,亲爱的们,我是 Laverta Voyd,我丈夫 Chester 为大家挑选了一些技巧。就像我上次说的那样,Chester 不太爱说话,所以我来负责撰写。我知道自从上个月以来,你们没有太多时间发送提示,但是如果没有你们的帮助,我们就无法为所有亲爱的朋友们提供这项服务。所以,亲爱的,发送一些提示吧,这样我们才能让这艘蒸汽船继续航行。Chester 和我,我们希望它能继续运营下去。我们可以用这笔钱来托管这个专栏,而且你们自己也不会吃亏。这本杂志会为你们提供的每个提示支付 100 美元。所以,赶快行动起来,发送一些 Chester 可以使用的技术资料。他会挑选它们,我会为他整理好一切。同时,我们请尊敬的编辑再提供了一个提示,还有来自老朋友 Paddy 的一个好东西。那么,开始吧。

使用 Zmanda Recovery Manager 恢复 MySQL 表

有人删除了一个 MySQL 表。真是的。炒了你的 DBA。如果你不能炒 DBA,那么这个技巧会有所帮助。—Chester

你是一名 MySQL 数据库管理员。你定期备份你的 MySQL 数据库。有人删除了对 MySQL 应用程序至关重要的表(例如,SugarCRM 应用程序中的“accounts”表)。MySQL 应用程序不再工作。你如何从这种情况中恢复?

答案是 MySQL 二进制日志。二进制日志跟踪对数据库的所有更新,对数据库性能的影响极小。MySQL 二进制日志必须在服务器上启用。您可以使用 mysqlbinlog MySQL 命令从二进制日志中恢复。

更好更全面的解决方案是使用 Zmanda Recovery Manager (ZRM) for MySQL(MySQL 备份和恢复管理器)。mysql-zrm 工具允许用户浏览二进制日志并从增量备份中选择性地恢复数据库。

# mysql-zrm --action parse-binlogs   --source-directory=/var/lib
/mysql/sugarcrm/20060915101613
Log filename                 | Log Position | Timestamp          | Event Type | Event

/var/lib/mysql/my-bin.000015 | 11013          | 06-09-12 06:20:03 | Xid = 4413 | COMMIT;
/var/lib/mysql/my-bin.000015 | 11159          | 06-09-12 06:20:03 | Query      | DROP TABLE IF EXISTS `accounts`;

这里我们正在对增量备份进行选择性恢复,而无需从 SugarCRM 数据库中删除 customer 表。执行两个选择性恢复命令,从 2006 年 9 月 15 日完成的增量备份中恢复,而不执行日志位置 11159 的数据库事件 DROP TABLE。

# mysql-zrm --action restore  --backup-set sugarcrm \
   --source-directory=/var/lib/mysql/ sugarcrm/20060915101613/ \
   --stop-position 11014

# mysql-zrm --action restore   --backup-set sugarcrm \
   --source-directory=/var/lib/mysql/ sugarcrm/20060915101613/ \
   --start-position 11160

有关更多信息,请参阅 Zmanda Recovery Manager for MySQL:mysqlbackup.zmanda.com。—Paddy Sreenvasan

使用 Partimage 对升级进行双重保险,即使在 AMD64 上也是如此

有时假设升级是好事是没有意义的。首先运行 partimage 以保存旧版本的映像。如果新的发行版版本不起作用,您可以运行 partimage 将旧版本恢复。—Chester

由于各种原因,我运行多个发行版。例如,我运行 32 位 Kubuntu 和 64 位 Kubuntu。我大部分时间都在使用 64 位 Kubuntu,但某些软件包在 32 位 Kubuntu 上更容易设置和使用,例如 Skype。

我最近决定将我的 32 位 Kubuntu 从 Dapper 升级到 Edgy。每当您升级时,您都有破坏某些现有程序的风险。所以我通常启动到另一个发行版,并使用 partimage 保存我要升级的发行版所在的分区映像。如果升级不顺利,我总是可以使用 partimage 将分区恢复到以前的状态。您可能想要保存分区映像还有许多其他原因,因此即使您不认同我的动机,您也会发现此过程很有用。

在 64 位 Kubuntu AMD64 上运行 Partimage

Partimage 很挑剔,拒绝在 64 位系统上运行。出于我不知道的原因,有一个 partimage 软件包可以为 Kubuntu AMD64 安装,但它无法运行。在我的情况下,我想启动到 Kubuntu AMD64 并使用 partimage 保存我的 32 位 Kubuntu 安装,因此 Kubuntu AMD64 的 partimage 无法工作是一个主要问题。

或者真是这样吗?实际上,让 partimage 在 Kubuntu AMD64 上工作非常容易。只需从 www.partimage.org 下载 partimage 的静态二进制形式。将二进制文件 partimage 和 partimaged 解压到 /usr/sbin 中。这些二进制文件即使在 AMD64 下也应该可以正常工作。您应该能够输入命令partimage在 root 提示符下运行它。有人会认为有必要在命令前加上linux32,但它在没有它的情况下也能工作。

在使用 partimage 之前,您应该检查是否具有 /dev/dm inode。如果没有,您将看到如图 1 所示的屏幕。

Tech Tips with Gnull and Voyd

图 1. Partimage 需要创建 /dev/dm inode。

如果在按下“确定”后没有任何反应,则 partimage 可能无法为您创建 /dev/dm。有时,您可以通过多次按下“确定”来通过此屏幕,即使 partimage 没有创建 /dev/dm 也能工作。但是,为什么要冒险呢?在您使用以下命令自行创建 /dev/dm 之前(假设它还不存在),甚至不要启动 partimage

# mknod -m 644 /dev/dm b 240 0

现在启动 partimage。选择您要保存的分区。在我的情况下,这是分区 /dev/sdb8。然后,输入您要存储映像的文件的完整路径。我喜欢在文件名中包含发行版类型、文件系统类型和分区,这样我就可以记住我创建分区映像的原因。在这种情况下,我使用的文件名是 dapper32-ext3-sdb8.img。有关示例,请参见图 2。路径 /storage/disk/images 指向一个分区,我在该分区中有很多额外的磁盘空间用于保存分区映像。

Tech Tips with Gnull and Voyd

图 2. 使用描述性文件名保存映像。

按功能键 F5 继续。我使用默认的压缩方法 gzip,因为它速度更快。如果您的磁盘空间紧张并且不介意等待,您可以选择 bzip2 作为压缩方法。Partimage 将检查分区,并默认允许您输入描述。我通常取消选中描述功能,因为描述在文件名中,但您可能想使用该功能。使用箭头键突出显示该功能,然后按空格键切换为未选中,以取消选中该功能。您可以在图 3 中看到包含我的选择的屏幕。

Tech Tips with Gnull and Voyd

图 3. 如果您使用描述性文件名,则可以取消选中描述。

按 F5 继续。Partimage 应该开始忙于检查文件系统。Partimage 可能不稳定,有时会报告不存在的错误。如果您遇到此问题,请手动检查分区(例如,使用 fsck.ext3),然后取消选中让 partimage 为您执行此操作的选项。如果一切顺利,您应该看到类似于图 4 所示的屏幕。

Tech Tips with Gnull and Voyd

图 4. Partimage 已准备好为您创建映像。

按 Enter 键,partimage 将创建一个或多个分区的压缩映像文件。其余过程是不言自明的。

请注意,partimage 会在您的文件名中添加数字,因为它准备在必要时将映像拆分为多个文件。即使它只需要一个文件,它也会将上面的文件名更改为 dapper32-ext3-sdb8.img.000。

现在可以安全地启动到 32 位 Dapper 并将 32 位 Dapper 升级到 32 位 Edgy。如果一切正常,您就成功了。

如果您遇到问题并且感觉需要降级回 Dapper,您只需启动回 64 位 Kubuntu(或您正在使用的任何其他发行版)并再次运行 partimage。这一次,突出显示分区,键入相同的映像文件名(记住在名称中添加 .000),但使用箭头键选择“从映像文件恢复分区”,然后按空格键选择它。有关示例,请参见图 5。按 F5,其余过程应该是不言自明的。如果 partimage 创建了多个以 .000、.001 等结尾的文件,您不必担心指定所有文件。它将找到额外的映像文件并自动恢复它们。

Tech Tips with Gnull and Voyd

图 5. 将映像恢复到分区。

Partimage 可以与许多文件系统一起使用,但其中一些文件系统仅具有 beta 支持。谨慎使用 partimage 处理 JFS 等文件系统。它对我有效,但这并不意味着它对您也有效。如果您要保存和恢复 XFS 文件系统,则应绕过 partimage 并使用专为保存和恢复分区而设计的 XFS 实用程序 xfsdump 和 xfsrestore。—Nicholas Petreley

Linux Journal 为我们发布的任何技术提示支付 100 美元。将您的提示以及如何联系到您的信息发送至 techtips@linuxjournal.com

加载 Disqus 评论