备份工具:为提高效率,故采用物理备份方案,备份工具使用Percona公司xtrabackup,版本号:2.4.4,每台数据库服务器上都要安装。
备份策略:每日凌晨03:00备份一次,数据存放于/mysqlbak目录下,备份日志名为“bak.log",只保留最新三份备份,过时备份自动删除
1、备份脚本
$ mkdir -p /mysqlbak && cd /mysqlbak
$ cat >>bak.sh<<EOF
#!/bin/bash
source /etc/profile
source ~/.bash_profile
cd /mysqlbak
let dirlen=`ls -lrt |grep 'dr'|awk {'print $9'}|wc -l`
echo -e "定时任务开始于: " `date` "\n" >>/mysqlbak/bak.log
""
if [ $dirlen -gt 2 ]; then
let delline=` expr $dirlen-2`
echo -e "删除"$delline"个较早的备份目录\n">>/mysqlbak/bak.log
ls -lrt |grep 'dr'|awk {'print $9'}|head -$delline>>/mysqlbak/bak.log
ls -lrt |grep 'dr'|awk {'print $9'}|head -$delline|xargs rm -rf
fi
echo -e "现在开始备份数据库请等待.....\n">>/mysqlbak/bak.log
innobackupex --defaults-file=/etc/my.cnf --user=root --password=root /mysqlbak>/dev/null
if [ $? -eq 0 ]; then
echo -e "Ok!备份成功!\n">>/mysqlbak/bak.log
echo -e "定时任务结束于: " `date` "\n">>/mysqlbak/bak.log
exit 0
else
echo -e "Warn:备份失败!\n"
exit 1
fi
EOF
$ chmod +x bak.sh
PS: 在脚本头部添加"source /etc/profile"与"
source ~/.bash_profile"是为了在执行时添加环境变量,否则下面的innobackupex 命令可能会发生找不到路径的情况,因为cron定时任务是不是自动添加环境变量设置的
2、添加定时任务
$ (crontab -l | grep "$cron_job"; echo "0 3 * * * /mysqlbak/bak.sh >/dev/null 2>&1") | crontab -
$ crontabl -l
0 3 * * * /mysqlbak/bak.sh >/dev/null 2>&1
3、查看任务执行情况
$ cat /mysqlbak/bak.log
定时任务开始于: 2021年 06月 23日 星期三 00:21:01 CST
删除3个较早的备份目录
2021-06-22_23-33-49
2021-06-22_23-33-50
2021-06-22_23-33-51
现在开始备份数据库请等待.....
Ok!备份成功!
定时任务结束于: 2021年 06月 23日 星期三 00:21:17 CST
......