MySQL 5.7、8.0自建数据库全量上云

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

前提条件

  • 自建MySQL数据库必须符合上云条件。具体详情,请参见附录:使用限制

  • 已在目标地域创建了OSS Bucket。如未创建,请参见控制台创建存储空间

    说明

    该目标地域必须为您希望创建RDS实例的地域。

上云流程概览

本文包含如下步骤:

步骤一:安装Percona Xtrabackup

步骤二:安装MySQL Backup Helper

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

演示环境说明

本文演示所用的环境为阿里云ECS实例,镜像为CentOS Linux release 8.3.2011版本,其他版本请适配相关命令。如何创建ECS实例,请参见创建ECS实例

步骤一:安装Percona Xtrabackup

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

请根据MySQL数据库的版本选择Xtrabackup的版本。

MySQL 5.7

wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.29/binary/redhat/8/x86_64/percona-xtrabackup-24-2.4.29-1.el8.x86_64.rpm
yum localinstall percona-xtrabackup-24-2.4.29-1.el8.x86_64.rpm

MySQL 8.0

wget https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.35-31/binary/redhat/8/x86_64/percona-xtrabackup-80-8.0.35-31.1.el8.x86_64.rpm
yum localinstall percona-xtrabackup-80-8.0.35-31.1.el8.x86_64.rpm

步骤二:安装MySQL Backup Helper

