<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/ DTD/wml_1.1.xml">

<wml>
<head>
<meta http-equiv="cache-control" content="max-age=180,private" />
</head>
<card title="linux vps网站备份恢复大全（转）">
<p>
作者:<a href="index.php?action=showuser&amp;userid=1&amp;hash=">admin</a><br />时间:2011-01-07 10:01<br />分类:<a href="index.php?action=list&amp;cid=3&amp;hash=">电脑技术</a><br />内容:
linux vps网站备份恢复大全


Linux VPS/服务器 网站及数据库自动本地备份并FTP上传备份脚本


准备工作：


需要提前在VPS安装好lftp，lftp功能上比较强大，CentOS直接执行：yum install lftp，Debian执行：apt-get install lftp 。


需要在VPS上创建/home/backup/ 目录，在FTP上创建backup目录。


如果VPS上数据库不多的话使用Godaddy的免费空间就可以(10GB空间，300GB流量)，只要注册个域名就免费送。


下面将备份脚本进行部分注释：

#!/bin/bash

#Funciont: Backup website and mysql database

#Author: licess

#Website: http://lnmp.org

#IMPORTANT!!!Please Setting the following Values!


######~Set Directory you want to backup~######将下面的目录修改成自己要备份的目录，一般按我的都是在/home/wwwroot/下面所有直接写了需要备份的目录。可以继续再加：Backup_Dir5=你的目录 ，Backup_Dir后面的数字依次递增。如果不足4个，直接删除不需要的就可以，同时修改下面tar zcf 部分。


Backup_Dir1=vpser.net

Backup_Dir2=lnmp.org

Backup_Dir3=licess.org

Backup_Dir4=jungehost.com


######~Set MySQL UserName and password~######设置MySQL的用户名和密码，最好是root，其他用户可能因为权限问题无法导出部分数据库。

MYSQL_UserName=root

MYSQL_PassWord=yourmysqlrootpassword


######~Set MySQL Database you want to backup~######设置要部分的数据库，可以继续再加：Backup_Database_Name5=数据库名，Backup_Database_Name后面的数字依次递增。

Backup_Database_Name1=vpser

Backup_Database_Name2=licess

Backup_Database_Name3=junge

Backup_Database_Name4=vpserorg


######~Set FTP Information~######设置用来存放备份数据的FTP信息

FTP_HostName=184.168.192.43   //FTP服务器的IP或者域名

FTP_UserName=vpsernet                //FTP服务器用户名

FTP_PassWord=yourftppassword   //FTP服务器用户对应的密码

FTP_BackupDir=backup                    //备份到FTP上的目录，需要提前创建好。


#Values Setting END!


TodayWWWBackup=www-*-$(date +&quot;%Y%m%d&quot;).tar.gz

TodayDBBackup=db-*-$(date +&quot;%Y%m%d&quot;).sql

OldWWWBackup=www-*-$(date -d -3day +&quot;%Y%m%d&quot;).tar.gz

OldDBBackup=db-*-$(date -d -3day +&quot;%Y%m%d&quot;).sql


tar zcf /home/backup/www-$Backup_Dir1-$(date +&quot;%Y%m%d&quot;).tar.gz -C /home/wwwroot/ $Backup_Dir1 --exclude=soft

tar zcf /home/backup/www-$Backup_Dir2-$(date +&quot;%Y%m%d&quot;).tar.gz -C /home/wwwroot/ $Backup_Dir2

tar zcf /home/backup/www-$Backup_Dir3-$(date +&quot;%Y%m%d&quot;).tar.gz -C /home/wwwroot/ $Backup_Dir3 --exclude=test

tar zcf /home/backup/www-$Backup_Dir4-$(date +&quot;%Y%m%d&quot;).tar.gz -C /home/wwwroot/ $Backup_Dir4


###上面为备份网站文件数据，因为我的网站比较零散，而且网站目录下面有些目录属于临时目录并不需要备份，所以可以在上面加上--exclude=不备份的目录。如果在前面加了Backup_Dir5=yourdir，则再加tar zcf /home/backup/www-$Backup_Dir5-$(date +&quot;%Y%m%d&quot;).tar.gz -C

/home/wwwroot/ $Backup_Dir5 。如果多余则删除多余行。


