RDS MySQL支持全量备份导入功能,可以将对象存储OSS中的自建MySQL全量备份数据导入至RDS控制台,并恢复至新RDS MySQL实例中。
本文包含如下步骤: 本文演示所用的环境为阿里云ECS实例,镜像为CentOS Linux release 8.3.2011版本,其他版本请适配相关命令。如何创建ECS实例,请参见创建ECS实例。 Percona XtraBackup是Percona公司开发的用于MySQL数据库物理热备的备份工具,支持多种数据库引擎。如您使用的是Ubuntu系统,请参见附录1:Ubuntu安装Xtrabackup。 请根据MySQL数据库的版本选择Xtrabackup的版本。 已安装Golang。如未安装,请在命令行中执行下列命令安装。 已安装unzip。如未安装,请在命令行中执行下列命令安装。 说明 上述命令仅限CentOS系统使用,如您使用的是Ubuntu系统,请参见附录2:Ubuntu安装Golang和Unzip。 下载MySQL Backup Helper源码包。 说明 您可访问mysql-backup-helper获取最新版的源码包。 解压MySQL Backup Helper源码包。 进入mysql-backup-helper-master文件夹,对main.go文件进行编译,获得backup_helper可执行文件。 说明 如无法正常完成编译,请参见附录4:设置Go代理。 进入oss_stream文件夹,对oss_stream.go文件进行编译,获得oss_stream可执行文件。 说明 如无法正常完成编译,请参见附录4:设置Go代理。 通过MySQL Backup Helper验证当前自建MySQL数据库是否支持备份。 验证通过后,全量备份自建库并将备份文件上传至阿里云对象存储OSS。如您未提前创建OSS Bucket,请参见本文前提条件。 请根据MySQL数据库的版本选择命令。 示例: 数据量越大,备份时间越长。如果数据量较大,为了避免意外登出导致备份中断,建议通过nohup命令在后台进行备份。命令示例如下: 示例: 数据量越大,备份时间越长。如果数据量较大,为了避免意外登出导致备份中断,建议通过nohup命令在后台进行备份。命令示例如下: 说明 此过程的时长取决于实例在备份时的状态,例如备份期间原实例中有太多写入操作,导致实例大量生成redo日志、或实例中执行了大型的事务等情况下,备份时间会变长。当备份顺利完成后,屏幕上会打印出 如您暂时无法使用阿里云OSS服务,可先将自建库备份至本地,等可以顺利访问OSS后再上传。更多信息,请参见附录3:分步骤执行全量备份和上传至OSS。 完成此步骤后,可以登录OSS控制台确认备份文件是否上传成功。如未上传成功,请重复执行步骤2。 登录RDS实例列表,在页面左上角选择地域,在左侧导航栏中单击备份管理。 单击用户备份页签下的导入备份按钮。 在弹出的导入备份对话框中,仔细阅读相关说明并单击下一步,直至切换到3. 数据导入页签。 说明 向导窗口引导您如何导入备份,详情如下。更多操作,请参见分步骤执行全量备份并上传至OSS。 1. 备份你的数据库:全量备份自建库中的数据。 2. 上传备份文件到OSS:将自建库的全量备份数据上传到OSS。 在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中的备份文件必须为 备注 自定义备份文件的备注信息。 可用区 设置用户备份的可用区。选择可用区后,系统会在该可用区内创建一个秒级快照,大幅节省备份导入所需要的时间。 说明 用户备份导入完成,并通过其恢复到新实例时,该可用区即为新实例所在的可用区。 说明 如您未授权RDS访问OSS,请先在3. 数据导入页面下方单击授权地址,在跳转到的页面左下角单击同意授权。 更多导入备份时的注意事项请仔细阅读该页面下的说明。 系统会在用户备份中生成备份文件校验任务,等待任务状态由校验中变更为完成即可。 重要 备份文件的校验时长取决于实例在备份时的状态。例如,备份期间原实例中若有太多写入操作,会导致实例大量生成redo日志、或实例中执行了大型的事务等情况下,备份文件校验时间会变长。 单击目标备份ID/备注右侧操作列下的恢复。 设置如下参数,单击下一步:实例配置。 类别 说明 主节点可用区 选择主实例所在可用区。 说明 本参数仅适用于导入时未选择可用区的用户备份。导入时已选择可用区的用户备份不显示本参数。 存储类型 说明 更多信息,请参见存储类型。 实例规格 通用规格(入门级):通用型的实例规格,独享被分配的内存和I/O资源,与同一服务器上的其他通用型实例共享CPU和存储资源。 说明 每种规格都有对应的CPU核数、内存、最大连接数和最大IOPS。详情请参见主实例规格列表。 存储空间 存储空间包括数据空间、系统文件空间、日志文件空间和事务文件空间。调整存储空间时最小单位为5 GB。 ESSD PL1 云盘:PL1性能级别的增强型(Enhanced)SSD云盘。 SSD云盘:基于分布式存储架构的弹性块存储设备。选择SSD云盘,即实现了计算与存储分离。 设置如下参数,单击下一步:确认订单。 类别 说明 网络类型 专有网络:也称为VPC(Virtual Private Cloud)。VPC是一种隔离的网络环境,安全性和性能均高于传统的经典网络。选择专有网络时您需要选择对应的 VPC 和主节点交换机。 说明 请确保选择的VPC与需要连接的ECS一致,否则它们无法通过内网互通。 参数模板 设置实例参数模板。方便您使用系统参数模板或已创建的自定义参数模板预设实例的参数,更多信息,请参见使用参数模板。 时区 设置实例时区。 表名大小写 设置实例表名是否区分大小写。当本地数据库区分大小写时,您可以选择区分大小写,便于您迁移数据。 确认参数配置,选择购买量,选中服务协议,单击去支付完成支付。 说明 实例的创建需要1~5分钟时间,请耐心等待。 备份导入完成后,该用户备份默认保留3天。您可以根据业务需求增加或减少备份保留天数。 说明 当您不再需要某个用户备份,您可以删除用户备份。 登录RDS实例列表,在页面左上角选择地域,并在左侧导航栏中单击备份管理。 单击目标备份ID/备注右侧过期时间列下的设置保留天数。 在弹出的对话框中,您可以直接单击下拉框选择系统预设的保留天数,也可以勾选自定义天数左侧的选框,手动输入或单击数字右侧的上下箭头增减保留天数。 说明 保留到展示了备份的过期时间,若该时间超过2099年即显示为永久。 单击确定完成更改。 为了方便管理,您可以为已经导入的备份添加标签。 登录RDS实例列表,在页面左上角选择地域,并在左侧导航栏中单击备份管理。 单击目标备份ID/备注右侧标签列下的+编辑标签。 单击创建标签,输入标签的键和值,单击文本框右侧的确定完成创建,并单击对话框右下角的确定完成创建。 说明 如果您已经新建了标签,可以单击选择标签,为用户备份添加标签。 添加完成后,如果您希望变更目标备份的标签,可以将鼠标移动到已添加的标签上,在弹出的气泡中单击编辑标签,重复步骤3重新创建或选择标签。 在备份自建库过程中,如果源库中存在数据修改的操作,则备份文件中会带有日志信息,方便您恢复这部分增量数据。 登录RDS实例列表,在页面左上角选择地域,并在左侧导航栏中单击备份管理。 单击目标备份ID右侧操作列下的详情。 在弹出的窗口中即可查询到日志的具体信息。 说明 日志信息中包含如下内容: Master_Log_File::日志的文件名,展示增量数据所在的起始日志文件。 Master_Log_Position::日志文件中的位置信息,展示日志文件中增量数据的起始位置。 为了节省开支,您可以删除不再需要的用户备份。 登录RDS实例列表,在页面左上角选择地域,并在左侧导航栏中单击备份管理。 单击目标备份ID/备注右侧操作列下的删除。 在弹出的窗口中单击确认。前提条件
上云流程概览
演示环境说明
步骤一:安装Percona 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
前提条件
sudo yum install -y go
sudo yum install -y unzip
操作步骤
wget https://github.com/aliyun/mysql-backup-helper/archive/refs/heads/master.zip
unzip master.zip
cd mysql-backup-helper-master
go build -a -o backup_helper main.go
cd oss_stream
go build -a -o oss_stream oss_stream.go
步骤三:备份自建库并上云
cd ~/mysql-backup-helper-master && ./backup_helper -host <自建库主机地址> -port <自建库端口号> -user <自建库root账号> --password <自建库root密码>

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 LTAI**************** -accessKeySecret ****** -bucketName test -endpoint oss-********.aliyuncs.com -objectName backup_qp.xb
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 LTAI**************** -accessKeySecret ****** -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 --compress <备份文件临时目录> | ./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 --compress /root/mysql/data | ./mysql-backup-helper-master/oss_stream/oss_stream -accessKeyId LTAI**************** -accessKeySecret ******** -bucketName test -endpoint oss-****.aliyuncs.com -objectName backup_qp.xb
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 LTAI**************** -accessKeySecret ****** -bucketName test -endpoint oss-ap-southeast-1.aliyuncs.com -objectName backup_qp.xb' &
completed OK !。_QP.XB格式,或者将_QP.XB格式的文件压缩为TAR.GZ格式进行存储。更多限制,请参见附录:使用限制。相关操作
设置用户备份保留天数
为用户备份添加标签
查看用户备份的日志信息
删除用户备份
其他操作
请根据MySQL数据库的版本选择Xtrabackup的版本。
安装Xtrabackup。 安装qpress。 说明 qpress是Xtrabackup的解压缩工具,由于Ubuntu系统安装XtraBackup不会集成qpress,因此需要此步骤单独进行安装。 说明 执行上述任意步骤时如出现类似于 安装Xtrabackup。 安装qpress。 说明 qpress是XtraBackup的解压缩工具,由于Ubuntu系统安装XtraBackup不会集成qpress,因此需要此步骤单独进行安装。 说明 执行上述任意步骤时如出现类似于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
sudo apt-get install -y qpress
The following packages have unmet dependencies的提示,请按照提示执行apt-get -f install命令安装缺失的依赖包后重新执行。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
sudo apt-get install -y qpress
The following packages have unmet dependencies的提示,请按照提示执行apt-get -f install命令安装缺失的依赖包后重新执行。
安装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
全量备份自建数据库至本地。
请根据MySQL数据库的版本选择命令。
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
xtrabackup --backup --host=<自建库主机地址> --port=<自建库端口号> --user=<自建库root账号> --password=<自建库root密码> --stream=xbstream --compress <备份文件临时目录> > /<备份路径>/<备份文件名>_qp.xb
示例:
xtrabackup --backup --host=127.0.0.1 --port=3306 --user=root --password=Aa123456@ --stream=xbstream --compress /root/mysql/data > /root/backup_qp.xb
通过OSS_Stream将备份文件上传至OSS。
cat /<备份路径>/<备份文件名>_qp.xb | ./mysql-backup-helper-master/oss_stream/oss_stream -accessKeyId LTAI**************** -accessKeySecret ****** -bucketName test -endpoint oss-********.aliyuncs.com -objectName backup_qp.xb
示例:
cat /root/backup_qp.xb | ./mysql-backup-helper-master/oss_stream/oss_stream -accessKeyId LTAI**************** -accessKeySecret ****** -bucketName test -endpoint oss-********.aliyuncs.com -objectName backup_qp.xb
如果您使用的是中国地域的ECS,可能无法正常完成步骤二的编译流程,此时需要执行如下命令以便Go使用阿里云的代理,然后重新执行编译。 说明 如果设置了上述代理后还是出现编译出错的情况,则可能是代理地址暂不可用造成的。此时可以在搜索引擎中搜索其他Go的代理地址来替换上述命令中的go env -w GO111MODULE=on
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
https://mirrors.aliyun.com/goproxy/,direct部分。推荐搜索关键词:Go代理。