RDS MySQL支持全量备份导入功能,可以将对象存储OSS中的MySQL备份数据导入至RDS,并恢复至新实例。
前提条件
上云流程概览
本文包含如下步骤:
演示环境说明
本文演示所用的环境为阿里云ECS实例,镜像为CentOS Linux release 8.3.2011版本,更多详情请参见创建ECS实例。
费用说明
用户备份导入至RDS后,24小时内存储费用免费。超过24小时会收取费用,收费明细请参见存储费用。
步骤一:安装Percona Xtrabackup
Percona XtraBackup是Percona公司开发的用于MySQL数据库物理热备的备份工具,支持多种数据库引擎。如您使用的是Ubuntu系统,请参见附录1:Ubuntu安装Xtrabackup。
安装Percona存储库。
sudo yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm
启用Percona存储库。
percona-release enable-only tools release
安装Xtrabackup 2.4或8.0版本。
sudo yum install -y percona-xtrabackup-24 #安装Xtrabackup 2.4版本。 sudo yum install -y percona-xtrabackup-80 #安装Xtrabackup 8.0版本。
说明请根据MySQL数据库的版本选择Xtrabackup的版本。对应关系如下:
MySQL 5.7:请安装Xtrabackup 2.4。
MySQL 8.0:请安装Xtrabackup 8.0。
步骤二:安装MySQL Backup Helper
前提条件:
已安装Golang。如未安装,请在命令行中执行下列命令安装。
sudo yum install -y go
已安装unzip。如未安装,请在命令行中执行下列命令安装。
sudo yum install -y unzip
上述命令仅限CentOS系统使用,如您使用的是Ubuntu系统,请参见附录2:Ubuntu安装Golang和Unzip。
下载MySQL Backup Helper源码包。
wget https://github.com/aliyun/mysql-backup-helper/archive/refs/heads/master.zip
说明您可访问mysql-backup-helper获取最新版的源码包。
解压MySQL Backup Helper源码包。
unzip master.zip
进入mysql-backup-helper-master文件夹,对main.go文件进行编译,获得backup_helper可执行文件。
cd mysql-backup-helper-master go build -a -o backup_helper main.go
说明如无法正常完成编译,请参见附录4:设置Go代理。
进入oss_stream文件夹,对oss_stream.go文件进行编译,获得oss_stream可执行文件。
cd oss_stream go build -a -o oss_stream oss_stream.go
说明如无法正常完成编译,请参见附录4:设置Go代理。
步骤三:备份自建库并上云
通过MySQL Backup Helper验证当前自建MySQL数据库是否支持备份。
cd ~/mysql-backup-helper-master && ./backup_helper -host <自建库主机地址> -port <自建库端口号> -user <自建库root账号> --password <自建库root密码>
验证通过后,全量备份自建库并将备份文件上传至阿里云对象存储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
说明对于MySQL 8.0版本,需要将上述innobackupex命令替换为xtrabackup命令。
此过程的时长取决于实例在备份时的状态,例如备份期间原实例中有太多写入操作,导致实例大量生成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。
在RDS实例列表的左上角,选择希望创建RDS实例的地域。
在左侧导航栏中,单击备份管理。
在用户备份页签中,单击导入备份。
在弹出的向导窗口中,仔细阅读相关说明并单击下一步,直至切换到3. 数据导入页签。
选择备份文件所在的OSS Bucket名称,在下方列出的文件名中选中目标备份文件、选择将备份文件导入哪个可用区,并单击确定。
说明如您未授权RDS访问OSS,请在页面下方单击授权地址,在跳转到的页面左下角单击同意授权。
系统在用户备份中生成备份文件校验任务,等待任务状态由校验中变更为完成。备份文件的校验时长取决于实例在备份时的状态,例如备份期间原实例中有太多写入操作,导致实例大量生成redo日志、或实例中执行了大型的事务等情况下,校验时间会变长。
击目标备份ID右侧操作列下的恢复。
设置如下参数,单击下一步:实例配置。
类别
说明
主节点可用区
选择主实例所在可用区。
说明本参数仅适用于导入时未选择可用区的用户备份。导入时已选择可用区的用户备份不显示本参数。
存储类型
ESSD PL1云盘:PL1性能级别的增强型(Enhanced)SSD云盘。
SSD云盘:基于分布式存储架构的弹性块存储设备。选择SSD云盘,即实现了计算与存储分离。
说明更多信息,请参见存储类型。
实例规格
通用规格(入门级):通用型的实例规格,独享被分配的内存和I/O资源,与同一服务器上的其他通用型实例共享CPU和存储资源。
说明每种规格都有对应的CPU核数、内存、最大连接数和最大IOPS。详情请参见主实例规格列表。
存储空间
存储空间包括数据空间、系统文件空间、日志文件空间和事务文件空间。调整存储空间时最小单位为5 GB。
设置如下参数,单击下一步:确认订单。
类别
说明
网络类型
专有网络:也称为VPC(Virtual Private Cloud)。VPC是一种隔离的网络环境,安全性和性能均高于传统的经典网络。选择专有网络时您需要选择对应的VPC和主节点交换机。
说明请确保选择的VPC与需要连接的ECS一致,否则它们无法通过内网互通。
参数模板
设置实例参数模板。方便您使用系统参数模板或已创建的自定义参数模板预设实例的参数,更多信息,请参见使用参数模板。
时区
设置实例时区。
表名大小写
设置实例表名是否区分大小写。当本地数据库区分大小时,您可以选择区分大小写,便于您迁移数据。
确认参数配置,选择购买量,选中服务协议,单击去支付完成支付。
说明实例的创建需要1~5分钟时间,请耐心等待。
附录1:Ubuntu安装Xtrabackup
下载最新版的Percona包。
wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb
安装Percona包。
sudo dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb
启用Percona存储库。
percona-release enable-only tools release
更新本地仓库的软件列表。
apt-get update
安装Xtrabackup 2.4或8.0版本。
sudo apt-get install -y percona-xtrabackup-24 #安装Xtrabackup 2.4版本。 sudo apt-get install -y percona-xtrabackup-80 #安装Xtrabackup 8.0版本。
说明请根据MySQL数据库的版本选择Xtrabackup的版本。对应关系如下:
MySQL 5.7:请安装Xtrabackup 2.4。
MySQL 8.0:请安装Xtrabackup 8.0。
安装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
全量备份数据库至本地。
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版本,需要将上述innobackupex命令替换为xtrabackup命令。
通过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限制 |
|
备份限制 |
|
OSS限制 |
|
恢复限制 |
|
复制限制 |
|
- 本页导读 (1)