昨天,我的专用网络服务器因硬件故障崩溃了。Leaseweb 已将其替换为另一台服务器。规格相同,但服务器不同,因此需要重新安装。这意味着我必须在重新安装之前进行一些备份,因为它不能直接克隆。
该服务器现已通过 GRML(Linux Live)启动,我可以通过 SSH 和 SFTP 访问它。
备份所有内容的最佳方法是什么?我不想错过任何东西。我需要 MySQL 数据库、文件等等。
有小费吗?
答案1
您可以将数据库本地转储到 tarball 中,然后同步将它们复制到另一台服务器,例如:
#!/bin/sh
SNAPSHOT_DATE=`date '+%d%m%y_%Hh%M'`
LOCAL_TARBALLS=/tmp
# COMPRESSION MODE
GZIP="$(which gzip)"
[[ -z $GZIP ]] && aptitude -y install gzip # for Debian's like
GZ_COMPRESSION_LEVEL="-9" # 1=low compression but fast, -9=high compression but slow
# ##############
# MYSQL dump
# ##############
TARBALL="mysql"
# guess binary names
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
# do it Safe
[[ -z $MYSQL ]] || [[ -z $MYSQLDUMP ]] && echo "mysql commands not found" && exit 1
# mysql version
$MYSQL -V > $LOCAL_TARBALLS/$TARBALL/myql_version
DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')"
# dump dbs and generate one tarball by database
for db in $DBS
do
FILE="$LOCAL_TARBALLS/$TARBALL/mysqldump_$db-$SNAPSHOT_DATE.sql"
$MYSQLDUMP -u $MUSER -h $MHOST -p$MPASS $db > $FILE && $GZIP $GZ_COMPRESSION_LEVEL $FILE
done
# Or generate ONE dump for all databases
# FILE=$LOCAL_TARBALLS/$TARBALL/"mysql_dump".$SNAPSHOT_DATE".sql"
# $MYSQLDUMP -u $MUSER -h $MHOST -p$MPASS --all-databases > $FILE && $GZIP -9 $FILE
else
echo "Mysql: No backup of databases have been performed (because no or wrong credentials have been entered)"
fi
您将必须调整 shell 中的一些数据,作为提示。
同样适用于您的数据(/home 等),我的意思是使用同步您的备份 tarball(同步正在使用远程控制)甚至这些同步可以通过 cronjob 进行管理,以便定期进行备份。
希望能帮助到你。
答案2
您可以使用 SSH 上的 tar 备份服务器的临时挂载点:
ssh youraccount@yourremoteserver "tar jcfp - /livemntpoint" > mybackup.tar.bz
如果您想在两个系统之间保留类似的用户/权限设置,保留将允许您保留相同的用户 ID/组 ID。
答案3
rsync 是备份文件的最佳方式。如果出现崩溃,重新启动 rsync,它将从上次备份的文件继续,而不是从头开始。
但在此之前,您必须备份您的数据库:)
答案4
备份 Web 文件和数据库的方法有很多,我个人建议将服务器实例镜像到良好状态,假设您的托管服务提供商提供此功能。除此之外,请查看表里不一它允许您备份和加密文件。您可以选择将备份存储在本地文件存储中,支持 scp/ssh、ftp、rsync、HSI、WebDAV、Tahoe-LAFS 和 Amazon S3 等。
我最近为一个使用 Jenkins(主服务器和从服务器)管理作业的客户实现了此方法,如果出现故障会发出通知。我更喜欢这种方法,因为它允许我将备份作为作业进行管理,而不是在每个单独的服务器上使用 cron。如果您需要有关此类实现的帮助,请告诉我。