/usr/local/mysql/bin/mysqldump -u$MYSQL_UserName -p$MYSQL_PassWord $Backup_Database_Name1 &gt; /home/backup/db-$Backup_Database_Name1-$(date +&quot;%Y%m%d&quot;).sql

/usr/local/mysql/bin/mysqldump -u$MYSQL_UserName -p$MYSQL_PassWord $Backup_Database_Name2 &gt; /home/backup/db-$Backup_Database_Name2-$(date +&quot;%Y%m%d&quot;).sql

/usr/local/mysql/bin/mysqldump -u$MYSQL_UserName -p$MYSQL_PassWord $Backup_Database_Name3 &gt; /home/backup/db-$Backup_Database_Name3-$(date +&quot;%Y%m%d&quot;).sql

/usr/local/mysql/bin/mysqldump -u$MYSQL_UserName -p$MYSQL_PassWord $Backup_Database_Name4 &gt; /home/backup/db-$Backup_Database_Name4-$(date +&quot;%Y%m%d&quot;).sql


###上面为备份MySQL数据库，如果在前面加了Backup_Database_Name5=yourdatabasename，则再加/usr/local/mysql/bin/mysqldump -u$MYSQL_UserName -p$MYSQL_PassWord $Backup_Database_Name5 &gt; /home/backup/db-$Backup_Database_Name5-$(date +&quot;%Y%m%d&quot;).sql 。如果多余则删除多余行。


rm $OldWWWBackup

rm $OldDBBackup

###删除3天前的备份###


cd /home/backup/


###下面为自动上传部分，不得不说lftp很强大，抛弃ftp吧####

lftp $FTP_HostName -u $FTP_UserName,$FTP_PassWord &lt;&lt; EOF

cd $FTP_BackupDir

mrm $OldWWWBackup

mrm $OldDBBackup

mput $TodayWWWBackup

mput $TodayDBBackup

bye

EOF


脚本下载地址：http://soft.vpser.net/lnmp/backup.sh


下载脚本，将脚本放到/root/ 下面，按上面的注释修改脚本中的参数，并保存，如果不熟悉vi或者nano编辑器，可以用winscp，执行：chmod +x /root/backup.sh 为脚本添加执行权限，执行：crontab -e 添加定时执行


在crontab中加入：0 3 * * * /root/backup.sh


凌晨3点自动执行/root/bakcup.sh 脚本，备份vps上的数据并上传到FTP上。


 


Linux VPS上自动备份文件并发送到Gmail (适用G级数据的备份)


一，安装所需程序

yum install -y mutt vixie-cron


二，设置mutt发信参数

$ vim ~/.muttrc

写入下面的内容

set envelope_from=yes

set from=bak@diavps.com

set realname=&quot;DiaBak&quot;

set use_from=yes

然后设置要接收邮件的Gmail，把bak@diavps.com加入白名单。


三，设置脚本

注意这几个目录

/etc/cron.hourly

/etc/cron.daily

/etc/cron.weekly

/etc/cron.monthly

这些目录下的文件可以分别每小时，每天，每周，每月自动执行一次。

如果是把脚本程序放置在上面的目录里，最好把权限设置为0700。

设置更复杂的执行条件可以使用crontab -e命令。详情请百度。


以每天执行为例

$ vim /etc/cron.daily/diabsk.sh

写入下面的内容

#!/bin/bash


# SETTING

TOEMAIL=&quot;bak@diavps.com&quot;;

COMMENT='blog database backup'

DIR='wordpress'

# END SETTING


TMP='/tmp/diabak/'${DIR}

ATTTMP='/tmp/diabakatt/'${DIR}


rm -rf $TMP

mkdir -p $TMP

cd $TMP


# Put files what you want to backup to $TMP


# Don't change anything below

YYYYMMDD=`date +%Y%m%d`

SUBJECT='DiaBak_of_'${DIR}'_'${YYYYMMDD};


rm -rf $ATTTMP

mkdir -p $ATTTMP

cd $ATTTMP


tar zcPf backup.tar.gz $TMP

rm -rf $TMP

split -b 20m -a 3 -d backup.tar.gz ${SUBJECT}.part

rm -f backup.tar.gz


for file in *

do

echo $COMMENT | mutt -a $file -s $SUBJECT $TOEMAIL

