kgedf9641 发表于 2024-10-5 22:50:43

阿里云数据库迁移方案:自建数据库迁移到云数据库

本方案介绍如何将网站的自建数据库迁移至云数据库 RDS,解决您随着业务增长可能会面临的数据库运维难题。数据库采用高可用架构,支持跨可用区容灾,给业务带来数据安全、可用性、性能和成本方面收益。方案提供了快速体验教程,模拟了数据库迁移所需的工作,帮助您快速上手。
体验本方案预计费用不超过3元(假设资源运行时间不超过1小时,如果调整资源规格、使用时长,或执行本方案以外的操作,可能会导致费用发生变化,请以控制台显示的实际价格和最终账单为准。)
<h2>一、背景</h2>
从开展业务的初期到业务增长期,对数据库的性能、可用性会有不同的需求,运维也会变得越来越复杂。建议您尽早将数据库迁移到云数据库 RDS 上。



<div class="image-view" data-height="724" data-width="1520"><img data-original-filesize="191056" data-original-format="image/jpeg" data-original-height="724" data-original-src="https://upload-images.jianshu.io/upload_images/19316870-88ec47955030d9e2.jpg" data-original-width="1520"/>

<div class="image-caption">数据库迁移方案背景.jpg

<h3>业务初期</h3>
在业务初期,您可能会为了控制成本选择在应用服务器上自建数据库。但随着业务增长,这种应用和数据库部署在一个服务器上的架构,会有性能、安全、扩展性方面的隐患。
<h3>业务开始增长</h3>
为了消除性能、安全、扩展性方面的隐患,您可能会选择将数据库和应用分开部署。但数据库迁移工作并不简单,并且实现高可用和读写分离也很复杂,需要大量的时间和人力成本。
<h3>业务持续增长</h3>
如果您的业务在未来会持续增长,建议您尽早将数据库迁移到云数据库上。云数据库 RDS 可以让您使用一写多读、故障自动切换、自动备份等关键特性的同时,无需关注复杂的数据库运维工作。
<h2>二、RDS 解决的问题</h2>
<h3>稳定可靠</h3>
解决可用性问题:数据云盘存储通过多副本冗余确保数据可靠性;高可用版和集群版采用主备容灾架构,最高可保障99.99?用性;集群版可启用MGR特性实现RPO=0,数据零丢失。
<h3>降本增效</h3>
解决成本和扩展性问题:计费方式灵活,Serverless实现最高70?本;支持ARM架构,体验相同,性价比更高;可按需弹性升降配,不浪费资源。
<h3>数据库“自动驾驶”</h3>
解决运维复杂问题:支持自动扩缩容、自动SQL优化、自动SQL限流等,实现数据库的自感知、自修复、自优化、自运维及自安全,减轻运维负担,减少运维成本。
<h2>三、如何迁移到 RDS</h2>
在没有过往经验的情况下,您可能仍然会担心自己不够熟悉数据库迁移,而无法完成这项工作。 这里我们提供了一个快速体验教程,模拟了一遍数据库迁移所需的工作,帮助你快速熟悉这一流程。
<h3>自建数据库迁移到云数据库</h3>
为了控制成本,本方案中所创建的资源都是尽可能使用小规格资源,体验费用预计不超过 3 元(假设您在 1 小时内完成体验并及时释放资源)。 方案架构如下:

[*]由RDS实现数据库可靠性、可用性、安全性的保障。
[*]应用部署在ECS上,通过内网(VPC)访问RDS。
[*]使用数据传输服务DTS将ECS上的自建数据库迁移至云数据库RDS,迁移过程平滑、安全、高效,应用停机时间降低到分钟级别。




https://upload-images.jianshu.io/upload_images/19316870-0df3251b18118bd6.png

<div class="image-caption">数据库迁移架构.png

<h3>迁移步骤</h3>

01 准备资源
通过一键部署脚本,快速创建一个模拟环境,包含一个运行网站应用和数据库的ECS实例,以及一个迁移目标RDS实例。

02 迁移数据库
这一步骤将引导您使用数据传输服务DTS,将ECS上自建的数据迁移到RDS中。

03 验证及切换
通过这一步骤,您将了解如何验证数据库已经迁移成功,并尝试修改应用代码来完成迁移工作。

04清理资源
完成教程学习后,您可以将模拟环境的资源释放掉,避免产生额外的费用。
<h3>部署资源</h3>
<h5>一键部署资源</h5>
您可以通过一键部署模板,快速创建一个云服务器ECS实例和一个云数据库RDS实例,ECS实例上已经部署了网站以及自建数据库。本方案以WordPress网站为例。
1.单击一键部署进入ROS控制台,在顶部选择华东1(杭州)。
2.填写模板参数,包括ECS和RDS实例所在地域、可用区,以及ECS和RDS实例的账号密码,其他参数可使用默认值或按需修改。

