RDS MySQL支持全量备份导入功能,可以将对象存储OSS中的MySQL备份数据导入至备份列表,并恢复至新实例。

前提条件

  • 使用的阿里云账号为主账号。
  • 自建数据库版本为MySQL 5.7(仅支持5.7.29及以下的小版本)。
  • 已在目标地域创建了OSS Bucket。如未创建,请参见创建存储空间
    说明 该目标地域必须为您希望创建RDS实例的地域。

上云流程概览

本文包含如下步骤:

步骤一:安装Percona Xtrabackup

步骤二:安装MySQL Backup Helper

步骤三:备份自建库并上云

说明 上云流程的整体操作视频请参见操作视频

演示环境说明

本文演示所用的环境为阿里云ECS实例,镜像为CentOS Linux release 8.3.2011版本,更多详情请参见创建ECS实例

使用限制

限制项 详情
MySQL版本限制 目前仅支持自建MySQL 5.7数据库上云。
自建MySQL限制
  • 自建库的数据必须存储在MySQL中配置的datadir数据目录下。您可在命令行执行mysqladmin -u<自建库root账号> -p<自建库root密码> variables | grep datadir命令,确认当前MySQL的datadir数据目录。
  • innodb_data_file_path参数必须为默认的ibdata1
备份限制
  • 备份完成之后,自建库中产生的增量数据不会保留在备份文件中。
  • 备份自建MySQL 5.7数据库必须使用Percona XtraBackup 2.4版本。
  • 使用Percona XtraBackup备份自建库时不支持传入--tables--tables-exclude--tables-file--databases--databases-file选项。
  • 无法读取OSS Bucket中的加密文件,因此创建OSS Bucket时服务端加密方式需要选
  • 不支持差异备份文件或日志备份文件。
  • 全量备份文件名不能包含特殊字符,否则会导致上云失败。
  • 授予RDS服务账号访问OSS的权限以后,系统会在访问控制RAM的角色管理中创建名为AliyunRDSImportRole的角色。请勿修改或删除这个角色,否则会导致上云任务无法下载备份文件而失败。
  • 在OSS备份数据恢复上云任务没有完成之前,请不要删除OSS上的备份文件,否则会导致上云任务失败。
  • OSS中的备份文件名仅支持以_QP.XB或TAR.GZ为后缀名。
OSS限制
  • 使用命令行分片上传,单个文件需限制在16 TB以内,详情请参见OSS使用限制
  • 存储备份文件的OSS区域必须与还原到的RDS实例区域一致。
恢复限制
  • 为防止误操作覆盖实例数据,当前仅支持恢复数据至新实例。
  • 无法恢复数据大小超过RDS MySQL所支持的最大存储空间的数据库,更多规格信息,请参见主实例规格列表
  • 导入备份时,系统会创建一个临时实例并将备份数据导入至该临时实例,恢复时从该临时实例中提取数据。默认情况下,该临时实例预配存储空间大小为备份数据大小的5倍,如导入备份出现存储空间不足,可自行调整该存储空间。
  • 恢复操作不会导入自建库的用户账户,自定义函数和存储过程。请记录上述信息,在恢复完成后手动添加至RDS实例。
  • 恢复操作不会导入时区信息。请记录自建库的时区信息,在恢复完成后手动进行设置。
  • 目前仅支持将备份文件恢复至RDS MySQL 5.7基础版(SSD云盘)按量付费实例。
复制限制
  • 仅支持基于全局事务标识GTID(Global Transaction Identifier)方式的复制。因此,自建库需要开启GTID复制,将gtid_modeenforce_gtid_consistency均设置为ON
  • 备份校验记录默认保存7天,超过7天的备份记录以及生成的快照会自动删除,建立复制关系操作应在实例恢复完成后尽快实施,避免自建库的Binlog被清理,以及备份校验后生成的快照被删除。

费用说明

用户备份导入至RDS后,24小时内免收存储费。超过24小时会收取费用,收费明细请参见存储费用
说明 上述规则2021年07月15日起生效。

步骤一:安装Percona Xtrabackup

Percona XtraBackup是Percona公司开发的用于MySQL数据库物理热备的备份工具,支持多种数据库引擎。如您使用的是Ubuntu系统,请参见附录1:Ubuntu安装Xtrabackup

  1. 安装Xtrabackup包。
    yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm
  2. 启用存储库。
    percona-release enable-only tools release
  3. 安装Xtrabackup 2.4版本。
    yum install -y percona-xtrabackup-24

步骤二:安装MySQL Backup Helper

前提条件:

  • 已安装Golang。如未安装,请在命令行中执行下列命令安装。
    yum install -y go
  • 已安装unzip。如未安装,请在命令行中执行下列命令安装。
    yum install -y unzip
