Linux Primer

Dive into linux kernel

自动备份网站和数据库的shell脚本

| Comments

备份网站内容

我的网站是用xampp集成环境搭建的。为了方便迁移和备份数据。使用如下脚本对我网站内容进行备份。其中,BACKUPDIR指定备份文件的存储位置。 每一次备份的文件都用备份时系统的时间来进行唯一的命名,获取实际使用命令date -I

1
2
3
4
5
6
7
8
9
#!/bin/bash

# where to store the backup file
BACKUPDIR="/home/wanglong"

DATE=`date -I`
[ ! -d $BACKUPDIR ] && mkdir -p $BACKUPDIR
cd /opt/lampp
tar  zcf $BACKUPDIR/htdocs.$DATE.tar.gz htdocs

备份mysql数据库

备份数据库前,需要指定一下shell变量,包括mysql数据库的用户名、密码、运行数据库的主机和数据库相关命令的位置。

1
2
3
4
5
6
MYUSER="user"
MYPASS="password"
HOST="localhost"
BACKUPDIR="/home/wanglong"
MYSQL="/opt/lampp/bin/mysql"
MYSQL_DUMP="/opt/lampp/bin/mysqldump"

完整shell脚本如下,首先将所有的数据库作为一个整体进行备份,然后对每一个数据库分别进行了备份。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/bash

MYUSER="user"
MYPASS="password"
HOST="localhost"
BACKUPDIR="/home/wanglong"
MYSQL="/opt/lampp/bin/mysql"
MYSQL_DUMP="/opt/lampp/bin/mysqldump"
DATE=`date -I`

[ ! -d $BACKUPDIR/$DATE ] && mkdir -p $BACKUPDIR/$DATE

# backup all databases in a file
$MYSQL_DUMP -u$MYUSER -p$MYPASS -h$HOST  --all-databases > $BACKUPDIR/$DATE/all-databases.sql

# backup each database in separate file
DBS=`$MYSQL -u$MYUSER -p$MYPASS -Bse "show databases"|grep -v "information_schema" | grep -v "performance_schema"|grep -v "Database"`
for db_name in $DBS
  do
    $MYSQL_DUMP  -u$MYUSER -p$MYPASS -h$HOST  $db_name  > $BACKUPDIR/$DATE/$db_name.sql
  done

cd $BACKUPDIR
tar zcf mysql.$DATE.tar.gz $DATE && rm -rf $BACKUPDIR/$DATE

自动执行脚本

计划每周自动备份一次网站和数据库,所以需要将上述脚本拷贝到目录/etc/cron.weekly/中。

Comments