我正在尝试测试并记录 Centos 6 的备份和恢复过程。这就是我目前的工作,但有几个地方我需要澄清一下。网络上的 CentOS 备份/恢复文档有点不靠谱。
常规备份和恢复计划
每天使用您最喜欢的备份软件备份您的系统。我不会深入讨论这个问题,但假设您有一个合适的备份系统,允许您备份一个系统并将其恢复到另一个系统。
烟雾和火焰吞噬了您的一台服务器!处理完眼前的危险后,您意识到一个重要的系统已遭受不可挽回的损坏。您需要将其恢复到不同的硬件上。
检查备份文件。查看故障系统
/etc/redhat-release
文件的备份。使用它来确定故障系统使用的是哪个版本的 CentOS(补丁级别)?获取此版本的安装介质。使用安装介质,在您的替换硬件上进行操作系统的最小安装,并根据系统最终用途对磁盘进行适当分区。
安装最小系统后,暂时禁用 selinux,
echo ‘0’> /selinux/enforce
停止 iptables,service iptables stop
并安装备份客户端。从备份中恢复,排除恢复以下文件:
/proc
/sys
/tmp
/dev/var/lock<- 不排除恢复 - 参见答案/var/运行<- 不排除恢复 - 参见答案
/var/tmp
/etc/fstab
/etc/mdadm.conf
/etc/mtab
/etc/resolv.conf
/etc/networks
/etc/sysconfig/network*
/etc/sysconfig/kernel
/etc/hosts
/etc/modprobe*
/etc/networkmanager<- 确保 IP 不会被恢复 - 参见答案
/etc/udev
/lib/模块
/boot
恢复完成后,重新启动并观察错误
检查网络配置是否正确。您可能需要使用
system-config-network
来更改网络设置。某些应用程序(如 Apache 和 MySQL)在恢复后可能无法正确启动。由于只要您不从恢复中排除 /var/run 和 /var/lock,这应该不是问题 - 请参阅答案。/var/run
已从恢复中排除,因此像 这样的子文件夹/var/run/httpd
将不存在,因此应用程序将无法正确创建 PID 文件。您需要恢复像/var/run/httpd/
和这样的文件夹/var/run/mysqld/
并赋予它们正确的权限。完成补救措施后确保应用程序正确运行。
如果您正在运行 MySQL 数据库,则它可能仍然正常,无需从您创建的任何平面文件备份中恢复它。您可以通过运行来检查数据库的状态
mysqlcheck -c -u root –p******** --all-databases
。如果您发现任何错误,请运行mysqlcheck -c -u root –p******** --all-databases --auto-repair
以修复它们。您应该始终确保对数据库进行了适当的备份,如下面的答案所示。我个人使用 mysqldump。使用 将系统修补至最新级别
yum update
。重新启动以确保系统恢复正常并彻底检查 /var/log/messages 中是否有任何错误后,测试系统的功能以确保其正常运行。如果是这种情况,请使用将
system-config-network
IP 地址更改为原始故障系统的 IP 地址。
问题/疑问
从恢复中排除/var/run/*
会导致恢复时无法创建用于包含某些应用程序的 PID 的子文件夹。真的有必要/var/run/*
从恢复中排除吗?更好的方法是根本不恢复 PID 文件吗?系统恢复后,“故障系统”的 IP 地址也恢复了。我不想这样。我肯定漏掉了“排除在恢复之外”列表中的一个文件。你知道它在哪里吗?
更新时,我收到很多类似这样的消息/sbin/ldconfig: /usr/lib64/libblah.so is not a symbolic link
。更新后重新启动系统时,某些服务无法正确启动。我想知道这是否与备份系统还原符号链接指向的文件而不是符号链接本身有关。如果我运行 ldconfig 并查看它抱怨的共享对象之一,则共享对象是一个实际文件而不是符号链接。还有人见过这种情况吗?
答案1
1. 排除/var/run
正如您已经注意到的,/var/run
在完全恢复 CentOS 6 系统期间排除会导致问题,因为它还会排除已安装软件包创建的目录。排除/var/lock
也会导致类似的问题,因为某些软件包也会在那里创建子目录。
(在较新的使用systemd
— 的 Linux 发行版上可能不存在此类问题,在此类发行版上/var/lock
,和/var/run
(实际上/run
)可以放在 上tmpfs
,并且每次启动时都会创建任何所需的子目录;但是,CentOS 6 更旧,不支持在/var/lock
或中自动创建子目录/var/run
。)
但是,实际上排除/var/run
和/var/lock
对于正确恢复并不是必需的,因为/etc/rc.d/rc.sysinit
CentOS 6 上的脚本包含以下命令:
find /var/lock /var/run ! -type d -exec rm -f {} \;
此命令将在系统启动期间删除所有过期的 lock 或 pid 文件(或任何其他非目录文件,例如套接字和符号链接)。因此,您应该从恢复排除列表中删除/var/lock
它们。/var/run
2. 网络配置文件的位置
您/etc/sysconfig/network*
在恢复备份时已经排除了;这应该与/etc/sysconfig/network
文件(全局网络配置)和/etc/sysconfig/network-scripts
目录(每个接口的配置文件ifcfg-*
)相匹配。但是,这些文件仅由旧式网络配置脚本包含在initscripts
软件包中,并且 CentOS 6 还有另一个网络配置系统——网络管理器,其配置存储在 中/etc/NetworkManager
。恢复备份时也请尝试排除该目录。
3. 符号链接被文件替换的问题
如果您发现符号链接在还原后被替换为纯文件,则意味着您的备份/还原程序配置不正确,或者(如果没有用于保存和还原实际符号链接的选项)您使用的程序根本不适合 Linux 系统备份/还原。只有当程序仅用于备份和还原某些特定数据(这些数据肯定不包含符号链接)时,您才可以使用不支持符号链接的程序。请注意,您可能会在意想不到的地方找到符号链接 — 例如,在某些情况下,符号链接可能用于 MySQL 数据库目录(将部分数据存储在不同设备上),因此依赖“无符号链接”假设可能是危险的。
4.MySQL 备份
如果您的备份程序只是从正在运行的服务器复制文件,那么您的备份实际上并不是“崩溃一致的”,因为不同的文件(甚至是同一文件的不同块)是在不同时间复制的,因此您实际上不会在备份中获得数据库的一致快照。(这适用于任何类型的数据库,而不仅仅是 MySQL。)
有几种方法可以仅使用文件级备份来备份 MySQL 数据库:
用于
mysqldump
在开始文件级备份之前创建 SQL 转储;备份转储文件而不是数据库目录。这是最便携的备份格式,但转储和恢复都可能很慢。在开始备份之前停止 MySQL 服务器,进行文件级备份,然后重新启动 MySQL 服务器。要恢复,只需恢复新服务器上的所有文件,然后正常启动服务器。这种备份速度很快,但在备份期间需要相当长的停机时间。
为了减少上一种方法所需的 MySQL 服务器停机时间,您可以在停止服务器后创建文件系统快照,然后重新启动 MySQL 服务器,然后挂载快照,执行文件级备份并删除快照。您需要将文件系统放在 LVM 卷上,并且卷组中有一些可用空间用于快照。
为了进一步减少停机时间,您可以
FLUSH TABLES WITH READ LOCK
在拍摄快照之前使用,而不是停止服务器,如下所述这里;在这种情况下,快照将包含一致状态的 MyISAM 表和崩溃一致状态的 InnoDB 表(文件级恢复后需要 InnoDB 恢复)。
读本文档有关 MySQL 备份的更多信息。
答案2
结合此问题线程中的排除列表和一个 Rackspace 教程,我能够使以下配置可靠地工作以复制/复制整个已安装的 CentOS 服务器。
我的设置是 CentOS 6.7 + Virtualmin。但是,这可能适用于没有任何控制面板的 CentOS 6.X。
我创建的程序如下:
- 安装 Centos 6.X 最低版本到目标服务器
- 从 install.sh 安装 Virtualmin
- 注销目标服务器,但保留它
- 使用 rsync 从备份服务器恢复服务器备份
- 重启目标服务器
- 登录Virtualmin
- 使用 Virtualmin 工具更正 IP(它会询问)
- 正确的主机名
- 从备份服务器恢复虚拟服务器(站点)备份(如果您正在使用虚拟服务器并且在那里有任何帐户)
- 如果 virtualmin 添加了 php_value、php_admin_value,请从 httpd.conf 中删除它们
- 使用 Virtualmin 工具检查 Virtualmin 配置
如果您不使用 Virtualmin,您可能需要省略 Virtualmin 项目。
复制到远程服务器的排除文件列表如下:
/boot
/proc
/sys
/tmp
/dev
/var/tmp
/etc/fstab
/etc/mdadm.conf
/etc/mtab
/etc/resolv.conf
/etc/networks
/etc/sysconfig/network*
/etc/sysconfig/kernel
/etc/hosts
/etc/modprobe*
/etc/networkmanager
/etc/udev
/lib/modules
/var/lock
/etc/conf.d/net
/etc/network/interfaces
/etc/sysconfig/hwconf
/etc/sysconfig/ip6tables-config
/etc/hostname
/etc/HOSTNAME
/etc/modules
/net
/etc/rc.conf
/usr/share/nova-agent*
/usr/sbin/nova-agent*
/etc/init.d/nova-agent*
致谢:
https://support.rackspace.com/how-to/migrating-a-linux-server-from-the-command-line-2/
答案3
有一个出色的开源项目 ReaR(Relax and Recover),它在创建 Linux(包括 CentOS 和 Red Hat)的映像样式备份方面做出了惊人的贡献。特别值得注意的是,他们以很酷的方式捕获文件系统布局并将其合并到恢复磁盘中,从而使恢复文件系统布局工作得相当好。最重要的是,它是用 bash 编写的(而且 bash 编写得非常好!)。
我们与该项目没有任何联系,除了我们编写了一个快速教程http://carroll.net/blog/red-hat-bare-metal-backup。