说明 上述命令仅限CentOS系统使用,如您使用的是Ubuntu系统,请参见附录2:Ubuntu安装Golang和Unzip
  1. 下载MySQL Backup Helper源码包。
    wget https://github.com/aliyun/mysql-backup-helper/archive/refs/heads/master.zip
    说明 您可访问mysql-backup-helper获取最新版的源码包。
  2. 解压MySQL Backup Helper源码包。
    unzip master.zip
  3. 进入mysql-backup-helper-master文件夹,对main.go文件进行编译,获得backup_helper可执行文件。
    cd mysql-backup-helper-master
    go build -a -o backup-helper main.go
    说明 如无法正常完成编译,请参见附录4:设置Go代理
  4. 进入oss_stream文件夹,对oss_stream.go文件进行编译,获得oss_stream可执行文件。
    cd oss_stream
    go build -a -o oss_stream oss_stream.go
    说明 如无法正常完成编译,请参见附录4:设置Go代理

步骤三:备份自建库并上云

  1. 通过backup-helper验证当前自建MySQL数据库是否支持备份。
    cd ~/mysql-backup-helper-master && ./backup-helper -host <自建库主机地址> -port <自建库端口号> -user <自建库root账号> --password <自建库root密码>
    backup_helper
  2. 验证通过后,全量备份自建库并将备份文件上传至阿里云对象存储OSS。如您未提前创建OSS Bucket,请参见本文的前提条件。
    innobackupex --backup --host=<自建库主机地址> --port=<自建库端口号> --user=<自建库root账号> --password=<自建库root密码> --stream=xbstream --compress <备份文件临时目录> | ./mysql-backup-helper-master/oss_stream/oss_stream -accessKeyId <阿里云账号的AccessKey ID> -accessKeySecret <阿里云账号的AccessKey Secret> -bucketName <OSS Bucket名称> -endpoint <OSS Bucket的地域节点> -objectName <自定义备份文件名>

    示例:

    innobackupex --backup --host=127.0.0.1 --port=3306 --user=root --password=Aa123456@ --stream=xbstream --compress /root/mysql/data | ./mysql-backup-helper-master/oss_stream/oss_stream -accessKeyId LTAI5tCqY18jvvKk******** -accessKeySecret 4A5Q7ZVzcYnWMQPysXFxld******** -bucketName test -endpoint oss-********.aliyuncs.com -objectName backup_qp.xb
    说明
    • 此过程的时长取决于实例在备份时的状态,例如备份期间原实例中有太多写入操作,导致实例大量生成redo日志、或实例中执行了大型的事务等情况下,备份时间会变长。当备份顺利完成后,屏幕上会打印出completed OK !
    • 数据量越大,备份时间越长。如果数据量较大,为了避免意外登出导致备份中断,建议通过nohup命令在后台进行备份。命令示例如下:
      nohup sh -c 'innobackupex --backup --host=127.0.0.1 --port=3306 --user=root --password=Aa123456@ --stream=xbstream --compress /root/mysql/data | ./mysql-backup-helper-master/oss_stream/oss_stream -accessKeyId LTAI5tCqY18jvvKk******** -accessKeySecret 4A5Q7ZVzcYnWMQPysXFxld******** -bucketName test -endpoint oss-ap-southeast-1.aliyuncs.com -objectName backup_qp.xb' &
    • 如您暂时无法使用阿里云OSS服务,可先将自建库备份至本地,等可以顺利访问OSS后再上传。更多信息,请参见附录3:分步骤执行全量备份和上传至OSS
    • 完成此步骤后,可以登录OSS控制台确认备份文件是否上传成功。如未上传成功,请重复执行步骤2
  3. RDS实例列表的左上角,选择希望创建RDS实例的地域。
  4. 在左侧导航栏中,单击备份管理,并在页面中间单击备份列表页签。
  5. 在页面右侧单击导入备份。在弹出的向导窗口中,仔细阅读相关说明并单击下一步,直至切换到3. 数据导入页签。
  6. 选择备份文件所在的OSS Bucket名称,在下方列出的文件名中选中目标备份文件、选择将备份文件导入哪个可用区,并单击确定
    导入备份
    说明
    • 如您未授权RDS访问OSS,请在页面下方单击授权地址,在跳转到的页面左下角单击同意授权授权地址
    • 系统在用户备份中生成备份文件校验任务,等待任务状态校验中变更为镜像生产完成。备份文件的校验时长取决于实例在备份时的状态,例如备份期间原实例中有太多写入操作,导致实例大量生成redo日志、或实例中执行了大型的事务等情况下,校验时间会变长。
  7. 单击目标备份ID右侧操作列下的恢复
    恢复
  8. 设置如下参数,单击下一步:实例配置
    基础资源
    类别 说明
    主节点可用区 选择主实例所在可用区。
    说明 本参数仅适用于导入时未选择可用区的用户备份。导入时已选择可用区的用户备份不显示本参数。
    实例规格
    • 通用规格(入门级):通用型的实例规格,独享被分配的内存和I/O资源,与同一服务器上的其他通用型实例共享CPU和存储资源。
    • 专属规格:完全独享虚拟主机或物理主机资源,开放主机权限,可直接在主机上按需分配多个数据库实例。更多信息,请参见添加主机
    说明 每种规格都有对应的CPU核数、内存、最大连接数和最大IOPS。详情请参见主实例规格列表
    存储空间 存储空间包括数据空间、系统文件空间、Binlog文件空间和事务文件空间。调整存储空间时最小单位为5 GB。
  9. 设置如下参数,单击下一步:确认订单
    实例配置
    类别 说明
    网络类型 专有网络:也称为VPC(Virtual Private Cloud)。VPC是一种隔离的网络环境,安全性和性能均高于传统的经典网络。选择专有网络时您需要选择对应的VPC主节点交换机
    说明 请确保选择的VPC与需要连接的ECS一致,否则它们无法通过内网互通。
    参数模板 设置实例参数模板。方便您使用系统参数模板或已创建的自定义参数模板预设实例的参数,更多信息,请参见使用参数模板
    时区 设置实例时区。
    表名大小写 设置实例表名是否区分大小写。当本地数据库区分大小时,您可以选择区分大小写,便于您迁移数据。
  10. 确认参数配置,选择购买量,选中服务协议,单击去支付完成支付。
    确认订单
    说明 实例的创建需要1~5分钟时间,请耐心等待。

