cronjob定时启动备份数据

顾名思义,cronjob就是k8s中的定时任务,里面中的yaml文件中有非常关键的一项,最重要的关键词就是 job Template。它就是一个job对象的控制器controller

    apiVersion: batch/v1beta1

    kind: CronJob

    metadata:

      name:  mysqldump

    spec:

      jobTemplate:

        spec:

          completions: 1

          template:

            spec:

              restartPolicy: 

              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: 

这是一个样式模板,在里面根据自己数据库的信息进行更改完善,schedule和定时任务的规则相同* * * * * 分时日月周,按照需要的时间执行,但注意最好是自己每周亲自执行一边job

需要注意的是,由于定时任务的特殊性,很可能某个 Job 还没有执行完,另外一个新 Job 就产生了。这时候,你可以通过 spec.concurrencyPolicy 字段来定义具体的处理策略。

比如:concurrencyPolicy=Allow,这也是默认情况,这意味着这些 Job 可以同时存在;

concurrencyPolicy=Forbid,这意味着不会创建新的 Pod,该创建周期被跳过;

concurrencyPolicy=Replace,这意味着新产生的 Job 会替换旧的、没有执行完的 Job。而如果某一次 Job 创建失败,这次创建就会被标记为“miss”。当在指定的时间窗口内,miss 的数目达到 100 时,那么 CronJob 会停止再创建这个 Job。这个时间窗口,可以由 spec.startingDeadlineSeconds 字段指定。比如 startingDeadlineSeconds=200,意味着在过去 200 s 里,如果 miss 的数目达到了 100 次,那么这个 Job 就不会被创建执行了。

#!/bin/bash
#备份个数
number=3
#备份保存路径
backup_dir=/var/db/backup
#日期
dd=`date +%Y%m%d`
#备份工具
tool=/usr/bin/mysqldump
#用户名
username=root
#密码
password=
#将要备份的数据库
database_name=test
#简单写法
mysqldump -u root -p 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、付费专栏及课程。

余额充值