通过 SSH 和 Linux Live 进行 Web 服务器备份!

通过 SSH 和 Linux Live 进行 Web 服务器备份!

昨天,我的专用网络服务器因硬件故障崩溃了。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。如果您需要有关此类实现的帮助,请告诉我。

相关内容