k8s CronJobs 备份mysql

本文介绍了如何使用Kubernetes的CronJob资源来定时备份MySQL数据库。CronJob通过创建Job和Pod来执行预定义的任务,例如运行一个备份脚本。配置包括备份频率、重试策略和历史记录限制。示例展示了创建CronJob的YAML配置以及备份脚本的内容,用于生成和压缩数据库的SQL转储文件,并清理旧备份。
摘要由CSDN通过智能技术生成

特别鸣谢:

k8s cronjob之mysql定时备份_愺艮搥豩的技术博客_51CTO博客

[kubernetes]-使用cronjob定时备份mysql_k8s mysql备份_爷来辣的博客-CSDN博客

什么是 CronJobs?

根据Kubernetes 文档,一个 CronJob 对象就像一个 crontab 或 cron 表文件的一行。当您专注于软件开发的其他方面时,它会在后台以 Cron 格式运行预定的 Kubernetes 作业。

下图演示了 CronJob 流程:

 

如您所见,需要一个复杂的机制来提供一个简单的 cron 功能。Kubernetes 至少需要三个不同的对象(CronJob、Job 和 Pod)来完成 cron 任务。这个实现是有意的。该设计遵循 Kubernetes 的核心原则,即在循环中响应集群中的变化和执行自适应操作。

如图所示,流程如下:

  1. 用户应用包含两条主要信息的 CronJob 清单:何时执行和做什么。(您可以在下面看到示例配置。)
  2. 主要逻辑在CronJob 控制器中作为kube-controller-manager. 默认情况下,它每十秒检查一次是否应该运行 CronJob。
  3. 当控制器找到要执行的 CronJob 时(意味着当前时间与通过 cron 语法指定的时间匹配),它将创建另一个名为 Job 的对象。每个作业都跟踪一个特定的调用并包含从 CronJob 继承的关于要做什么的信息。
  4. Kubernetes 检测到新的 Job 对象后,会立即尝试执行。它将根据 CronJob 通过 Job in 传递下来的配置来安排新 Pod 的创建jobTemplate。当 Pod 运行时,它将执行您的 cron 任务。

创建mysql_cronjob 

apiVersion: batch/v1
kind: CronJob
metadata:
  namespace: default 
  name: mysql-full-backup-job
spec:
  concurrencyPolicy: Allow
  #backoffLimit: 6  # 指定job失败后进行重试的次数,默认值是6
  failedJobsHistoryLimit: 10 #保留执行失败的历史记录次数,默认值是1。
  schedule: "0 1 * * *"  # 和linux的crontab规则一样
  successfulJobsHistoryLimit: 14 #保留执行成功的历史记录次数,默认值是3。
  jobTemplate:
    metadata:
    spec:
      template:
        metadata:
        spec:
          restartPolicy: Never
          containers:
          - command:
            - /bin/sh
            - -c
            - /var/lib/mysql/script/mysql_bak.sh
            image: mysql:8.0.29-debian
            imagePullPolicy: IfNotPresent
            name: cronjob
            volumeMounts:
            - mountPath: /var/lib/mysql/script
              name: mysql-script
            - mountPath: /var/lib/mysql/backup
              name: mysql-backup
          volumes:
           - name: mysql-script
             persistentVolumeClaim:
               claimName: mysql-config
           - name: mysql-backup
             persistentVolumeClaim:
               claimName: mysql-backup-pvc

创建mysql备份脚本

#!/bin/bash
#
DB_NAME=""
DB_USER=""
DB_PASS=""
DB_HOST=""
DB_PORT=""
DB_BAK_PATH=""


mysqldump -h${DB_HOST} -u${DB_USER} -p${DB_PASS} -P${DB_PORT} ${DB_NAME} > ${DB_BAK_PATH}/${DB_NAME}_`date "+%Y-%m-%d"`.sql


