以下的内容是在 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
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
| 0 0 * * 1 /usr/bin/env bash /home/$(whoami)/backup/web_server_backup.sh /home/$(whoami)/backup/.env
|
v1.4.16