在Kubernetes中,备份MySQL最常见的方案:
CronJob + mysqldump方案
yaml
kind: CronJob
apiVersion: batch/v1
metadata:
name: mysql1-backup
namespace: middleware-mysql
spec:
schedule: 0/10 * * * *
concurrencyPolicy: Allow
suspend: false
jobTemplate:
metadata:
creationTimestamp: null
spec:
template:
spec:
volumes:
- name: backup-volume
persistentVolumeClaim:
claimName: mysql1-backup
containers:
- resources: {}
terminationMessagePath: /dev/termination-log
name: mysql1-backup
command:
- /bin/sh
- '-c'
env:
- name: DB_HOST
value: mysql1.middleware-mysql
- name: DB_USER
value: root
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: mysql1
key: mysql-root-password
- name: DB_NAME
value: test
- name: TZ
value: Asia/Shanghai
imagePullPolicy: IfNotPresent
volumeMounts:
- name: backup-volume
mountPath: /mnt/backup
terminationMessagePolicy: File
image: '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).sql
echo "finished backup database ${DB_NAME}..."
echo "start cleaning old backup files , remain three "
cd /mnt/backup && ls -1t *.sql | awk 'NR>3' | xargs rm -f
restartPolicy: OnFailure
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 1
在此之前,我们要创建一个PVC:
yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: mysql1-backup
namespace: middleware-mysql
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 500Gi
storageClassName: 'your_storageclassname'
volumeMode: Filesystem
status:
phase: Bound
accessModes:
- ReadWriteOnce
capacity:
storage: 500Gi