zoukankan      html  css  js  c++  java
  • 使用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,还有几点关键的属性我在这里解释说明一下:

    1. spec.concurrencyPolicy这个属性主要是由于定时任务的特殊性,很可能某个job还没执行完,另外一个新的job就产生了。它的取值分别为:Allow(job可以同时存在)Forbid(不会创建新的job,该周期会被跳过),Replace(新产生的Job替换旧的,没有执行完的Job)
    2. 如果某一次Job创建失败,这次创建会被标记为"Miss"。当在指定的事件窗口内,miss数目达到100时,那么CronJob会停止再创建这个Job,这个时间窗口可以有spec.startingDeadlineSeconds来指定
    3. 在Job对象中,负责并行控制的参数有两个:spec.parallelism它定义的是一个Job在任意时间最多可以启动多少个Pod同时运行。spec.comletions它定义的是job至少完成的Pod数目
    4. 这里容器与宿主机时差相差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
    
  • 相关阅读:
    python基础-------模块与包(一)
    python基础-------函数(三)
    python基础-------函数(二)
    python基础-------函数(一)
    python基础(三)----字符编码以及文件处理
    python基础(二)-------数据类型
    python基础(一)------Python基础语法与介绍
    linux进程、软件包的安装和删除,及安装python3.6(源代码方式)
    Linux磁盘分区、打包压缩、软硬链接练习
    linux关于目录或文件权限的练习
  • 原文地址:https://www.cnblogs.com/niechen/p/10813028.html
Copyright © 2011-2022 走看看