技术提示:Gnull 和 Voyd
大家好,亲爱的们,我是 Laverta Voyd,我丈夫 Chester 为大家挑选了一些技巧。就像我上次说的那样,Chester 不太爱说话,所以我来负责撰写。我知道自从上个月以来,你们没有太多时间发送提示,但是如果没有你们的帮助,我们就无法为所有亲爱的朋友们提供这项服务。所以,亲爱的,发送一些提示吧,这样我们才能让这艘蒸汽船继续航行。Chester 和我,我们希望它能继续运营下去。我们可以用这笔钱来托管这个专栏,而且你们自己也不会吃亏。这本杂志会为你们提供的每个提示支付 100 美元。所以,赶快行动起来,发送一些 Chester 可以使用的技术资料。他会挑选它们,我会为他整理好一切。同时,我们请尊敬的编辑再提供了一个提示,还有来自老朋友 Paddy 的一个好东西。那么,开始吧。
有人删除了一个 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 以保存旧版本的映像。如果新的发行版版本不起作用,您可以运行 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 所示的屏幕。
如果在按下“确定”后没有任何反应,则 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 指向一个分区,我在该分区中有很多额外的磁盘空间用于保存分区映像。
按功能键 F5 继续。我使用默认的压缩方法 gzip,因为它速度更快。如果您的磁盘空间紧张并且不介意等待,您可以选择 bzip2 作为压缩方法。Partimage 将检查分区,并默认允许您输入描述。我通常取消选中描述功能,因为描述在文件名中,但您可能想使用该功能。使用箭头键突出显示该功能,然后按空格键切换为未选中,以取消选中该功能。您可以在图 3 中看到包含我的选择的屏幕。
按 F5 继续。Partimage 应该开始忙于检查文件系统。Partimage 可能不稳定,有时会报告不存在的错误。如果您遇到此问题,请手动检查分区(例如,使用 fsck.ext3),然后取消选中让 partimage 为您执行此操作的选项。如果一切顺利,您应该看到类似于图 4 所示的屏幕。
按 Enter 键,partimage 将创建一个或多个分区的压缩映像文件。其余过程是不言自明的。
请注意,partimage 会在您的文件名中添加数字,因为它准备在必要时将映像拆分为多个文件。即使它只需要一个文件,它也会将上面的文件名更改为 dapper32-ext3-sdb8.img.000。
现在可以安全地启动到 32 位 Dapper 并将 32 位 Dapper 升级到 32 位 Edgy。如果一切正常,您就成功了。
如果您遇到问题并且感觉需要降级回 Dapper,您只需启动回 64 位 Kubuntu(或您正在使用的任何其他发行版)并再次运行 partimage。这一次,突出显示分区,键入相同的映像文件名(记住在名称中添加 .000),但使用箭头键选择“从映像文件恢复分区”,然后按空格键选择它。有关示例,请参见图 5。按 F5,其余过程应该是不言自明的。如果 partimage 创建了多个以 .000、.001 等结尾的文件,您不必担心指定所有文件。它将找到额外的映像文件并自动恢复它们。
Partimage 可以与许多文件系统一起使用,但其中一些文件系统仅具有 beta 支持。谨慎使用 partimage 处理 JFS 等文件系统。它对我有效,但这并不意味着它对您也有效。如果您要保存和恢复 XFS 文件系统,则应绕过 partimage 并使用专为保存和恢复分区而设计的 XFS 实用程序 xfsdump 和 xfsrestore。—Nicholas Petreley
Linux Journal 为我们发布的任何技术提示支付 100 美元。将您的提示以及如何联系到您的信息发送至 techtips@linuxjournal.com。