mysql cronjob 备份_使用kubernetes的cronjob定时备份mysql数据库

1.创建cronjob的文件

CronJob所描述的,正是定时任务。

在给定时间点只运行一次

在给定时间点周期性地运行

一个 CronJob 对象类似于 crontab (cron table)文件中的一行。它根据指定的预定计划周期性地运行一个 Job。在这里简单的说一下cron,是指unix中cron表达式。比如:"*/1 * * * *",这个Cron表达式里*/1中 *表示从0开始,/表示"每",1表示偏移量,所以它的意思是:从0开始,每1个时间单位执行一次。Cron表达式中五个部分分别代表:分钟,小时,日,月,星期。所以上述这句Cron表达式的意思是:从当前开始,每分钟执行一次。那么我们可以利用这个机制来指定创建mysql备份任务的对象:

apiVersion: batch/v1beta1

kind: CronJob

metadata:

name: mysqldump

spec:

jobTemplate:

spec:

completions: 1

template:

spec:

restartPolicy: Never

volumes:

- name: mysql-master-script

hostPath:

path: /root/app/mysql/shell

- name: mysql-master-backup

hostPath:

path: /root/app/db/backup

- name: local-time

hostPath:

path: /etc/localtime

containers:

- name: mysqldump-container

image: nacos/nacos-mysql-master:latest

volumeMounts:

- name: mysql-master-script

mountPath: /var/db/script

- name: local-time

mountPath: /etc/localtime

- name: mysql-master-backup

mountPath: /var/db/backup

command:

- "sh"

- "/var/db/script/mysqldump.sh"

schedule: "50 15 * * *"

在这个Yaml文件当中,最重要的关键词就是jobTemplate。它是由job对象控制的Controller,还有几点关键的属性我在这里解释说明一下:

spec.concurrencyPolicy这个属性主要是由于定时任务的特殊性,很可能某个job还没执行完,另外一个新的job就产生了。它的取值分别为:Allow(job可以同时存在),Forbid(不会创建新的job,该周期会被跳过),Replace(新产生的Job替换旧的,没有执行完的Job)

如果某一次Job创建失败,这次创建会被标记为"Miss"。当在指定的事件窗口内,miss数目达到100时,那么CronJob会停止再创建这个Job,这个时间窗口可以有spec.startingDeadlineSeconds来指定

在Job对象中,负责并行控制的参数有两个:spec.parallelism它定义的是一个Job在任意时间最多可以启动多少个Pod同时运行。spec.comletions它定义的是job至少完成的Pod数目

这里容器与宿主机时差相差8小时。注意在设置定时任务的时候一定算好时间

2、备份数据库的脚本

mysqldump.sh脚本如下:

#!/bin/bash

#保存备份个数

number=3

#备份保存路径

backup_dir=/var/db/backup

#日期

dd=`date +%Y%m%d`

#备份工具

tool=/usr/bin/mysqldump

#用户名

username=root

#密码

password=root

#将要备份的数据库

database_name=test

#简单写法 mysqldump -u root -p123456 users > /root/mysqlbackup/users-$filename.sql

$tool -u $username -p$password -hmysql-master -P3306 --databases $database_name > $backup_dir/$database_name-$dd.sql

#写创建备份日志

echo "create $backup_dir/$database_name-$dd.sql" >> $backup_dir/log.txt

#找出需要删除的备份

delfile=`ls -l -crt $backup_dir/*.sql | awk '{print $9 }' | head -1`

#判断现在的备份数量是否大于$number

count=`ls -l -crt $backup_dir/*.sql | awk '{print $9 }' | wc -l`

if [ $count -gt $number ]

then

rm $delfile //删除最早生成的备份只保留number数量的备份

#写删除文件日志

echo "delete $delfile" >> $backup_dir/log.txt

fi

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值