因为现在MySQL是跑在Kubernetes集群里面的,所以这边的定时备份是用的Kubernetes的CronJob来做。具体步骤如下。
创建PVC
新建yml配置文件
mysql-backup-pvc.yml
kind: PersistentVolumeClaimapiVersion: v1metadata:name: mysql-backupnamespace: testspec:accessModes:- ReadWriteOnceresources:requests:storage: 10GistorageClassName: db-nfs
执行
kubectl apply -f /home/mysql-backup-k8s/mysql-backup-pvc.yml
创建CronJob
新建yml配置文件
mysql-full-backup-cron-job.yml
apiVersion: batch/v1beta1kind: CronJobmetadata:name: mysql-backupnamespace: testspec:schedule: "0 0 * * *"jobTemplate:spec:template:spec:containers:- name: mysql-backupimagePullPolicy: IfNotPresentimage: mysqlenv:- name: MYSQL_BACKUP_USERvalue: root- name: MYSQL_BACKUP_USER_PASSWORDvalue: test123456- name: MYSQL_HOSTvalue: mysqlcommand:- /bin/sh- -c- |set -exnumber=30mysqldump --host=$MYSQL_HOST --user=$MYSQL_BACKUP_USER \--password=$MYSQL_BACKUP_USER_PASSWORD \--routines --all-databases --single-transaction \> /mysql-backup/test-backup-full-`date +"%Y%m%d"`.sqlecho "create /mysql-backup/test-backup-full-`date +"%Y%m%d"`.sql" >> /mysql-backup/log.txtdelfile=`ls -l -crt /mysql-backup/*.sql | awk '{print $9 }' | head -1`count=`ls -l -crt /mysql-backup/*.sql | awk '{print $9 }' | wc -l`if [ $count -gt $number ]thenrm $delfileecho "delete $delfile" >> /mysql-backup/log.txtfivolumeMounts:- name: mysql-backupmountPath: /mysql-backup- name: local-timemountPath: /etc/localtimereadOnly: truerestartPolicy: OnFailurevolumes:- name: mysql-backuppersistentVolumeClaim:claimName: mysql-backup- name: local-timehostPath:path: /etc/localtime
如果mysql的文件使用的是指定映射路径的方式,则配置如下
apiVersion: batch/v1beta1kind: CronJobmetadata:name: mysql-backupnamespace: testspec:schedule: "0 0 * * *"jobTemplate:spec:template:spec:containers:- name: mysql-backupimagePullPolicy: IfNotPresentimage: mysqlenv:- name: MYSQL_BACKUP_USERvalue: root- name: MYSQL_BACKUP_USER_PASSWORDvalue: test123456- name: MYSQL_HOSTvalue: mysqlcommand:- /bin/sh- -c- |set -exmysqldump --host=$MYSQL_HOST --user=$MYSQL_BACKUP_USER \--password=$MYSQL_BACKUP_USER_PASSWORD \--routines --all-databases --single-transaction \> /mysql-backup/test-backup-full-`date +"%Y%m%d"`.sqlecho "create /mysql-backup/test-backup-full-`date +"%Y%m%d"`.sql" >> /mysql-backup/log.txtvolumeMounts:- name: mysql-backupmountPath: /mysql-backup- name: local-timemountPath: /etc/localtimereadOnly: truerestartPolicy: OnFailurevolumes:- hostPath:path: /opt/test/mysql_backuptype: DirectoryOrCreatename: mysql-backup- name: local-timehostPath:path: /etc/localtime
执行
kubectl apply -f /home/mysql-backup-k8s/mysql-full-backup-cron-job.yml
管理定时任务
查看定时任务
[root@master mysql-backup-k8s]# kubectl get cronjob mysql-backup -n testNAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGEmysql-backup 0 0 * * * False 0 <none> 8s
查看执行情况
[root@master mysql-backup-k8s]# kubectl get jobs -n testNAME COMPLETIONS DURATION AGEmysql-backup-1585731000 1/1 16s 89s
删除定时任务
方法1:
kubectl delete -f /home/mysql-backup-k8s/mysql-full-backup-cron-job.yml
方法2:
kubectl delete cronjob mysql-backup
