在Kubernetes中,备份MySQL最常见的方案:
CronJob + mysqldump方案
kind: CronJob
apiVersion: batch/v1
metadata:name: mysql1-backupnamespace: middleware-mysql
spec:schedule: 0/10 * * * *concurrencyPolicy: Allowsuspend: falsejobTemplate:metadata:creationTimestamp: nullspec:template:spec:volumes:- name: backup-volumepersistentVolumeClaim:claimName: mysql1-backupcontainers:- resources: {}terminationMessagePath: /dev/termination-logname: mysql1-backupcommand:- /bin/sh- '-c'env:- name: DB_HOSTvalue: mysql1.middleware-mysql- name: DB_USERvalue: root- name: DB_PASSWORDvalueFrom:secretKeyRef:name: mysql1key: mysql-root-password- name: DB_NAMEvalue: test- name: TZvalue: Asia/ShanghaiimagePullPolicy: IfNotPresentvolumeMounts:- name: backup-volumemountPath: /mnt/backupterminationMessagePolicy: Fileimage: 'mysql:5.7.30'args:- |echo "starting backup database ${DB_NAME}..."mysqldump -h ${DB_HOST} -u ${DB_USER} -p${DB_PASSWORD} ${DB_NAME} > /mnt/backup/${DB_NAME}-$(date +\%F-\%H\%M\%S).sqlecho "finished backup database ${DB_NAME}..."echo "start cleaning old backup files , remain three "cd /mnt/backup && ls -1t *.sql | awk 'NR>3' | xargs rm -frestartPolicy: OnFailuresuccessfulJobsHistoryLimit: 3failedJobsHistoryLimit: 1
在此之前,我们要创建一个PVC:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: mysql1-backupnamespace: middleware-mysql
spec:accessModes:- ReadWriteOnceresources:requests:storage: 500GistorageClassName: 'your_storageclassname'volumeMode: Filesystem
status:phase: BoundaccessModes:- ReadWriteOncecapacity:storage: 500Gi