3.查看页面右下角的资源价格,确认无误后单击创建。
等待资源栈创建,资源部署时间约为10分钟,请耐心等候,直至资源栈状态显示为创建成功。



https://upload-images.jianshu.io/upload_images/19316870-fab8998044327e51.png



<h5>WordPress网站安装</h5>
此时WordPress网站还不能访问,您需要进入WordPress安装页面,完成WordPress安装。
1.访问资源编排管理控制台,在资源栈列表中单击刚创建的资源栈。
2.在资源栈顶部单击输出页签,并在输出关键字列表中找到ECSWordPressUrl参数对应的值,单击进入网页。



https://upload-images.jianshu.io/upload_images/19316870-7e951880a7fa11a1.png



3.在WordPress安装页面,填写网站相关信息,然后单击Install WordPress。
请记住设置的网站管理员用户名和密码,用于登录网站管理页面。



https://upload-images.jianshu.io/upload_images/19316870-ab654ca414ce20dc.png



<h5>查看已部署的资源</h5>
在资源页面,您可以查看上述步骤所生成的ECS实例、RDS实例、WordPress网站访问地址等。
1.在资源栈 &gt; 资源栈列表中单击上一步创建的资源栈。
2.在顶部单击资源页签,可以查看已创建的资源及相关信息。



https://upload-images.jianshu.io/upload_images/19316870-36b94c5f0e075e28.png



3.在顶部单击输出页签,可以查看输出关键字列表,各关键字描述如下表所示。
<table>
<thead>
<tr>
<th>参数值</th>
<th>说明</th>
<th>示例值</th>
</tr>
</thead>
<tbody>
<tr>
<td>ECSWordPressUrl</td>
<td>WordPress访问地址</td>
<td>系统自动生成</td>
</tr>
<tr>
<td>ECSInstanceUser</td>
<td>ECS实例登录账号和密码</td>
<td>USERNAME: rootPASSWORD: 用户自定义</td>
</tr>
<tr>
<td>WPUserForSQL</td>
<td>ECS自建MySQL数据库账号和密码,该账号用于数据库SQL操作。</td>
<td>USERNAME: wordpressuserPASSWORD: password</td>
</tr>
<tr>
<td>WPUserForDTS</td>
<td>ECS自建MySQL数据库账号和密码,该账号用于数据库(源库)在DTS中运行数据迁移任务。</td>
<td>USERNAME: dtssync1PASSWORD: P@ssw0rd</td>
</tr>
<tr>
<td>RDSUserDTS</td>
<td>RDS数据库高权限账号和密码,用于数据库(目标库)在DTS中运行数据迁移任务。</td>
<td>USERNAME: dbuserPASSWORD: 用户自定义</td>
</tr>
</tbody>
</table>
<h3>迁移数据库</h3>
现在,您可以使用DTS数据传输服务,配置源库和目标库信息,开始迁移数据库的库表结构、全量数据和增量数据。
1.登录DMS数据管理服务。
2.在顶部菜单栏选择集成与开发(DTS) &gt; 数据传输(DTS) &gt; 数据迁移。
3.单击创建任务。
4.配置源库及目标库信息。
4.1 源库

[*]数据库类型:MySQL
[*]接入方式:ECS 自建数据库
[*]实例地区:本示例中选择华东1(杭州)
[*]是否跨阿里云账号:不跨账号
[*]ECS 实例 ID:选择网站所在的ECS实例。
[*]端口:3306
[*]数据库账号和密码:输入前面创建的自建数据库账号和密码。本示例为dtssync1和P@ssw0rd。
[*]连接方式:非加密连接

4.2 目标库

[*]数据库类型:MySQL
[*]接入方式:云实例
[*]实例地区:本示例中选择华东1(杭州)
[*]RDS 实例 ID:选择前面创建的RDS实例。
[*]数据库账号和密码:输入前面创建的RDS实例账号和密码。本示例为dbuser和您自定义的密码。
[*]连接方式:非加密连接


5.单击测试连接以进行下一步,会自动为ECS添加DTS安全组、为RDS添加DTS服务器IP至白名单,以允许DTS访问ECS和RDS。
如果有失败信息,参考对应的错误提示进行修改即可。
6.配置迁移任务。

[*]勾选库表结构迁移、全量迁移、增量迁移。
[*]在源库对象框中选择要迁移的wordpressdb库,再单击向右小箭头.png将其移动至已选择对象框,然后单击下一步高级配置。
[*]勾选全量校验和增量校验、结构校验,然后单击下一步保存任务并预检查。

7.预检查通过率达到100?,单击下一步购买。选择数据迁移实例的链路规格(本案例以small规格为例),阅读并选中《数据传输(按量付费)服务条款》,单击购买并启动。

8.迁移任务正式开始。
单击迁移任务ID可以查看具体进度。当您看到如下界面,表示存量数据已迁移完成,增量数据会实时同步。此时您可以进入下一步,验证RDS里的数据。



