Oracle官方的MySQL Operator是在Kubernetes集群中部署MySQL数据库集群的简单方式。其中一个关键特性是集成备份功能。这篇文章介绍如何利用备份这个特性备份到AWS S3对象存储中。
1.利用MySQL operator创建一个集群
创建MySQL集群使用root密钥
kubectl create secret generic mypwds \
--from-literal=rootUser=root \
--from-literal=rootHost=% \
--from-literal=rootPassword="sakila"
保存下面的配置为mysql.yaml
apiVersion: mysql.oracle.com/v2
kind: InnoDBCluster
metadata:
name: mycluster
spec:
instances: 3
router:
instances: 1
secretName: mypwds
tlsUseSelfSigned: true
应用这个配置
kubectl apply -f mysql.yaml
2.定义备份计划
MySQL operator创建备份需要两个组件
* backup schedule 定义备份啥时候执行
* backup profile 配置备份存储位置和MySQL导出参数
这两个组件可以独立创建,备份计划通过spec.backupSchedules字段定义,其中schedule字段是个cron表达式,定义了备份何时执行,具体如下配置所示
apiVersion: mysql.oracle.com/v2
kind: InnoDBCluster
metadata:
name: mycluster
spec:
instances: 3
router:
instances: 1
secretName: mypwds
tlsUseSelfSigned: true
backupSchedules:
- name: hourly
enabled: true
schedule: "0 * * * *"
backupProfileName: hourly-backup
backupProfileName字段引用的是下一步创建的备份配置
3. 定义备份配置
备份配置通过spec.backupProfiles字段定义,每份配置都有一个name字段和dumpInstance字段
apiVersion: mysql.oracle.com/v2
kind: InnoDBCluster
metadata:
name: mycluster
spec:
instances: 3
router:
instances: 1
secretName: mypwds
tlsUseSelfSigned: true
backupSchedules:
- name: hourly
enabled: true
schedule: "0 * * * *"
backupProfileName: hourly-backup
backupProfiles:
- name: hourly-backup
dumpInstance:
storage:
...
其中dumpInstance字段的storage定义了备份存储相关的配置,具体配置取决于使用的不同类型的存储,比如选用S3存储的话,需要填写S3相关的配置。
首先,需要创建S3 secret
apiVersion: v1
kind: Secret
metadata:
name: s3-secret
stringData:
credentials: |
[default]
aws_access_key_id = YOUR_S3_ACCESS_KEY
aws_secret_access_key = YOUR_S3_SECRET_KEY
并应用
kubectl apply -f s3-secret.yaml
然后在storage下的s3字段添加以下配置:
* bucketName - 备份的桶
* prefix - 前缀,比如/mysql,定义备份文件夹
* endpoint - 桶域名
* config - s3 secret
* profile - 设置成default
完整的配置如下:
apiVersion: mysql.oracle.com/v2
kind: InnoDBCluster
metadata:
name: mycluster
spec:
instances: 3
router:
instances: 1
secretName: mypwds
tlsUseSelfSigned: true
backupSchedules:
- name: hourly
enabled: true
schedule: "0 * * * *"
backupProfileName: hourly-backup
backupProfiles:
- name: hourly-backup
dumpInstance:
storage:
s3:
bucketName: backups
prefix: mysql
config: s3-secret
profile: default