附录1:Ubuntu安装Xtrabackup

  1. 下载最新版的Xtrabackup包。
    wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb
  2. 安装Xtrabackup包。
    sudo dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb
  3. 启用存储库。
    percona-release enable-only tools release
  4. 更新本地仓库的软件列表。
    apt-get update
  5. 安装Xtrabackup 2.4版本。
    sudo apt-get install -y percona-xtrabackup-24
  6. 安装qpress。
    sudo apt-get install -y qpress
    说明 qpress是Xtrabuckup的解压缩工具,由于Ubuntu系统安装XtraBackup不会集成qpress,因此需要此步骤单独进行安装。
说明 执行上述任意步骤时如出现类似于The following packages have unmet dependencies的提示,请按照提示执行apt-get -f install命令安装缺失的依赖包后重新执行。

附录2:Ubuntu安装Golang和Unzip

  • 安装Golang
    sudo apt-get install -y software-properties-common
    sudo add-apt-repository ppa:longsleep/golang-backports
    sudo apt-get update
    sudo apt-get install -y golang-go
  • 安装Unzip
    sudo apt-get -y install unzip

附录3:分步骤执行全量备份和上传至OSS

  1. 全量备份数据库至本地。
    innobackupex --backup --host=<自建库主机地址> --port=<自建库端口号> --user=<自建库root账号> --password=<自建库root密码> --stream=xbstream --compress <备份文件临时目录> > /<备份路径>/<备份文件名>_qp.xb

    示例:

    innobackupex --backup --host=127.0.0.1 --port=3306 --user=root --password=Aa123456@ --stream=xbstream --compress /root/mysql/data > /root/backup_qp.xb
  2. 通过OSS_Stream将备份文件上传至OSS。
    cat /<备份路径>/<备份文件名>_qp.xb | ./mysql-backup-helper-master/oss_stream/oss_stream -accessKeyId LTAI5tCqY18jvvKk******** -accessKeySecret 4A5Q7ZVzcYnWMQPysXFxld******** -bucketName test -endpoint oss-********.aliyuncs.com -objectName backup_qp.xb

    示例:

    cat /root/backup_qp.xb | ./mysql-backup-helper-master/oss_stream/oss_stream -accessKeyId LTAI5tCqY18jvvKk******** -accessKeySecret 4A5Q7ZVzcYnWMQPysXFxld******** -bucketName test -endpoint oss-********.aliyuncs.com -objectName backup_qp.xb

附录4:设置Go代理

如果您使用的是国内地域的ECS,可能无法正常完成步骤二的编译流程,此时需要执行如下命令给Go使用阿里云的代理,然后重新执行编译。
go env -w GO111MODULE=on
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
说明 如果设置了上述代理后还是出现编译出错的情况,则可能是代理地址暂不可用造成的。此时可以在搜索引擎中搜索其他Go的代理地址来替换上述命令中的https://mirrors.aliyun.com/goproxy/,direct部分。推荐搜索关键词:Go代理

操作视频