备份与恢复
为防止数据丢失,建议您及时进行备份。一旦出现数据库异常,可恢复已备份数据。
方案选择
方案 | 说明 | 建议与注意 |
---|---|---|
立即备份 | 新增 MySQLBackup 以立即备份指定数据库。支持全量及增量备份。 | 用于即将对数据库进行风险操作,或不愿等到备份时段时。 |
定时备份 | 新增 MySQLBackupSchedule,平台将在指定的备份时段,自动对指定数据库执行周期性备份。支持全量及增量备份。 | 用于例行备份,建议避开业务峰值时间段。 |
全量备份 | 通过 mysqldump 命令备份数据库里的所有数据。 - 优点:更周全的数据保障 - 缺点:占用空间多,占用磁盘 IO,会受锁表影响 |
建议至少一周进行一次全量备份。 |
增量备份 | 在全量备份的基础上,基于二进制日志备份数据库的增量数据。可使用时间段或 GTID 段作为增量区间。 - 优点:占用空间少,占用资源少,无需锁表 - 缺点:必须按顺序恢复 |
建议每天都进行一次增量备份。 |
恢复 | 新增 MySQLRestore,将备份数据恢复至目标实例。支持全量及增量恢复。 | - 恢复过程依赖备份实例及备份文件。请勿删除任一可能会用于恢复的实例或文件。 - 恢复增量数据时,如果存在多个增量备份,需按顺序逐一恢复。 |
前提条件
请提前准备 S3(Amazon Simple Storage Service) 存储用于存储备份数据,并在平台中以保密字典的形式记录 S3 的登录凭证。
-
除了亚马逊的对象存储,也可使用其他兼容 S3 接口的存储,例如 MinIO。
-
S3 存储应预留足够空间,且 S3 终端节点(Endpoint)需与集群节点间保持网络互通。
-
请使用 Opaque 类型的保密字典,且内容如下。
键 值 accessKey 与 S3 存储中一致 secretKey 与 S3 存储中一致
立即备份
-
在左侧导航栏中,单击 应用商店管理 > Operators。
-
在 已部署 Operators 页签中,单击 mysql-mgr-operator。
-
单击 MySQLBackup 实例卡片中的 创建实例。
-
参考以下说明配置相关参数。
参数 说明 命名空间 需与待备份的 MySQLCluster 实例同一命名空间。 Cluster 待备份的 MySQLCluster 实例。 Storage S3 存储相关信息。其中,验证密钥 处需填入前提条件中保密字典的名称。 Incremental 仅增量备份时需要设置。
- 如果指定了备份区间,将备份区间中的增量变更。备份区间包括 UTC 时间段或 GTID 区间段。
- 如果未指定备份区间,将备份当前实例中所有已关闭的二进制日志(从未有过备份时),或从已有备份数据中记录的最后一个 GTID 开始增量备份。Databases 仅全量备份时需要设置。需填入待备份的数据库。 -
单击 创建 按钮。备份需要一定耗时,请耐心等待。
备份完成后,MySQLBackup 的 YAML 中可以看到备份文件的信息 status.outcome.location。
全量备份
apiVersion: mysql.middleware.alauda.io/v1alpha1 kind: MySQLBackup metadata: name: mysql-mgr-backup status: conditions: - lastTransitionTime: '2021-06-21T06:04:41Z' message: '' reason: '' status: 'True' type: Scheduled - lastTransitionTime: '2021-06-21T06:04:41Z' message: '' reason: '' status: 'True' type: Running - lastTransitionTime: '2021-06-21T06:04:41Z' message: '' reason: '' status: 'True' type: Complete outcome: location: sourcename-project-full.20210621060441.sql.gz #成功备份到目标存储桶下的备份文件 timeCompleted: '2021-06-21T06:04:41Z' timeStarted: '2021-06-21T06:04:41Z'
增量备份
apiVersion: mysql.middleware.alauda.io/v1alpha1 kind: MySQLBackup metadata: name: incrmental-backup namespace: ns status: conditions: - lastTransitionTime: '2021-09-08T01:58:53Z' message: '' reason: '' status: 'True' type: Scheduled - lastTransitionTime: '2021-09-08T01:58:53Z' message: '' reason: '' status: 'True' type: Running - lastTransitionTime: '2021-09-08T01:58:54Z' message: '' reason: '' status: 'True' type: Complete outcome: error: '' info: binlogs: - mysql-1-bin.000001 - mysql-1-bin.000002 - mysql-1-bin.000003 index: 1 lastGTID: fe283360-1044-11ec-8949-000000aadfa9:410 startGTID: fe283360-1044-11ec-8949-000000aadfa9:55 location: sourcename-ns-incr-backup-20210908015853.tar.gz #成功备份到目标存储桶下的备份文件 state: 200 timeCompleted: '2021-09-08T01:58:54Z' timeStarted: '2021-09-08T01:58:53Z'
定时备份
-
在左侧导航栏中,单击 应用商店管理 > Operators。
-
单击 MySQL Group Replication Operator 卡片中的 详情。
-
单击 MySQLBackupSchedule 实例卡片中的 创建实例。
-
参考以下说明配置相关参数。
参数 说明 命名空间 需与待备份的 MySQLCluster 实例同一命名空间。 定时策略 需为符合 定时触发规则 的 Crontab 表达式。 MySQL 实例 待备份的 MySQLCluster 实例。 Storage S3 存储相关信息。其中,验证密钥 处需填入前提条件中保密字典的名称。 Incremental 仅增量备份时需要设置。
- 如果指定了备份区间,将备份区间中的增量变更。备份区间包括 UTC 时间段或 GTID 区间段。
- 如果未指定备份区间,将备份当前实例中所有已关闭的二进制日志(从未有过备份时),或从已有备份数据中记录的最后一个 GTID 开始增量备份。Databases 仅全量备份时需要设置。需输入待备份的数据库。 -
单击 创建 按钮。将立刻生成 MySQLBackupSchedule 实例,后续也会定时生成 MySQLBackup 实例,代表每次的定时备份任务。
备份完成后,在 MySQLBackup 实例(名称类似
{MySQLBackupSchedule 实例名称}-{时间戳}
) YAML 中可以看到备份文件的信息 status.outcome.location。注意:自动备份实例名称中的时间戳为 UTC 时间,下图中表示此备份于北京时间 2021 年 06 月 24 日 18:00 开始执行。
恢复
-
在左侧导航栏中,单击 应用商店管理 > Operators。
-
单击 MySQL Group Replication Operator 卡片中的 详情。
-
单击 MySQLRestore 实例卡片中的 创建实例。
-
参考以下说明配置相关参数。
参数 说明 命名空间 需与待恢复的 MySQLCluster 实例同一命名空间。 Cluster 待恢复的 MySQLCluster 实例。 Backup 用于恢复的 MySQLBackup 实例。 Condition - 恢复全量数据:仅需填写待恢复的数据库名称。
- 恢复增量数据:仅需填写待恢复的 UTC 时间段或 GTID 区间段。平台将仅恢复指定区间内的增量数据。注意:如果存在多个增量备份,需按顺序恢复。 -
单击 创建 按钮。
恢复需要一定耗时,请耐心等待。备份完成后,MySQLRestore 的 YAML 中可以看到完成信息 status.timeCompleted。
apiVersion: mysql.middleware.alauda.io/v1alpha1 kind: MySQLRestore metadata: name: mysql-mgr-restore status: conditions: - lastTransitionTime: '2021-06-28T11:11:40Z' message: '' reason: '' status: 'True' type: Scheduled - lastTransitionTime: '2021-06-28T11:11:40Z' message: '' reason: '' status: 'True' type: Running - lastTransitionTime: '2021-06-28T11:11:40Z' message: '' reason: '' status: 'True' type: Complete timeCompleted: '2021-06-28T11:11:40Z' timeStarted: '2021-06-28T11:11:40Z'