Linux(centos)定时备份Mysql数据库
一、查看 服务器是否安装了 crontab
(定时器服务)
rpm -qa | grep crontab
# 出现如下则是安装了
# crontabs-1.11-17.20190603git.1.al8.noarch
1.未安装执行命令如下
yum -y install vixie-cron
yum -y install crontabs
2.crontab 常用命令
# 查看进程是否正在进行
ps aux | grep crond
# 查看运行状态
systemctl status crond 或者 service crond status
# 启动服务
systemctl start crond 或者 service crond status
# 关闭服务
systemctl stop crond 或者 service crond status
# 重启服务
systemctl restart crond 或者 service crond restart
# 重新载入配置
systemctl reload crond
# 加入开机启动
systemctl enable crond
# 查看定时任务
crontab -l
# 编辑
crontab -e
3.编写 dump_mysql.sh 脚本(tuch或者nano等编辑器编辑)
mysql_user="xxxx" #MySQL备份用户
mysql_password="xxxxx" #MySQL备份用户的密码
mysql_host="xxxxxxx" #mysql服务器ip
mysql_port="xxxx" #mysql服务器端口
mysql_charset="utf8" #MySQL编码0 2 * * * docker exec -i mysql sh /root/mysql8.0.20/mysqlbfplus/run.sh
backup_db_arr=("his") #要备份的数据库名称,多个用空格分开隔开 如("db1" "db2" "db3")
backup_location=/path/to/dis #/home/hualiang/soft/mysql_data_back/mysql_back 备份数据存放位置,末尾请不要带"/",此项可以保持默认,程序会自动创建文件夹
expire_backup_delete="ON" #是否开启过期备份删除 ON为开启 OFF为关闭
expire_days=30 #过期时间天数 默认为三天,此项只有在expire_backup_delete开启时有效
backup_time=`date +%Y%m%d%H%M` #定义备份详细时间
backup_Ymd=`date +%Y-%m-%d` #定义备份目录中的年月日时间
#backup_day_ago=`date -d 'expire_days days ago' +%Y-%m-%d` #备份之前的日期
backup_dir=$backup_location/$backup_Ymd #备份文件夹全路径
welcome_msg="Welcome to use MySQL backup tools!" #欢迎语
mysql_ps=`ps -ef |grep mysql |wc -l`
mysql_listen=`netstat -an |grep LISTEN |grep $mysql_port|wc -l`
echo $welcome_msg >> $backup_location/dump.log
if [ [$mysql_ps == 0] -o [$mysql_listen == 0] ]; then
echo "MySQL数据库未运行,备份停止!"
echo "MySQL数据库未运行,备份停止!" >> $backup_location/dump.log
exit
else
echo "MySQL 数据库连接成功! 请稍等......"
echo "MySQL 数据库连接成功! 请稍等......" >> $backup_location/dump.log
fi
# 判断有没有定义备份的数据库,如果有定义则开始备份,否则退出备份
if [ "$backup_db_arr" != "" ];then
#dbnames=$(cut -d ',' -f1-5 $backup_database)
#echo "arr is (${backup_db_arr[@]})"
for dbname in ${backup_db_arr[@]}
do
echo "数据库 $dbname 开始备份..."
echo "数据库 $dbname 开始备份..." >> $backup_location/dump.log
mkdir -p $backup_dir
mysqldump -h $mysql_host -P $mysql_port -u $mysql_user -p$mysql_password $dbname --default-character-set=$mysql_charset | gzip > $backup_dir/$dbname-$backup_time.sql.gz
echo $?
echo $? >> $backup_location/dump.log
flag=`echo $?`
if [ $flag == "0" ];then
echo "数据库 $dbname 备份成功,备份文件到: $backup_dir/$dbname-$backup_time.sql.gz"
echo "数据库 $dbname 备份成功,备份文件到: $backup_dir/$dbname-$backup_time.sql.gz" >> $backup_location/dump.log
else
echo "数据库 $dbname 备份失败!"
echo "数据库 $dbname 备份失败!" >> $backup_location/dump.log
fi
done
else
echo "没有数据库需要备份! 备份停止!"
echo "没有数据库需要备份! 备份停止!" >> $backup_location/dump.log
exit
fi
# 如果开启了删除过期备份,则进行删除操作
if [ "$expire_backup_delete" == "ON" -a "$backup_location" != "" ];then
#`find $backup_location/ -type d -o -type f -ctime +$expire_days -exec rm -rf {} \;`
`find $backup_location/ -type d -mtime +$expire_days | xargs rm -rf`
echo "删除备份超 $expire_days 天数据完成!"
echo "删除备份超 $expire_days 天数据完成!" >> $backup_location/dump.log
fi
4.配置定时任务
# 常用时间格式
每五分钟执行 */5 * * * *
每小时执行 0 * * * *
每天执行 0 0 * * *
每周执行 0 0 * * 0
每月执行 0 0 1 * *
每年执行 0 0 1 1 *
# crontab 文件的格式
{minute} {hour} {day-of-month} {month} {day-of-week} {full-path-to-shell-script}
minute: 区间为 0 – 59
hour: 区间为0 – 23
day-of-month: 区间为0 – 31
month: 区间为1 – 12. 1 是1月. 12是12月.
Day-of-week: 区间为0 – 7. 周日可以是0或7.
############## 常用时间
# 执行 crontab -e 命令,写入以下命令保存,每 5 分钟执行一次
*/5 * * * * sh /data/mysql/dump_mysql.sh #编写的文件/data/mysql/dump_mysql.sh
# 每天凌晨 5 点执行
0 5 * * * sh /data/mysql/dump_mysql.sh #编写的文件/data/mysql/dump_mysql.sh
############# 如果出现问题可能是定时器任务权限问题
License:
CC BY 4.0