前提条件

  • 已安装Golang。如未安装,请在命令行中执行下列命令安装。

    sudo yum install -y go
  • 已安装unzip。如未安装,请在命令行中执行下列命令安装。

    sudo 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. 通过MySQL Backup Helper验证当前自建MySQL数据库是否支持备份。

    cd ~/mysql-backup-helper-master && ./backup_helper -host <自建库主机地址> -port <自建库端口号> -user <自建库root账号> --password <自建库root密码>

    backup_helper

  2. 验证通过后,全量备份自建库并将备份文件上传至阿里云对象存储OSS。如您未提前创建OSS Bucket,请参见本文前提条件

    请根据MySQL数据库的版本选择命令。

    MySQL 5.7

    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

    数据量越大,备份时间越长。如果数据量较大,为了避免意外登出导致备份中断,建议通过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' &

    MySQL 8.0

    xtrabackup --backup --host=<自建库主机地址> --port=<自建库端口号> --user=<自建库root账号> --password=<自建库root密码> --stream=xbstream  <备份文件临时目录> | ./mysql-backup-helper-master/oss_stream/oss_stream -accessKeyId <阿里云账号的AccessKey ID> -accessKeySecret <阿里云账号的AccessKey Secret> -bucketName <OSS Bucket名称> -endpoint <OSS Bucket的地域节点> -objectName <自定义备份文件名>

    示例:

    xtrabackup --backup --host=127.0.0.1 --port=3306 --user=root --password=Aa123456@ --stream=xbstream  /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

    数据量越大,备份时间越长。如果数据量较大,为了避免意外登出导致备份中断,建议通过nohup命令在后台进行备份。命令示例如下:

    nohup sh -c 'xtrabackup --backup --host=127.0.0.1 --port=3306 --user=root --password=Aa123456@ --stream=xbstream  /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' &
    说明
    • 此过程的时长取决于实例在备份时的状态,例如备份期间原实例中有太多写入操作,导致实例大量生成redo日志、或实例中执行了大型的事务等情况下,备份时间会变长。当备份顺利完成后,屏幕上会打印出completed OK !

    • 如您暂时无法使用阿里云OSS服务,可先将自建库备份至本地,等可以顺利访问OSS后再上传。更多信息,请参见附录3:分步骤执行全量备份和上传至OSS

    • 完成此步骤后,可以登录OSS控制台确认备份文件是否上传成功。如未上传成功,请重复执行步骤2

  3. 登录RDS实例列表,在页面左上角选择地域,在左侧导航栏中单击备份管理

  4. 单击用户备份页签下的导入备份按钮。

  5. 在弹出的数据导入向导对话框中,仔细阅读相关说明并单击下一步,直至切换到3. 数据导入页签。

    说明

    向导窗口引导您如何导入备份,详情如下。更多操作,请参见分步骤执行全量备份并上传至OSS

    • 1. 备份您的数据库:全量备份自建库中的数据。

    • 2. 上传备份文件到OSS:将自建库的全量备份数据上传到OSS。

  6. 3. 数据导入页签中,配置如下参数,并单击确定

    参数名

    说明

    MySQL版本

    系统自动显示为5.7/8.0

    说明

    仅支持导入备份自建数据库的版本为MySQL 5.7或8.0。

    地域

    步骤1中选择的地域,该地域需要和备份文件所在的OSS Bucket的地域一致。

    OSS Bucket

    选择自建库备份文件所在的OSS Bucket。关于OSS Bucket的更多信息,请参见上传文件

    OSS文件名

    选择OSS Bucket中的自建库备份文件。您可以在OSS文件名右侧的文本框中输入备份文件的文件名快速查找。本功能支持模糊匹配和精确匹配。

    说明

    OSS中的备份文件必须为_QP.XB格式,或者将_QP.XB格式的文件压缩为TAR.GZ格式进行存储。更多限制,请参见附录:使用限制

    备注

    自定义备份文件的备注信息。

    可用区

    设置用户备份的可用区。选择可用区后,系统会在该可用区内创建一个秒级快照,大幅节省备份导入所需要的时间。

    说明

    用户备份导入完成,并通过其恢复到新实例时,该可用区即为新实例所在的可用区。

    存储空间

    选择还原用户备份所需的存储空间大小,可选范围为20 GB~6000 GB。

    说明

    默认为备份文件的3倍大小,若该大小未超过20 GB,则存储空间默认为20 GB。

    说明
    • 如您未授权RDS访问OSS,请先在3. 数据导入页面下方单击授权地址,在跳转到的页面左下角单击同意授权

    • 更多导入备份时的注意事项请仔细阅读该页面下的说明。

  7. 系统会在用户备份中生成备份文件校验任务,等待任务状态校验中变更为完成即可。

    重要

    备份文件的校验时长取决于实例在备份时的状态。例如,备份期间原实例中若有太多写入操作,会导致实例大量生成redo日志、或实例中执行了大型的事务等情况下,备份文件校验时间会变长。

  8. 单击目标备份ID/备注右侧操作列下的恢复

  9. 设置如下参数,单击下一步:实例配置

    类别

    说明

    主节点可用区

    选择主实例所在可用区。

    说明

    本参数仅适用于导入时未选择可用区的用户备份。导入时已选择可用区的用户备份不显示本参数。

    存储类型

    • ESSD PL1云盘:PL1性能级别的增强型(Enhanced)SSD云盘。

    • SSD云盘:基于分布式存储架构的弹性块存储设备。选择SSD云盘,即实现了计算与存储分离。

    说明

    更多信息,请参见存储类型

    实例规格

    通用规格(入门级):通用型的实例规格,独享被分配的内存和I/O资源,与同一服务器上的其他通用型实例共享CPU和存储资源。

    说明

    每种规格都有对应的CPU核数、内存、最大连接数和最大IOPS。详情请参见主实例规格列表

    存储空间

    存储空间包括数据空间、系统文件空间、日志文件空间和事务文件空间。调整存储空间时最小单位为5 GB。

  10. 设置如下参数,单击下一步:确认订单

    实例配置

    类别

    说明

    网络类型

    专有网络:也称为VPC(Virtual Private Cloud)。VPC是一种隔离的网络环境,安全性和性能均高于传统的经典网络。选择专有网络时您需要选择对应的VPC主节点交换机

    说明

    请确保选择的VPC与需要连接的ECS一致,否则它们无法通过内网互通。

    参数模板

    设置实例参数模板。方便您使用系统参数模板或已创建的自定义参数模板预设实例的参数,更多信息,请参见使用参数模板

    时区

    设置实例时区。

    表名大小写

    设置实例表名是否区分大小写。当本地数据库区分大小写时,您可以选择区分大小写,便于您迁移数据。

  11. 确认参数配置,选择购买量,选中服务协议,单击去支付完成支付。

    说明

    实例的创建需要1~5分钟时间,请耐心等待。

