自动备份 Web 服务器

以下的内容是在 CentOS 7 上进行的(其他 Linux 发行版应该也没什么问题;D),主要介绍怎样使用 mysqldump 和 Tar 结合 Cron 自动备份数据库、Apache 的配置目录及文档根目录。本文示例的备份周期为每周备份1次。

备份准备

执行备份前,首先在当前用户的主目录中创建一个 backup 目录来存储备份文件,然后在 backup 目录新建 .env 文件并替换命令中相应的变量值,执行命令将备份时所需要的备份信息写入到 .env 文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 创建备份存储目录
mkdir -p /home/$(whoami)/backup && cd /home/$(whoami)/backup

# 新建环境文件
touch .env

# 写入备份信息到.env文件
#
# DATE->日期
# MYSQL_USERNAME->数据库用户名
# MYSQL_PASSWORD->数据库密码
# DATABASE_NAME->数据库名
# WEB_DIRECTORY->Web目录
# CONFIGURATION_DIRECTORY->配置目录
# STORAGE_PATH->存储路径
#
echo 'export DATE=$(date +%F-%H-%M)' > /home/$(whoami)/backup/.env
echo "export MYSQL_USERNAME='root'" >> /home/$(whoami)/backup/.env
echo "export MYSQL_PASSWORD='root'" >> /home/$(whoami)/backup/.env
echo "export DATABASE_NAME='example_db'" >> /home/$(whoami)/backup/.env
echo "export WEB_DIRECTORY='/var/www'" >> /home/$(whoami)/backup/.env
echo "export CONFIGURATION_DIRECTORY='/etc/httpd'" >> /home/$(whoami)/backup/.env
echo "export STORAGE_PATH='/home/$(whoami)/backup'" >> /home/$(whoami)/backup/.env

执行备份

backup 目录创建 web_server_backup.sh 脚本并将下面的代码粘贴到脚本中。

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

# 备份数据库
backup_database()
{
echo "*** Backup database ‘$DATABASE_NAME’ as ‘$STORAGE_PATH/${DATABASE_NAME}_backup-$DATE.sql’ ***" > $STORAGE_PATH/${WEB_DIRECTORY##*/}_backup-$DATE.log
mysqldump -u $MYSQL_USERNAME -p$MYSQL_PASSWORD $DATABASE_NAME > $STORAGE_PATH/${DATABASE_NAME}_backup-$DATE.sql
if [ -e $STORAGE_PATH/${DATABASE_NAME}_backup-$DATE.sql ]; then
echo 'info: Backup database successfully!' >> $STORAGE_PATH/${WEB_DIRECTORY##*/}_backup-$DATE.log
else
echo 'error: Failed to backup database.' >> $STORAGE_PATH/${WEB_DIRECTORY##*/}_backup-$DATE.log
fi
}

# 备份文件
backup_file()
{
echo "*** Backup directory ‘$WEB_DIRECTORY’ as ‘$STORAGE_PATH/${WEB_DIRECTORY##*/}_backup-$DATE.tar.gz’ ***" >> $STORAGE_PATH/${WEB_DIRECTORY##*/}_backup-$DATE.log
tar -C ${WEB_DIRECTORY%/*} -czpvf $STORAGE_PATH/${WEB_DIRECTORY##*/}_backup-$DATE.tar.gz ${WEB_DIRECTORY##*/} >> $STORAGE_PATH/${WEB_DIRECTORY##*/}_backup-$DATE.log
echo "*** Backup directory ‘$CONFIGURATION_DIRECTORY’ as ‘$STORAGE_PATH/${CONFIGURATION_DIRECTORY##*/}_backup-$DATE.tar.gz’ ***" >> $STORAGE_PATH/${WEB_DIRECTORY##*/}_backup-$DATE.log
tar -C ${CONFIGURATION_DIRECTORY%/*} -czpvf $STORAGE_PATH/${CONFIGURATION_DIRECTORY##*/}_backup-$DATE.tar.gz ${CONFIGURATION_DIRECTORY##*/} >> $STORAGE_PATH/${WEB_DIRECTORY##*/}_backup-$DATE.log
}

# 获取备份信息
source $1

backup_database
backup_file

执行备份,其过程中生成的日志将与备份文件保存在相同的目录中。

1
bash web_server_backup.sh /home/$(whoami)/backup/.env

使用 Cron 自动化

编辑 crontab。

1
crontab -e

添加以下定时任务,该任务将会在每周星期一到时自动执行备份脚本。

1
0 0 * * 1 /usr/bin/env bash /home/$(whoami)/backup/web_server_backup.sh /home/$(whoami)/backup/.env
Powered By Valine
v1.4.16