sleep 30s

done


rm -rf $ATTTMP


需要更改的内容已经加红

TOEMAIL为接收邮件的邮箱地址。

TOEMAIL为注释邮件，以邮件正文发送。

DIR为临时目录名，建议仅使用英文和数字。

# Put files what you want to backup to $TMP，这一行下面的命令根据需要自己补充，比如备份数据库可以把SQL文件导出到$TMP目录，备份文件可以复制文件到$TMP目录。


四，导出数据库的命令。

1.备份单个数据库

mysqldump --user=user --password=password --lock-all-tables dbname &gt; backup.sql

2.备份多个数据库

mysqldump --user=user --password=password --lock-all-tables --databases dbname1 dbname2 &gt; backup.sql

3.备份所有数据库

mysqldump --user=user --password=password --lock-all-tables --all-databases &gt; backup.sql


--lock-all-tables选项可以在备份期间锁定数据库防止出现变化，进而导致多个有关系的表不同步，比如A表需要引用B表，备份完A表后，B 表发生了变化，之后才备份了B表，这样数据库就乱了。

备份上百M的数据库也只用了几秒而已，所以这个选项对网站运行影响不大。


五，重新组合备份的文件

Linux下

$ cat DiaBak* &gt; bak.tar.gz

windows下

copy DiaBak_of_testfile_20100421.part001/b+DiaBak_of_testfile_20100421.part002/b bak.tar.gz

注意分卷后面会有三位数字，cat命令会按这些数字的顺序重新组合文件，所以数字不能乱。

copy命令同理，注意数字顺序。


六，其他

测试了一个600多M的文件，以20M的大小分成了31个包，通过脚本发送，用时十几分钟，期间网速保持在5Mbps到10Mbps之间，本机还有足够的 带宽，这个应该是GMAIL的上限了。

有些邮件需要过一个多小时才在Gmail显示出来。31个包全部收到。

如果哪位发现有比Gmail更适合备份的邮箱，期待与大家分享。


 


Linux VPS/服务器上轻松导入、导出MySQL数据库


随着网站的运行MySQL数据库也越来越大，备份问题也日益凸显，使用phpmyadmin导出或导入时可能会因为超时文件过大等原因无法导入或导出。下面VPS侦探说一下几个解决方法：

MySQL数据库导出
方法1:mysqldump命令

执行命令： /usr/local/mysql/bin/mysqldump -u 用户名 -p 数据库名 &gt; 文件名

如果数据库用户名有密码密码，执行后会提示输入密码。如果数据库用户名没有密码，就将命令中的&ldquo;-p&rdquo;参数删除。


注意：推荐使用MySQL root帐号进行操作，因为有些数据库可能设置了只能对应的用户进行操作。

方法2:phpmyadmin




phpmyadmin支持将数据库文件直接备份到配置文件指定的目录，默认安装的lnmp使用了修改后的配置，可以将数据库直接备份到/home/wwwroot/phpmyadmin/save/ 下面，然后用户通过http或者ftp等方式下载即可。暂时没有测试过比较大的数据库，lnmp的用户可以测试一下给我反馈。

方法3：第三方软件

如：帝国备份王，专门为MYSQL大数据的备份与导入而设计的稳定高效软件,系统采用分卷备份与导入,理论上可备份任何大小的数据库。据网上的反馈看还是不错的，安装使用方法。

MySQL数据库导入
方法1：mysql命令

执行命令： /usr/local/mysql/bin/mysql -u 用户名 -p 数据库名 &lt; 文件名


参数与mysqldump的使用一样。


注意：导入的数据库名需要已经存在。

方法2：phpmyadmin




phpmyadmin可以将位于/home/wwwroot/phpmyadmin/upload/ 导入到指定的数据库里，可以上传数据库备份文件到/home/wwwroot/phpmyadmin/upload/这个目录进行导入。

方法3：第三方软件

如：帝国备份王。详细的帝国备份王安装使用方法点击这里。
</p><p>
<a href="index.php?action=login&amp;hash=">立即登陆发表评论</a><br />
</p>
<p><a href="index.php?action=list&amp;hash=">返回日志列表</a><br /><a href="index.php?action=index&amp;hash=">返回主页</a></p>
</card>
</wml>