相关操作

设置用户备份保留天数

备份导入完成后,该用户备份默认保留3天。您可以根据业务需求增加或减少备份保留天数。

说明

当您不再需要某个用户备份,您可以删除用户备份。

  1. 登录RDS实例列表,在页面左上角选择地域,并在左侧导航栏中单击备份管理

  2. 单击目标备份ID/备注右侧过期时间列下的设置保留天数

  3. 在弹出的对话框中,您可以直接单击下拉框选择系统预设的保留天数,也可以勾选自定义天数左侧的选框,手动输入或单击数字右侧的上下箭头增减保留天数。

    保留天数

    说明

    保留到展示了备份的过期时间,若该时间超过2099年即显示为永久

  4. 单击确定完成更改。

为用户备份添加标签

为了方便管理,您可以为已经导入的备份添加标签。

  1. 登录RDS实例列表,在页面左上角选择地域,并在左侧导航栏中单击备份管理

  2. 单击目标备份ID/备注右侧标签列下的+编辑标签

  3. 单击创建标签,输入标签的,单击文本框右侧的确定完成创建,并单击对话框右下角的确定完成创建。

    说明

    如果您已经新建了标签,可以单击选择标签,为用户备份添加标签。

  4. 添加完成后,如果您希望变更目标备份的标签,可以将鼠标移动到已添加的标签上,在弹出的气泡中单击编辑标签,重复步骤3重新创建或选择标签。

查看用户备份的日志信息

备份自建库过程中,如果源库中存在数据修改的操作,则备份文件中会带有日志信息,方便您恢复这部分增量数据。

  1. 登录RDS实例列表,在页面左上角选择地域,并在左侧导航栏中单击备份管理

  2. 单击目标备份ID右侧操作列下的详情

  3. 在弹出的窗口中即可查询到日志的具体信息。

    说明

    日志信息中包含如下内容:

    • Master_Log_File::日志的文件名,展示增量数据所在的起始日志文件。

    • Master_Log_Position::日志文件中的位置信息,展示日志文件中增量数据的起始位置。

删除用户备份

为了节省开支,您可以删除不再需要的用户备份。

  1. 登录RDS实例列表,在页面左上角选择地域,并在左侧导航栏中单击备份管理

  2. 单击目标备份ID/备注右侧操作列下的删除

  3. 在弹出的窗口中单击确认

其他操作

  • 自定义列表项:显示或隐藏备份列表下的列,默认为全部显示。

    1. 登录RDS实例列表,在页面左上角选择地域,并在左侧导航栏中单击备份管理

    2. 单击页面右侧的自定义列表项图标,在弹出的窗口中,选定列表项,单击右左图标,显示或隐藏列表项。

      说明

      左边框中的列表项为隐藏项,右边框中的列表项为显示项。

    3. 单击确定

  • 导出资源列表:将当前所有用户备份信息导出到CSV文件。

    1. 登录RDS实例列表,在页面左上角选择地域,并在左侧导航栏中单击备份管理

    2. 单击页面右侧的导出资源列表图标即可导出资源列表。

  • 刷新:刷新用户备份列表。

    1. 登录RDS实例列表,在页面左上角选择地域,并在左侧导航栏中单击备份管理

    2. 单击页面右侧的刷新图标即可刷新用户备份列表。

附录1:Ubuntu安装Xtrabackup

请根据MySQL数据库的版本选择Xtrabackup的版本。

