网站自动备份

作者:shenmeng 发布时间:December 10, 2009 分类:默认分类

网站备份还是挺重要的,有的控制面板提供自动备份功能,若没有就只好自己写了。备份主要是文件和数据库,将他们打包。如果存到别的主机,就还要用ftp传输。下面是我的备份脚本:
1、备份数据库和文件并打包
数据库备份:

db_user='user'
db_pass='pass'
db_name='--all-databases'
mysqldump -u $db_user -p$db_pass $db_name >backup.sql

$db_user , $db_pass ,$db_name 分别是数据库用户名、密码和数据库名称。
备份整个数据库时db_name为--all-databases
打包数据库和文件:

file_dir='/home/www'
backup_date=`date +%Y%m%d`
tar -zcf sql$backup_date.tgz backup.sql
tar -zcf file$backup_date.tgz $file_dir
tar -cf all$backup_date.tar sql$backup_date.tgz file$backup_date.tgz

$file_dir为要打包的目录
$backup_date取得当前日期(放入文件名中以区别不同时间的备份文件)
后三步分别为打包数据库、打包文件、将二者一起打包。

2、用ftp传输备份文件

ftp_host='1.1.1.1'
ftp_user='user'
ftp_pass='passwd'
ftp_dir='/'
ftp -i -n $ftp_host <<EOF
user $ftp_user $ftp_pass
cd $ftp_dir
binary
prompt off
put all$backup_date.tar
quit

$ftp_host ,$ftp_user ,$ftp_pass ,$ftp_dir 分别为ftp主机、用户、密码、目录。
完整的脚本:

#!/bin/bash
ftp_host='1.1.1.1'
ftp_user='user'
ftp_pass='passwd'
ftp_dir='/'
file_dir='/home/www'
db_user='user'
db_pass='pass'
db_name='--all-databases'

mysqldump -u $db_user -p$db_pass $db_name >backup.sql

backup_date=`date +%Y%m%d`
tar -zcf sql$backup_date.tgz backup.sql
tar -zcf file$backup_date.tgz $file_dir
tar -cf all$backup_date.tar sql$backup_date.tgz file$backup_date.tgz

ftp -i -n $ftp_host <<EOF
user $ftp_user $ftp_pass
cd $ftp_dir
binary
prompt off
put all$backup_date.tar
quit

另外如果需要定时执行,可以将上述脚本加入crontab中,可以运行crontab -e 编辑crontab任务表,
加入一行(假设备份脚本为backup.sh位于/root目录):

0 4 */5 * *  /root/backup.sh

上述命令将使/root/backup.sh脚本每5天的4点以root身份执行一次。
crontab各字段意义:
1 分
2 时
3 天
4 月
5 星期
6 命令
指定具体值,则在指定时刻执行,* 为通配符,即每次都执行,/n 代表每n个该时刻执行一次。

标签: none

已有 3 条评论 »

  1. Martin Martin December 11th, 2009 at 09:02 am

    有没有PHP脚本备份mysql的啊?

    1. admin admin December 13th, 2009 at 10:45 am

      我给你发了个邮件,你看看

    2. Martin Martin December 14th, 2009 at 08:17 am

      相当不错,方便好用,谢咯

添加新评论 »

captcha
请输入验证码