https://upload-images.jianshu.io/upload_images/19316870-504a474993c98db6.png



<h3>验证及切换</h3>
<h5>验证RDS里的数据</h5>
您可以登录到云数据库RDS实例,查询RDS中是否具备了全量数据,并在网站新增加一条评论,验证该新评论是否从自建数据库同步到RDS。
1.登录RDS实例

[*]单击资源栈顶部资源按钮,然后单击Database资源ID进入RDS控制台,单击登录数据库。
[*]

在弹出的DMS页面中,填写RDS高权限数据库账号和密码,然后单击登录。
本示例中,RDS高权限数据库账号为dbuser,密码为您自定义的密码。
如果报错“您暂未获取当前数据库实例的登录权限”,请单击点此申请,并由主账号完成审批。


2.验证全量数据
在SQLConsole窗口,在左侧双击目标数据库名称wordpressdb,可以看到自建数据库所有库、表数据已经完成迁移。
3.验证增量数据

[*]在SQLConsole窗口,双击wp_comments表名,再单击执行,查看wp_comments表的数据。
[*]在浏览器输入WordPress网站IP,在网站上增加一条评论。
[*]再次查看RDS实例中wp_comments表的数据,可以看到增加的评论,说明增量数据已迁移成功。

<h5>从自建数据库切换到RDS</h5>
为避免数据丢失,建议先停止写入数据,然后再将应用程序的数据库连接配置修改为云数据库RDS的连接地址。
1.停止写入数据到源数据库。
2.修改WordPress配置文件中的数据库连接配置。

[*]在资源列表中单击WebServer资源ID进入ECS控制台,点击远程连接使用ECS账户登录。本示例中,ECS账号为root,密码为用户自定义密码。
[*]打开配置文件。


sudo vim /usr/share/nginx/html/wp-config.php


[*]按i进入插入模式。
[*]

修改数据库连接配置:
将数据库账号和密码修改为RDS实例的数据库账号和密码,本示例中,将wordpressuser改为dbuser,将password改为您自定义的密码。
将localhost修改为RDS实例内网地址。
在资源列表中点击Database资源ID进入RDS控制台,在基本信息 &gt; 网络类型 &gt; 查看连接详情中找到RDS数据库内网地址。
[*]按Esc键退出插入模式。
[*]输入:wq,并按Enter键退出vim编辑器。

<h3>清理资源</h3>
完成教程后,建议及时释放不需要的资源,包括DTS数据迁移任务和ECS实例等,
1.释放DTS任务

[*]登录DMS数据管理服务。
[*]在顶部菜单栏选择集成与开发(DTS) &gt; 数据传输(DTS) &gt; 数据迁移。
[*]选择DTS任务所在地域,找到目标任务。
[*]在操作列单击image.png,然后单击释放任务。

2.释放一键部署创建的所有资源。

[*]访问资源编排管理控制台,找到对应资源栈,单击删除。
[*]完成确认操作。

<h2>四、迁移前后对比</h2>
<table>
<thead>
<tr>
<th>对比项</th>
<th>ECS 自建数据库</th>
<th>使用云数据库 RDS</th>
</tr>
</thead>
<tbody>
<tr>
<td>成本</td>
<td>公网流量收费;备份数据占用空间;无现成数据库代理用于读写分离;无现成Serverless方案</td>
<td>公网流量不收费;提供最多2倍于存储空间的免费备份空间;通用型数据库代理不收费;支持Serverless</td>
</tr>
<tr>
<td>稳定</td>
<td>无现成高可用;无现成负载均衡</td>
<td>高可用和集群系列秒级故障切换,最高保障99.99?用性;基础系列自动故障恢复,承诺99.5?用性;自动读写分离,实现负载均衡</td>
</tr>
<tr>
<td>性能</td>
<td>无现成的参数调优;无现成读写分离;性能排查复杂;无内核优化</td>
<td>持续优化参数;支持只读实例和读写分离,扩展读性能;支持慢日志分析、自动SQL优化;自研AliSQL和AliPG优化性能</td>
</tr>
<tr>
<td>安全</td>
<td>无现成的连接链路加密;无现成的TDE加密;审计困难,无SQL审计;内核Bug需要自行修复</td>
<td>SSL加密;TDE加密;SQL洞察与审计;内核Bug由阿里云修复</td>
</tr>
</tbody>
</table>

官网相关地址直达:
1.更多阿里云方案查询:https://www.aliyun.com
2.阿里云服务器ECS相关活动:https://www.aliyun.com/daily-act/ecs/activity_selection
3.云小站(代金券发布平台):https://www.aliyun.com/minisite/goods



https://upload-images.jianshu.io/upload_images/19316870-5f1747d3cd17a545.png

<div class="image-caption">云小站代金券图.png
页: [1]
查看完整版本: 阿里云数据库迁移方案:自建数据库迁移到云数据库