MySQL 5.7

  1. 安装Xtrabackup。

    wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.29/binary/redhat/8/x86_64/percona-xtrabackup-24-2.4.29-1.el8.x86_64.rpm
    yum localinstall percona-xtrabackup-24-2.4.29-1.el8.x86_64.rpm
  2. 安装qpress。

    sudo apt-get install -y qpress
    说明

    qpress是Xtrabackup的解压缩工具,由于Ubuntu系统安装XtraBackup不会集成qpress,因此需要此步骤单独进行安装。

说明

执行上述任意步骤时如出现类似于The following packages have unmet dependencies的提示,请按照提示执行apt-get -f install命令安装缺失的依赖包后重新执行。

MySQL 8.0

  1. 安装Xtrabackup。

    wget https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.35-31/binary/redhat/8/x86_64/percona-xtrabackup-80-8.0.35-31.1.el8.x86_64.rpm
    yum localinstall percona-xtrabackup-80-8.0.35-31.1.el8.x86_64.rpm
  2. 安装qpress。

    sudo apt-get install -y qpress
    说明

    qpress是XtraBackup的解压缩工具,由于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. 全量备份自建数据库至本地。

    请根据MySQL数据库的版本选择命令。

    MySQL 5.7

    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

    MySQL 8.0

    xtrabackup --backup --host=<自建库主机地址> --port=<自建库端口号> --user=<自建库root账号> --password=<自建库root密码> --stream=xbstream <备份文件临时目录> > /<备份路径>/<备份文件名>_qp.xb

    示例:

    xtrabackup --backup --host=127.0.0.1 --port=3306 --user=root --password=Aa123456@ --stream=xbstream /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代理

附录5:使用限制

限制项

详情

MySQL版本限制

目前仅支持如下自建数据库上云。

  • MySQL 5.7(5.7.32及以下小版本)

  • MySQL 8.0(8.0.18及以下小版本)

说明
  • 自建库的版本必须和RDS实例版本对应。例如:MySQL 5.7的备份数据只能恢复至RDS MySQL 5.7版本的实例。

  • 如果版本不符合本文的要求,请参见从自建MySQL迁移至RDS MySQL实例进行迁移。

自建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格式,或者将_QP.XB格式的文件压缩为TAR.GZ格式进行存储。

    说明

    对于不符合格式要求的备份文件,例如备份格式为.xbstream,建议您先将该格式文件恢复到本地数据库,转换为_QP.XB格式后再进行上云操作;或者您也可以选择其他上云方案,请参见从自建MySQL迁移至RDS MySQL实例

OSS限制

  • 使用命令行分片上传,单个文件需限制在16 TB以内,详情请参见OSS使用限制

  • 存储备份文件的OSS区域必须与还原到的RDS实例区域一致。

恢复限制

  • 为防止误操作覆盖实例数据,当前仅支持恢复数据至新实例。

  • 无法恢复数据大小超过RDS MySQL所支持的最大存储空间的数据库,更多规格信息,请参见主实例规格列表

  • 导入备份时,系统会创建一个临时实例并将备份数据导入至该临时实例,恢复时从该临时实例中提取数据。默认情况下,该临时实例预配存储空间大小为备份数据大小的5倍,如导入备份出现存储空间不足,可自行调整该存储空间。

  • 恢复操作不会导入自建库的用户账户,自定义函数和存储过程。请记录上述信息,在恢复完成后手动添加至RDS实例。

  • 恢复操作不会导入时区信息。请记录自建库的时区信息,在恢复完成后手动进行设置。

  • 目前仅支持将备份文件恢复至RDS MySQL 5.7或8.0基础系列(SSD云盘)按量付费实例。

复制限制

  • 仅支持基于全局事务标识GTID(Global Transaction Identifier)方式的复制。因此,自建库需要开启GTID复制,将gtid_modeenforce_gtid_consistency均设置为ON

  • 备份校验记录默认保存7天,超过7天的备份记录以及生成的快照会自动删除,建立复制关系操作应在实例恢复完成后尽快实施,避免自建库的日志被清理,以及备份校验后生成的快照被删除。