一、数据库备份脚本
功能:备份同一数据库一个或多个库,最新备份文件保留数量可以设定
- 备份数据库
修改这行:Datebases=(sharebed) ,如果是多个库,例如:Datebases=(sharebed step awk) 以空格做间隔
- 保留备份数量
修改这行:bak_num=10 (这里写了10份,如果是多个库备份,每个库都是自动保留10份)
#!/bin/bash
# 配置项
# 备份存放目录
DataURL=/data/sqlBAK
[ ! -d $DataURL ] && mkdir -p $DataURL
# 文件名
Dhost="39.10.74.15"
# 数据库连接端口
Dport=3389
# 数据库用户名
Duser='root'
# 数据库密码
Dpwd='hjhk6hg4555'
# 要单独备份的数据库名,可以设置多个库备份,空格做分隔
Datebases=(sharebed)
# 备份日志文件
BAK_log=/data/sqlBAK/.BAK150.
for i in ${Datebases[@]}
do
[ ! -f $BAK_log ] && : > "$BAK_log$i"
done
#---主功能块
# 备份功能
DataName="$(date +%Y%m%d%H%M)"
cd $DataURL
for d in ${Datebases[@]}
do
/usr/bin/mysqldump -R -E --host=$Dhost -P$Dport -u$Duser -p$Dpwd $d > temp.sql
temp_name=$DataURL/$d.$DataName.tar.gz
/usr/bin/tar -zcpf $temp_name temp.sql
rm -rf temp.sql
echo "$DataName::$temp_name" >> $BAK_log
done
# 删除多余备份(当单个库或多个库备份时,每个备份库数量都分别只保留十个最新备份)
cd $DataURL
for i in ${Datebases[@]}
do
temp=`cat $BAK_log$i | wc -l`
row=$((temp+0))
del_row=$((row-10))
if [ $row -ge 11 ]; then
head -$del_row $BAK_log$i | awk -F "::" '{ print $2}' | xargs -n1 rm -rf {};
sleep 1
sed 1,"$del_row"d $BAK_log$i -i
fi
done
二、计划任务
[root@ald8 / ]# crontab -l
#-S1-----数据库备份任务(只备份sharebed库、每天早上3点1分备份一次,脚本自动保留最新十个备份 |>备份脚本:/data/shell/SqlAllBak.sh |>备份存放目录:/data/sqlBAK>)
1 3 * * * /data/shell/SqlAllBak.sh