工作需要写了一个自动备份全服数据库shell脚本,有需要的朋友可以复制下面这段代码:
#!/usr/bin/env bash
echo "========================================================"
echo "自动备份任务"
currentDate=$(date +%Y%m%d%H%M)
echo "备份任务执行时间:"$currentDate
echo "--------------------------------------------------------"
echo "任务开始"
echo "--------------------------------------------------------"
#导出目录
dbExportDir="/wwwroot/dbExport"
#备份目录
dbBackupDir="/wwwroot/dbBackup"
dbBackupZip=$dbBackupDir/$currentDate".zip"
echo "开始创建导出目录"
currentDbExportDir=$dbExportDir/$currentDate
mkdir -p $currentDbExportDir
echo "导出目录创建完成,目录路径为:"$currentDbExportDir
echo "--------------------------------------------------------"
echo "开始获取需要备份的数据库"
#数据库ip或域名
DBIP="localhost"
#数据库端口
DBPORT="3306"
#数据库登陆用户名
DBUSERNAME="username"
#数据库登陆密码
DBPASSWORD="password"
databaseList=`mysql -h$DBIP -P$DBPORT -u$DBUSERNAME -p$DBPASSWORD -e'show databases;' | grep -Ev 'Database|performance_schema|information_schema|mysql|sys'`
echo "需要备份的数据库获取完成,需要备份的数据库为:"$databaseList
#需要忽略的表名,如log表
igoreTables="log"
echo "导出数据库将忽略以下表:"$igoreTables
igoreTablesCheck(){
checkDatabase="$1"
igoreCheck=`mysql -h$DBIP -P$DBPORT -u$DBUSERNAME -p$DBPASSWORD -e'use '$checkDatabase';show tables;' | grep -Ex $igoreTables`
echo $igoreCheck
}
igoreTablesOptionsCreate(){
igoreTablesList=$1
igoreTablesOption=""
for igoreTable in $igoreTablesList;do
igoreTableOption=$igoreTableOption" --ignore-table=$eachDatabase.$igoreTable"
done;
echo $igoreTableOption
}
for eachDatabase in $databaseList;do
echo "开始备份数据库:"$eachDatabase
igoreTablesList=`igoreTablesCheck $eachDatabase`
igoreTablesOptions=""
if [ -n "$igoreTablesList" ]
then
echo "备份数据将忽略当前数据库表:"$igoreTablesList
igoreTablesOptions=`igoreTablesOptionsCreate $igoreTablesList`
echo $igoreTablesOptions
fi
mysqldump $igoreTablesOptions --default-character-set=utf8 --max-allowed-packet=256M --compact --extended-insert=false --add-drop-table -C -h$DBIP -P$DBPORT -u$DBUSERNAME -p$DBPASSWORD $eachDatabase > $currentDbExportDir/$eachDatabase".sql"
done;
echo "--------------------------------------------------------"
echo "开始创建备份目录"
mkdir -p $dbBackupDir
echo "备份目录创建完成,目录路径为:"$dbBackupDir
echo "--------------------------------------------------------"
echo "开始创建备份压缩文件"
zip -j $dbBackupZip $currentDbExportDir/*
echo "备份压缩文件创建完成,文件路径为:"$dbBackupZip
echo "--------------------------------------------------------"
echo "开始删除本次导出目录及文件"
rm -rf $currentDbExportDir
echo "导出目录及文件文件删除完成"
echo "--------------------------------------------------------"
echo "任务完成"
echo "========================================================"
修改部分信息后就可以使用了。
建议配合系统计划任务运行:
0 0 * * * sh /wwwroot/backup.sh >> /wwwroot/backup.log
backup.sh是上面那段shell,backup.log是备份过程中的输出。
顺便说一下,这个脚本运行前要求必须安装zip,没有安装的先安装哦,否则没法压缩。