使用kubernetes的cronjob定時備份mysql數據庫

1.建立cronjob的文件

CronJob所描述的,正是定時任務。mysql

  • 在給定時間點只運行一次
  • 在給定時間點週期性地運行

一個 CronJob 對象相似於 crontab (cron table)文件中的一行。它根據指定的預約計劃週期性地運行一個 Job。在這裏簡單的說一下cron,是指unix中cron表達式。好比:"*/1 * * * *",這個Cron表達式裏/1中 表示從0開始,/表示"每",1表示偏移量,因此它的意思是:從0開始,每1個時間單位執行一次。Cron表達式中五個部分分別表明:分鐘,小時,日,月,星期。因此上述這句Cron表達式的意思是:從當前開始,每分鐘執行一次。那麼咱們能夠利用這個機制來指定建立mysql備份任務的對象:sql

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,還有幾點關鍵的屬性我在這裏解釋說明一下:shell

  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小時。注意在設置定時任務的時候必定算好時間

二、備份數據庫的腳本

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
相關文章
相關標籤/搜索