我正在尝试测试和记录 Centos 6 的备份和恢复过程。这就是我要做的,但有几个地方我需要弄清楚。'net 上的 CentOS 备份/恢复文档有点乱七八糟。
一般备份和恢复计划
每天使用您最喜欢的备份软件备份您的系统。我不打算深入探讨这个问题,但假设您有一个适当的备份系统,可以让您备份一个系统并将其恢复到另一个系统。
烟雾和火焰吞没了您的一台服务器!在处理了眼前的危险之后,您意识到一个重要的系统已经无法修复地损坏了。您需要将其还原到不同的硬件。
检查备份文件。查看故障系统
/etc/redhat-release
文件的备份。使用它来确定故障系统使用的 CentOS 版本(补丁级别)?获取此版本的安装媒体。使用安装媒体,将操作系统安装到您的替换硬件上,根据系统的最终用途对磁盘进行适当的分区。
最小系统安装完成后,暂时关闭selinux,
echo ‘0’> /selinux/enforce
停止iptables,service iptables stop
安装备份客户端。从备份中恢复,从恢复中排除以下文件:
/proc
/sys
/tmp
/dev
/var/lock<- 不要从恢复中排除 - 请参阅答案
/var/run<- 不要从恢复中排除 - 请参阅答案
/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' t 恢复 - 请参阅答案
/etc/udev
/lib/modules
/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.排除
/var/run
正如您已经注意到的,
/var/run
在 CentOS 6 系统的完整还原期间排除会导致问题,因为它还会排除由已安装的软件包创建的目录。排除/var/lock
也会导致类似的问题,因为一些包也会在那里创建子目录。(在较新的 Linux 发行版上可能没有此类问题,这些发行版使用
systemd
— 在此类发行版上/var/lock
并且/var/run
(实际上/run
)可能位于 上tmpfs
,并且在每次引导期间都会创建任何所需的子目录;但是,CentOS 6 更旧并且没有任何支持用于在/var/lock
或中自动创建子目录/var/run
。)但是,实际上不需要排除
/var/run
和正确恢复,因为CentOS 6 上的脚本包括以下命令:/var/lock
/etc/rc.d/rc.sysinit
此命令将在系统启动期间删除所有陈旧的锁或 pid 文件(或任何其他非目录文件,例如套接字和符号链接)。因此,您应该将
/var/lock
和/var/run
从恢复排除列表中删除。2.网络配置文件的位置
/etc/sysconfig/network*
您在恢复备份时已经排除;这应该匹配/etc/sysconfig/network
文件(全局网络配置)和/etc/sysconfig/network-scripts
目录(每个接口配置文件ifcfg-*
)。然而,这些文件仅供软件包中包含的旧式网络配置脚本initscripts
使用,而 CentOS 6 有另一个网络配置系统—— NetworkManager,其配置存储在/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 备份的更多信息。
结合此问题线程中的排除列表和一个 Rackspace 教程,我能够使以下配置可靠地工作以复制/复制整个已安装的 CentOS 服务器。
我的设置是 CentOS 6.7 + Virtualmin。然而,这可能适用于没有任何控制面板的 CentOS 6.X。
我创建的过程如下:
如果您不使用 Virtualmin,您可能需要省略 Virtualmin 项目。
要复制到远程服务器的排除文件列表如下:
学分:
https://support.rackspace.com/how-to/migrating-a-linux-server-from-the-command-line-2/
有一个出色的开源项目 ReaR(Relax and Recover),它在创建 Linux(包括 CentOS 和 Red Hat)的图像样式备份方面做出了惊人的事情。特别值得注意的是他们捕获文件系统布局并将其合并到他们的恢复磁盘中以使恢复文件系统布局非常有效的方式。最重要的是,它是用 bash 编写的(而且 bash 编写得非常好!)。
除了我们编写了一个快速教程http://carroll.net/blog/red-hat-bare-metal-backup之外,我们与该项目没有任何关系。