cd ${DB_BAK_PATH}
tar zcf ${DB_NAME}_`date "+%Y-%m-%d"`.sql.tar.gz ${DB_NAME}_`date "+%Y-%m-%d"`.sql
rm -f ${DB_BAK_PATH}/${DB_NAME}_`date "+%Y-%m-%d"`.sql
#cp ${DB_BAK_PATH}/${DB_NAME}_`date "+%Y-%m-%d"`.sql.tar.gz /tmp/ossfs/db_backup/${DB_NAME}_sql_bak/

find ${DB_BAK_PATH}/ -mtime +3 -name "*.tar.gz" -exec rm -rf {} \;

 查看计划任务

[root@daliangang deploy]# kubectl get cj -w
NAME                    SCHEDULE    SUSPEND   ACTIVE   LAST SCHEDULE   AGE
mysql-full-backup-job   0 1 * * *   False     0        <none>          6m19s

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据提供的引用内容,K8S中的MySQL数据库备份脚本可以使用多种工具和脚本来实现。其中,常用的工具包括mysqldump、xtrabackupmysqlbackup和mysql shell。这些工具可以通过编写shell脚本或Windows bat脚本来执行备份操作。 一个示例的备份脚本如下所示: ```bash #!/bin/bash backup_path="/opt/app-ai/deepwise/data/mysql-backup" data_dir="/opt/app-ai/deepwise/data/mysql-data" DATE=$(date +%Y-%m-%d_%H-%M-%S) backup(){ if \[ ! -z "${data_dir}" \];then mkdir -p ${backup_path} date >> ${backup_path}/${DATE}.log echo "innobackupex --user=root --password=password --host=mysql-headless ${backup_path} > ${backup_path}/${DATE}.log 2>&1 &" innobackupex --user=root --password=password --host=mysql-headless ${backup_path} > ${backup_path}/${DATE}.log 2>&1 date >> ${backup_path}/${DATE}.log fi } clean(){ find ${backup_path}/ -name "*" -mtime +14 -exec rm -rf {} \; } backup clean ``` 这个脚本使用innobackupex工具来执行MySQL备份操作,并将备份文件存储在指定的路径中。同时,还包括了清理过期备份文件的功能。 此外,还可以使用KubernetesCronJob来定期执行增量备份操作。一个示例的CronJob配置如下所示: ```yaml apiVersion: batch/v1beta1 kind: CronJob metadata: namespace: deepwise name: mysql-incdump spec: jobTemplate: spec: completions: 1 template: spec: restartPolicy: Never volumes: - name: mysql-script hostPath: path: /opt/app-ai/deepwise/data/scripts - name: mysql-backup hostPath: path: /opt/app-ai/deepwise/data/mysql-backup - name: local-time hostPath: path: /etc/localtime - name: mysql-data hostPath: path: /opt/app-ai/deepwise/data/mysql-data containers: - name: mysqldump-container image: percona/percona-xtrabackup:2.4 volumeMounts: - name: mysql-script mountPath: /opt/app-ai/deepwise/data/scripts - name: local-time mountPath: /etc/localtime - name: mysql-backup mountPath: /opt/app-ai/deepwise/data/mysql-backup - name: mysql-data mountPath: /var/lib/mysql command: - "sh" - "/opt/app-ai/deepwise/data/scripts/backup_inc.sh" schedule: "0 0 * * *" ``` 这个CronJob配置使用percona/percona-xtrabackup镜像来执行增量备份操作,并将备份文件存储在指定的路径中。备份脚本backup_inc.sh位于/opt/app-ai/deepwise/data/scripts目录下。 请根据实际情况修改脚本和配置文件中的路径和参数,以适应您的环境和需求。 #### 引用[.reference_title] - *1* [分享(2)一个 mysqldump 备份 MySQL 数据库的脚本](https://blog.csdn.net/weixin_44496870/article/details/129706015)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [[kubernetes]-使用cronjob定时备份mysql](https://blog.csdn.net/xujiamin0022016/article/details/124648643)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值