#备份与恢复
#功能介绍
数据库备份与恢复是确保数据安全和业务连续性的关键功能。通过定期备份数据库,可以在发生数据丢失、损坏或误操作时快速恢复数据,从而最大限度地减少业务中断和数据损失。
#前提条件:
备份前,请根据业务数据量准备一个外部兼容 S3 的存储。
- 外部 S3 存储:S3(Amazon Simple Storage Service)是亚马逊提供的对象存储服务。如果需要备份数据到您自己的 S3 桶,请与管理员确认该 S3 存储已与您的项目集成。
#配置存储信息
创建 S3 secret
kubectl -n ${namespace} create secret generic ${secret_name} --from-literal=AWS_ACCESS_KEY_ID=${access_key} --from-literal=AWS_SECRET_ACCESS_KEY=${secret_key}进入 Backup Center -> External S3 Storage 页面,点击创建 S3 存储,填写对应信息并创建。
确保存储的外部 S3 状态显示为可访问。
#操作步骤
#配置自动备份
在 mysqlschedules 资源的 spec 中添加自动备份配置信息。
kubectl patch mysqlschedules -n ${namespace} ${instance_name}-schedule --type='merge' --patch '
spec:
expiryDays: 7
full:
cron: 0 18 * * 6
enable: true
incr:
cron: 0 19 * * 0,1,2,3,4,5
enable: true
storage:
s3:
bucket: ${bucket}
endpoint: ${endpoint}
region: ${region}
secret:
name: ${secretName}
'| 参数 | 说明 |
|---|---|
| expiryDays | 备份数据的保留天数 |
| full.cron | 全量备份的 Cron 表达式 |
| incr.cron | 增量备份的 Cron 表达式 |
| storage.s3.bucket | 桶名称 |
| storage.s3.endpoint | S3 存储的 endpoint |
| storage.s3.region | S3 存储的 region |
| storage.s3.secret.name | S3 存储的 secret 名称 |
-
在左侧导航栏点击 MySQL-MGR。
-
点击 Namespace Name。
-
点击 Instance Name。
-
在 Backup & Restore 标签页,点击编辑。
-
启用 Automatic Backup 并设置参数。
注意:Storage Location 为当前项目可用的 S3 存储。
-
点击 Update。
注意:
-
自动备份名称中的时间戳为 UTC 时间(与 Controller Manager 相同),表示该备份于北京时间 2021 年 2 月 2 日 18:00 开始执行。
-
如果自动备份时间到达时实例不处于 Running 状态,平台将等待实例就绪后再开始备份。
#创建手动备份
确保实例状态为 Running
-
创建数据备份
kubectl -n ${namespace} create -f - <<EOF apiVersion: mysql.middleware.alauda.io/v1 kind: MySQLBackup metadata: name: ${backup_name} namespace: ${namespace} spec: cluster: name: ${instance_name} storage: s3: bucket: ${bucket} endpoint: ${endpoint} region: ${region} secret: name: ${secret_name} type: ${type} EOF参数 说明 backup_name 备份资源名称 namespace 需要备份的实例所在的命名空间 instance_name 需要备份的实例名称 storage.s3.bucket 桶名称 storage.s3.endpoint S3 存储的 endpoint storage.s3.region S3 存储的 region storage.s3.secret.name S3 存储的 secret 名称 type 备份类型:full 或 increment -
等待备份完成并查看备份状态
kubectl get MySQLBackup -n ${namespace} ${backup_name}
-
在左侧导航栏点击 MySQL-MGR。
-
点击 Namespace Name。
-
点击 Instance Name。
-
在 Backup & Restore 标签页,点击 Create Backup。
-
设置参数后点击 Create。备份时长取决于数据量和网络状况,请耐心等待。
#使用备份恢复
-
创建 MySQLRestore 以恢复数据
kubectl -n ${namespace} create -f - <<EOF apiVersion: middleware.alauda.io/v1 kind: MySQLRestore metadata: labels: mysql/arch: mgr name: ${restore_name} namespace: ${namespace} spec: mgr: backup: name: ${backup_name} cluster: name: ${target_instance_name} source: name: ${source_instance_name} EOF参数 说明 restore_name 恢复资源名称 namespace 需要恢复的实例所在的命名空间 backup_name 用于恢复的全量备份资源名称 target_instance_name 恢复数据的目标实例名称 source_instance_name 备份资源来源的实例名称 -
等待恢复完成并查看恢复状态
kubectl get MySQLRestore -n ${namespace} ${restore_name}
-
在左侧导航栏点击 MySQL-MGR。
-
点击 Namespace Name。
-
点击 Instance Name。
-
在 Backup & Restore 标签页,点击 Database Restore。
-
选择目标实例并点击 Restore。请耐心等待,直到恢复记录显示为 Restore Successful。
#删除备份
kubectl delete MySQLBackup -n ${namespace} ${backup_name}-
在左侧导航栏点击 MySQL-MGR。
-
点击 Namespace Name。
-
点击 Instance Name。
-
在 Backup & Restore 标签页,点击 Delete 并确认。
删除 S3 备份数据时,也会同时删除 S3 存储中的数据。