首页 > 程序资源 > Shell脚本,自动备份网站和数据库

Shell脚本,自动备份网站和数据库

整理文件,把自己之前修改的自动备份网站的脚本发上来吧。

自动获取所有数据库并备份。
自动获取多个网站根目录下的所有网站并备份
自动备份Nginx配置文件
自动删除N天前的备份文件
以上...

#!/bin/bash

# 备份网站和数据库
# 作者: ImDong <www@qs5.org>
# 网站: http://www.qs5.org
# 作者: 本修改版基于 LNMP.org 的 backup.sh 修改而成
# 功能说明:
#  1.自动获取所有 Mysql 数据库自动备份
#  2.指定需要备份的网站根目录,自动备份下面所有的网站(分开) 而且支持多个根目录
#
#  使用说明: 每天夜里3点自动执行
#  crontab -e
#  0 3 * * * /home/software/site_shell/sites_mysql_backup.sh

#### 注意!!! 使用前请一定要先设置下面的信息!!!!!

######~设置备份文件保存的目录~######
Backup_Home="/home/backup/" # 备份文件保存的目录
MySQL_Dump="/usr/local/mysql/bin/mysqldump" # mysqldump 文件路径

######~设置需要备份哪些网站目录~######
Backup_SitesHome=(
    '/home/htdocs/'
    '/home/wwwroot/'
)

## Nginx配置文件目录
conf_path='/usr/local/nginx/conf/vhost/'

######~设置MySQL数据账号密码~######
MYSQL_DataPath='/home/mysql/data/'
MYSQL_UserName='root'
MYSQL_PassWord='1234'

# 备份数据保存几天
save_days=7

#### 需要设置的内容到此结束 ~!!!!


######~设置要备份的MySql数据库 自动~######
IS_PATH=$(pwd)
cd ${MYSQL_DataPath} && Backup_Database=$(ls -d */)
cd ${IS_PATH}

# 备份网站文件夹
Backup_Dir()
{
    # 获取文件夹名
    Backup_Path=$1
    # 去掉默认的 /
    Backup_Path=${Backup_Path%/}
    # 获取网站目录所在文件夹(父文件夹)
    Pre_Dir="$(dirname ${Backup_Path})/"
    # 获取网站目录名
    Dir_Name=${Backup_Path##*/}
    # 保存文件名
    Backup_Sites_Name=${Backup_Home}www-${Dir_Name}-$(date +"%Y%m%d").tar.gz
    tar zcf ${Backup_Sites_Name} -C ${Pre_Dir} ${Dir_Name}
    echo "Backup Sites: [${1}] ${Pre_Dir} ${Dir_Name} => ${Backup_Sites_Name}"
}
# 备份数据库
Backup_Sql()
{
    Db_Name=$1
    Backup_Db_Name=${Backup_Home}db-${Db_Name}-$(date +"%Y%m%d").sql.gz
    ${MySQL_Dump} -u${MYSQL_UserName} -p${MYSQL_PassWord} ${Db_Name} | gzip > ${Backup_Db_Name}
    echo "Backup Db: ${Db_Name} => ${Backup_Db_Name}"
}
# 备份Nginx 配置文件
Backup_Conf()
{
    # 保存文件名
    Backup_Conf_Name=${Backup_Home}Conf-$(date +"%Y%m%d").tar.gz
    path=`dirname ${conf_path}`
    name=`basename ${conf_path}`
    tar zcf ${Backup_Conf_Name} -C ${path} ${name}
    echo "Backup Nginx Conf: ${Backup_Conf_Name}"
}

if [ ! -f ${MySQL_Dump} ]; then
    echo "mysqldump command not found.please check your setting."
    exit 1
fi

if [ ! -d ${Backup_Home} ]; then
    mkdir -p ${Backup_Home}
fi

echo "Backup Nginx Conf..."
Backup_Conf

echo "Backup website files..."
Backup_Dir=();
for SiteHome in ${Backup_SitesHome[@]};do
    Backup_Dir=(
        ${Backup_Dir[@]}
        $(ls -d ${SiteHome}*/)
    )
done
for dd in ${Backup_Dir[@]};do
    Backup_Dir ${dd}
done

echo "Backup Databases..."
for db in ${Backup_Database[@]};do
    if [ ${db%/} != 'performance_schema' -a ${db%/} != 'mysql' -a ${db%/} != 'information_schema' ]; then
        Backup_Sql ${db%/}
    fi
done

echo "Delete old backup files..."
find ${Backup_Home} -mtime +${save_days} -exec rm -rf {} \;

上一篇: Swoole长连接服务不中断服务进行热更新实例

下一篇: 【正则表达式】解析命令行参数(附PHP例子)

最近回复

标签