一、云数据库MySQL备份恢复简介
云数据库 MySQL(TencentDB for MySQL)是腾讯云基于开源数据库 MySQL 专业打造的高性能分布式数据存储服务,让用户能够在云中更轻松地设置、操作和扩展关系数据库。同时云数据库MySQL集成了数据库的备份功能,可以针对数据库实现数据库的自动数据备份、手动数据备份以及日志备份。
使用云数据库 MySQL自带的备份功能生成的数据库备份文件会存放在数据库所在地域的备份空间中,根据数据库实例的大小,云数据库 MySQL 会按地域赠送一定额度的免费备份空间,备份大小超出额度后会根据超出的空间大小收取相应的费用。云数据库MySQL数据备份最长保留时间为732天。
当用户因个人原因造成的数据损毁可自行回档修复,使用回档功能可对腾讯云平台中的数据库或表进行回档操作,回档是基于数据备份 日志备份(binlog),可进行实时数据回档。回档功能与自动备份设置的备份周期时间和保留天数相关联,提供基于保留天数下且备份周期时间内数据备份 日志备份(binlog)的回档。
在腾讯云云数据库控制台,能查看到通过自动备份策略或者手动备份生成、存放在云数据库备份空间中的数据库备份文件,如下图所示:
虽然云数据库MySQL自带的备份与回档功能解决了数据库备份与恢复的便利性的问题,但在实际的生产业务场景,还是会有许多的不便之处:
备份文件的长期保存或者归档:云数据库MySQL数据备份最长保留时间为732天,超出这个时间后备份集会被自动删除。而在实际的生产业务中,有些场景或者监管要求备份文件能够保存更长的时间甚至是长期保存。
备份文件的异地保存:在某些行业,例如金融行业,监管层要求核心数据库的备份文件必须要有异地的副本,而当前云数据库 MySQL的备份空间与数据库所在的地域相同。
备份文件的低成本存储:云数据库 MySQL的备份空间超过免费的额度之后会收取费用,对于备份数据的长期保存来说,成本较高。
二、COS应用集成及数据备份
对象存储COS是腾讯云存储产品,是无目录层次结构、无数据格式限制、无容量上限,支持 HTTP/HTTPS 协议访问的分布式存储服务。
COS以存储桶的方式组织数据,存储桶空间无容量上限,按需使用、按量计费、按需扩展。使用COS作为备份存储有如下优势:
- 按需使用按量结算:COS开服即用,开通即可用,登录腾讯云官网注册账号后,一键式开通COS服务,就可使用,无需建设成本。COS提供海量的存储空间,无需规划存储容量。COS提供按量付费的方式,避免资源浪费、降低使用成本。
- 高可靠高可用性:COS提供高达99.99%的服务可用性,以及高达12个9的数据持久性,为数据提供可靠的保障;同时还支持数据的跨地域复制,提供数据的异地灾备能力。
- 数据安全:COS提供多租户权限隔离,支持HTTPS加密传输,支持SSE-KMS加密等多种数据加密方式。
- 低成本:提供具有竞争力的产品定价,提供标准存储、低频存储、归档存储以及深度归档四种类型,并支持数据生命周期管理,进一步降低云存储成本。
基于以上的特性,COS对象存储广泛的应用于各种业务场景,其中数据的备份是最常用的场景之一。
那我们有没有办法能够自动的将云数据库MySQL的备份数据转存一份到COS以解决本分文件的长期保存、异地保存或者低成本存储的问题呢?答案是有,COS集成了一些和数据相关的应用,以实现数据的自动迁移或者备份,其中包括“数据库备份”应用。
云数据库备份是腾讯云对象存储COS基于云函数(Serverless Cloud Function,SCF)为用户提供的数据库备份功能,可以协助用户将腾讯云数据库上的备份文件转存至对象存储进行持久化的保存,以防止数据丢失或损坏。当用户在指定存储桶配置了备份函数规则后,云函数会定期扫描您的数据库备份文件并将文件转存至存储桶中。
下面介绍一下如何配置COS中的“数据库备份”应用,以实现自动将云数据库MySQL中的备份数据转存至COS对象存储。
- 登录腾讯云对象存储控制台,新建存储桶用于存放数据库的备份文件。
- 进入新建的存储桶管理业,单机左侧“函数计算”,选择“云数据库备份函数”。
- 在“云数据库备份函数”中点击“添加函数”按钮。
- 在弹出的“创建云数据库备份函数”页面,输入相应的信息以创建云函数(SCF):
触发器周期:触发云函数运行的周期,可以选择每天、每周以及自定义。自定义策略参考Cron相关文档。
数据库实例:下拉框中选择需要同步备份文件至COS的对应的云数据库MySQL实例。
投递路径:指定数据库备份文件投递的路径,可以选择根目录或者指定前缀。
SCF授权:使用SCF产品功能,需要授予SCF产品一个第三方角色代替您执行访问云资源的权限,选中进行授权。
云函数建立之后,会自动根据预设的策略,周期性的去同步云数据库MySQL备份空间中的数据库备份文件列表,对于MySQL备份空间中新生成的数据库备份集,不管是自动生成还是手动生成的,云函数都会自动将备份数据同步一份至COS存储桶。这样当MySQL备份空间中的备份集过期失效的时候,我们仍然能从COS存储桶中找到对应的备份文件做恢复。
下图显示了云函数自动转存至COS存储桶中的备份集列表以及数据库备份文件:
三、备份文件的自动沉降及归档
腾讯云对象存储COS提供了标准、低频、归档以及深度归档四种存储类型,以满足业务数据不同的性能以及存储成本的需求,并提供了生命周期管理实现数据在各个存储层之间的自动沉降以及自动删除。
转存到COS存储桶之后的备份数据,我们可以结合业务系统或者监管的要求,配置相应的生命周期管理策略,以降低数据的整体存储成本:对于不常使用的数据配置策略自动沉降至低成本的存储;对于可以到期删除的备份数据配置过期策略;对于需要长期归档保存的备份数据沉降至归档或者深度归档。
参考以下下步骤配置存储桶的生命周期管理策略:
- 登录腾讯云对象存储控制台,进入“存储桶列表”,选择需要开启生命周期功能的存储桶。
- 点击“基础配置”->“生命周期”->“添加规则”。
- 根据需求添加生命规则。
应用范围:本生命周期规则可以作用于整个存储桶,也可以作用于指定范围的对象,当前支持基于对象前缀以及对象标签两种方式,可同时指定对象前缀和对象标签。
管理当前版本:可以通过开启管理当前版本对象的选项,沉降或者删除当前版本对象。支持存储桶中的对象由标准存储沉降至低频存储、归档存储和深度归档存储,支持对象到期后删除。其中存储类型由热到冷分别为:标准存储 > 低频存储 > 智能分层存储 > 归档存储 > 深度归档存储,存储类型转换只能由热到冷,不能反向进行。时间是以文件在对象存储上的修改时间为标准开始计算,修改对象的行为等同于重新上传对象。
管理历史版本:通过该选项沉降或者删除历史版本对象。若未开启该选项,我们将默认仅处理最新版本的对象。
清理无历史版本的删除标记:如果对象的最新版本是删除标记(Delete Marker)且该对象的历史版本均已被删除,开启此选项后该删除标记(Delete Marker)也将被删除。该选项不能与管理当前版本文件中的到期删除同时开启。
四、备份文件的异地保存
一些重要的备份数据,出于业务数据的保护需求或者监管要求,需要将备份数据在异地保存另外的一份副本,对于转存至对象存储COS上的云数据库备份文件,COS提供了存储桶复制功能实现备份数据的异地备份。
启用存储桶复制功能之后,源存储桶中的增量对象会自动、异步的复制到目标存储桶中。对源存储桶中的对象进行管理操作时(例如新增、删除对象),COS会自动将这些操作复制到目标存储桶中。
参考以下步骤配置存储桶的复制功能。
1. 开启存储桶复制功能前,需要先启用源存储桶和目标存储桶的“版本控制”功能。登录腾讯云对象存储控制台,进入“存储桶列表”,分别选择源存储桶和目标存储桶,点击“容错容灾管理”->“版本控制”,启用版本控制。
2. 点击“容错容灾管理”->“存储桶复制”->“新增规则”。
3. 根据需求填入目标存储桶信息以及相关配置。
应用范围:需要复制的元存储桶中的对象范围。
资源路径:源存储桶路径。
目标存储桶:对象被复制后存放的存储桶,其所属地域可以与源存储桶相同,不支持选择非当前账号的存储桶。
目标存储类型:对象被复制到目标存储桶后的存储类型。
同步删除标记:开启版本控制的情况下,不指定版本 ID 删除文件会在源存储桶新增一项删除标记。如果选择同步删除标记, 则存储桶复制会将该标记复制到目标存储桶 ;选择不同步,则目标存储桶不会新增删除标记。两种情况下,目标存储桶均不会删除对应文件,用户可通过指定版本 ID 访问对象历史版本。
对于存储桶的复制功能,有两点需要说明:
- 存储桶复制至会复制启用该功能之后的增量数据,对于启用功能前的存量数据,可以使用COS Migration或者MSP工具做迁移。
- 对于源桶中的存储桶级别配置,例如生命周期规则引起的对象操作也不会复制到目标存储桶中,如果对于目标存储桶有数据生命周期管理需求,需要在目标存储桶端单独配置生命周期管理规则。
五、备份文件的恢复
云数据库MySQL支持两种备份类型:
物理备份:物理数据全拷贝(自动备份与手动备份均支持)。
逻辑备份:SQL 语句的备份(手动备份支持)。
物理备份具有备份速度快、备份成功率高、恢复简单高效等优势,所以云数据库MySQL的自动备份目前仅支持物理备份,这里我们也推荐使用物理备份的方式。
云数据库MySQL的物理备份和逻辑备份文件会先经过qpress压缩,然后再经过xbstream打包(xbstream为Percona的一种打包/解压工具)进行压缩与打包后以xb文件的方式存放在云数据库的备份空间,最终这些xb备份文件经过COS的“数据库备份”应用转存至COS存储桶,我们可以使用COS上的对应日期的备份文件恢复数据库到特定的时间点。
下面我们介绍如何使用开源软件Percona Xtrabackup将云数据库MySQL物理备份文件恢复至其他主机上的自建数据库。
前提条件:
- 搭建和备份数据库版本一致的MySQL数据库环境。
- 下载并安装XtraBackup工具,参考Percona XtraBackup官网,选择Percona XtraBackup 2.4.6及以上的版本。
- 安装qpress工具。
wget http://www.quicklz.com/qpress-11-linux-x64.tar
tar -xf qpress-11-linux-x64.tar -C /usr/local/bin
source /etc/profile
参考以下步骤从COS上的备份文件恢复MySQL数据库。
- 从COS上将指定的备份文件下载至新搭建的MySQL服务器上。为了获取更优的下载速度,建议MySQL服务器和COS存储桶在同一个地域,同时使用coscmd工具进行下载。(coscmd工具的使用参考文档:https://cloud.tencent.com/document/product/436/10976。)
- 使用 xbstream 命令将备份文件解包到目标目录。
xbstream -x -C /data < ~/test.xb
- 使用如下命令将目标目录下所有以.qp结尾的文件都解压出来。
xtrabackup --remove-original --decompress --target-dir=/data
- 备份解压出来之后,执行如下命令进行 apply log 操作。
xtrabackup --prepare --target-dir=/data
- 修改文件属性,并检查文件所属为mysql用户。
chown -R mysql:mysql /data
- 将mysql默认的数据目录改为/data并启动mysql服务。
- 登录mysql进行恢复后的数据验证。
mysql> show databases;
--------------------
| Database |
--------------------
| information_schema |
| cosdb |
| mysql |
| performance_schema |
| sys |
--------------------
5 rows in set (0.00 sec)
mysql> use cosdb;
Database changed
mysql> show tables;
-----------------
| Tables_in_cosdb |
-----------------
| mybucket |
-----------------
1 row in set (0.00 sec)
mysql> select count(*) from mybucket;
----------
| count(*) |
----------
| 12436900 |
----------
1 row in set (4.16 sec)