上一章:DTS概览页 | 《DTS控制台入门一本通》第二章
下一章:DTS数据迁移 | 《DTS控制台入门一本通》第三章(下篇)
也可以PC端点击https://developer.aliyun.com/topic/download?id=803 下载
数据迁移可以把源端数据库的数据迁移到目标端(迁移不会影响源端数据库的数据,也不会导致源端数据库的数据丢失),数据迁移只支持后付费(按量付费),该页面展示了当前账户下各个地域的数据迁移实例的运行状态,如图 3-1。您还可以在这个页面创建新的迁移任务以及查看当前迁移任务的详细信息。
3.1地域
图 2-1 标记①处为地域信息,此处可以切换各个地域查看不同地域的实例信息。
推荐从概览页进入。
3.2文件导入
图 3-1 标记②的“文件导入”功能,是使用 DTS 提供的一个客户端工具,将工具部署在本地,使用该工具将本地数据库导出的文件,然后上传,实现导入功能,相当于我们自己导出文件然后导入一样,如图 3-2,该功能已经不再支持使用,请勿使用。
3.3创建迁移任务页面
图 3-1 标记②的“创建迁移任务”,可以进行数据迁移的任务配置,点击后,会 进入 DTS 迁移任务的配置界面,如图 3-3,需要注意:
● DTS 目前的实现是逻辑迁移。
● 逻辑迁移的意思是指 DTS 会借助 SELECT 的方式抽取源库已存在的数据, 然后再通过 INSERT 的方式写入到目标库。
● 目前还不支持物理文件层面的迁移。
DTS 迁移任务主要分为 2 部分进行配置,即源库信息和目标库信息,源库是指 要使用 DTS 迁移的源端的数据库,目标库是指待迁入数据的数据库。比如我们要把 MySQL A 数据库的数据迁移到 MySQL B 数据库,这里,MySQL A 数据库 A 就是 源库。目标库就是 MySQL B 数据库。下面对源库以及目标库配置过程的具体项目进 行讨论。
3.3.1 实例类型
如图 3-3,顾名思义,就是 DTS 支持迁移的源端数据库接入的类型,并且 DTS 对不同的接入类型的实例,有不同的支持粒度,主要分为如下几种。无论是哪一种, 最终实现的核心目的是能让 DTS 的服务器集群连接到源端或者目标端的数据库。
3.3.1.1 有公网 IP 自建的数据库
这是最简单的一种接入类型,就是指您的源端的数据库有公网 IP 地址,这个地 址允许其他程序 ( 这里特指 DTS) 可以通过您的公网 IP 连接到您的源端数据库 , 这种 实例类型配置比较灵活,但是容易受到公网网络环境的影响,进而影响迁移的速率。 当我们选择这个类型时,页面的信息也会按照“有公网 IP 自建的数据库”进行展示, 如图 3-4。您需要把源端数据库的公网连接地址填写到“主机名或者 IP 地址”里, 这个需要再次强调,这个 IP 地址必须能够让 DTS 服务器访问到,即连通性必须正 常。如果连通性有问题,在“测试连接”时会出错。我们会在“测试连接”部分详细 讨论。这里有 4 点需要说明:
● 虽然这里特指的是“自建数据库”,但是只要是公网可达的 ( 比如 RDS 的公网 地址 ),都可以使用这个方式进行传输。
● 这里指的 IP 并不是只可以填写 IP, 也可以填写域名 ( 比如 RDS 的公网连接字 符串 )。
● 自建 MySQL 数据库一般都有一个参数 bind_address,这个是指 MySQL 接 受(监听)来自于哪个 IPV4 或者 IPV6 地址的连接,为了避免出现 DTS 无法 连接的情况,建议设置成“*”或者“0.0.0.0”。
● 请一定确保,自建数据库所在主机的防火墙没有拦截 DTS 服务器地址的入方
向的访问。服务器地址我们会在“3.3.2 实例地区”讨论。
3.3.1.2 通过专线 /VPN 网关 / 智能接入网关接入的自建数据库
相比公网的不安全而言。这个方式实现了非“公网”传输。但是这里的非“公 网”传输需要借助其他的产品来实现,这些产品是:高速通道专线、智能接入网关、 VPN 网关。它们最终实现的是把本地自建数据库和阿里云的链路打通。通过非“公 网”的方式进行连接。最终只要连通性正常。就可以进行传输。如下图 3-5。这里有 5 点需要特别说明:
● 虽然它们都可以实现非“公网”方式连接。但是实现方式是不一样的。专线才 是真正意义上的内网传输。而智能接入网关和 VPN 网关都是依赖公网实现的。 只是实现了非“公网”方式连接 ( 打通了本地与阿里云内网 )。
● 选择这个方式,需要填写 VPC ID(“已和源端数据库联通的 VPC”)。请注意, 这里不是随便填写一个 VPC ID 就可以了。这个 VPC ID 必须进行了高速通道 专线、智能接入网关、VPN 网关的相关配置打通了链路才可以。没有做任何 配置的 VPC ID 即使填写上也无法联通 ( 测试连接会出错 )。具体配置方式涉 及各个产品的较多内容,您如果需要可参考具体产品的帮助文档。
● 虽然这里特指的是“自建数据库”,但是只要是通过这三种方式实现网络可达 的 ( 比如 VPC 下的 RDS),都可以使用这个方式进行传输。 ●“IP 地址”这部分,只可以填写 IP 地址。如何填写域名或者字符会提示“请输 入合法的 ip 地址”。 ● 配置好高速通道专线、智能接入网关、VPN 网关之后,还需要配置 DTS 与它们 之间路由,配置路由需要参考:
https://help.aliyun.com/document_detail/117525.html?spm=a2c4g.11186623.6.590.2d2f6487R0gxRt
3.3.1.3 无公网 IP:Port 的数据库 ( 通过数据库网关 DG 接入 )
如下图 3-6,选择这个接入方式,也可以实现非“公网”接入。它的实现方式 是要在源端数据库所在的主机上安装一个数据库网关。这个数据库网关与智能接入网 关、VPN 网关相似,依赖于公网。但是免去了复杂的配置步骤与较高的成本。这种 接入方式的使用量较少。使用时需要注意如下 1 点:
● 这里配置时需要选择“数据库网关 ID”,这里不是选择了 ID 就可以了,还需 要对这个网关进行安装和添加数据库。也就是要保证网关“状态”运行正常。
3.3.1.4 通过云企业网 CEN 接入的自建数据库
如下图 3-7,云企业网简称 CEN(Cloud Enterprise Network),它不是一种具体 的接入方式,即它并不是专线、VPN 这种连接能力。它是一个能力提供者或者平台。 它提供一种组网的能力,可以实现专线、VPN 等的网络互通与管理。选择这个接入方 式后,需要选择“云企业网实例 ID”以及“已和源库互联的 VPC 网络”。这里特指 “自建数据库”。但是无论是自建还是云数据库,只要连接打通,都可以使用这种方式。
3.3.1.5 ECS 上的自建数据库
顾名思义,就是指在阿里云 ECS 服务器上搭建的自建数据库,如下图 3-8,选 择这个接入方式非常适合 ECS 服务器上的数据库进行迁移。您只需要选择对应的 “ECS 实例 ID”,填写相关数据库信息即可。此处需要注意 2 点:
● ECS 服务器有安全组的限制。正常情况下,当选择完 ECS 的实例 ID,填写 完数据库的连接信息,然后点击 DTS 源端数据库的“测试连接”后,DTS 会 自动把 DTS 服务器的 IP 端添加到 ECS 的安全组里面。如图 3-9。如果您遇 到连通性问题,请先检查这一点是否正常。
● 除了安全组,ECS 上部署的操作系统内还有防火墙,请确保防火墙也做了响 应的入方向放行规则。
3.3.1.6 RDS 实例
这里特指您购买的阿里云的 RDS 数据库实例,如下图 3-10,选择这个接入方式后,只需要填写对应的“RDS 实例 ID”以及账密即可。DTS 后台会自动的通过实例 ID 查询对应 RDS 的连接地址和端口。并且,DTS 还支持“其他阿里云账号下的 RDS 实例”的迁移。您可以在阿里云 B 账号下迁移阿里云 A 账号的 RDS 数
据库。跨账号迁移的操作与配置比较复杂,可以参考该云栖文档:
https://yq.aliyun.com/articles/353204?spm=a2c4e.11155435.0.0.6ff363b5zVAhec
此处注意如下 1 点:
● RDS 数据库产品有一个安全限制,就是白名单。同“3.3.1.5 ECS 上的自建数据库”的自动添加安全组行为类似,DTS 也会自动把 DTS 服务器的地址段添加到 RDS 数据库的白名单中。添加完后的白名单信息您无法在云 RDS白名单页面看到。
3.3.1.7 云 MONGODB 实例
这里特指您购买的阿里云的 MONGODB 数据库实例,如下图 3-11,选择这个接入方式后,只需要填写对应的云 MONGODB 的实例 ID、认正数据库以及账密即可。同“3.3.1.6 RDS 实例”的自动添加白名单行为一样,DTS 也会自动把 DTS服务器的地址段添加到云 MONGODB 数据库的白名单中。添加完后的白名单信息您无法在云 MONGODB 的白名单页面看到。
3.3.1.8 PolarDB
这里特指您购买的阿里云的 PolarDB 数据库实例,如下图 3-12,选择这个接入方式后,只需要填写对应的云 PolarDB 的实例 ID 以及相关的连接信息即可。同“3.3.1.6 RDS 实例”的自动添加白名单行为一样,DTS 也会自动把 DTS 服务器的地址段添加到云 PolarDB 数据库的白名单中。添加完后的白名单信息您无法在云PolarDB 的白名单页面看到。
3.3.2实例地区
图 3-3 中的“实例地区”选择后也就意味着 DTS 会使用这个地区的服务器(DTS 在很多地区都部署了服务器)连接源端数据库进行数据的抽取和传输(简单说 就连接数据库后执行 select 查询获取数据)。选择不同的实例类型,在实例地区选择 上有 2 点不同,主要如下:
● 如果实例类型选择的是“有公网 IP 自建的数据库”,实例地区这里理论上选 择任何一个都可以(因为公网 IP 任何地方都可达),建议选择与数据库所在 地域物理距离相近的地区。比如自建数据库的机房在北京,则建议选择华北 2 地区。
● 除“有公网 IP 自建的数据库”外的其他实例类型在选择实例地区时,则需 要按照实例所在的地域进行选择。比如 RDS 实例在华东 1,则地域必须 选择华东 1。这样的话,DTS 的华东 1 服务器集群才可以正常连接华东 1 的 RDS。
重点再说明一下实例类型部分说明的问题,因为 DTS 的服务器非常多,为了能 够让 DTS 顺利的链接上源端的数据库,假设您源端数据库做了防火墙 ( 自建 )、安全 组 (ECS)、白名单 (RDS) 等安全设置,您还需要把 DTS 这个地区的所有服务器(有 的客户不想放行所有服务器,这个暂时无法满足)的地址进行放行。需要放行的 DTS 服务器的网段点击图 3-3 的“获取 DTS IP 段”查看,如下图 3-13。
3.3.3端口
图 3-3 的“端口”部分用来指定需要 DTS 访问的数据库端口,只有某些实例类型才需要填写该项目。指定了 IP 只能说明您的数据库运行在这台主机上,但是这台主机上可能运行了很多的应用程序。端口就用来说明要访问哪个应用程序。请注意您的网络防火墙或者安全组 ( 特指 ECS) 配置。对对应端口的访问进行放行。
3.3.4数据库类型
图 3-3 的“数据库类型”部分用来选择迁移的数据库类型,目前阿里云 DTS 支 持的源端数据库类型有:Oracle、MySQL、SQLServer、PostgreSQL、Mongodb、 DB2、TIDB。这里需要正确的选择源端数据库的类型,如果您源端是 MySQL 则需 要选择 MySQL。您选择什么样的数据库类型意味着 DTS 的应用程序使用哪种数据 库驱动进行连接您的源端数据库,所以请务必选择正确。这里有 3 个注意点:
● 源库的数据库类型与目标库的数据库类型建议一致,因为兼容性最好。以下 图 3-14 为例,当选择实例类型为 RDS,实例 ID 是一台 MySQL 实例时, 目标端数据库类型或者实例类型时会展示出 SQLServer、Postgresql。目 前 DTS 除 了 支 持 MySQL->Oracle、Mysql->Postgresql、MySQL-> MySQL、MySQL-> PolarDB MySQL、MySQL-> AnalyticDB MySQL、 MySQL-> DRDS 外,其他的数据库类型暂不支持,所以如果此时目标选择 SQLserver 实例,迁移会出现异常。其他的实例类型和数据库类型同理。
● 若源端数据库为 Sqlsever 时,当开启增量迁移时,一个 DTS 任务只允许一 个数据库进行增量迁移(这取决于其事务日志)。全量迁移支持多个数据库。
● 若源端数据库为 PostgreSQL 时,无论是否开启增量迁移,一个 DTS 任务只 允许迁移一个数据库(这取决于其 XLOG)。
3.3.5数据库账号
图 3-3 的“数据库账号”指的是您需要 DTS 使用哪个账号连接您的源端的数据 库。这里出现问题最多的是 MySQL 数据库的账号问题以及 MONGODB 数据库的 账号问题。主要有如下 4 点:
● MySQL 的数据库账号组成是 user 和 host 两个元素,即:user@host 这种 格式。这也就意味着,如果 user 相同而 host 不同,这不是相同的账号。比如 如下 2 个账户:alitest@'%' 与 alitest@'10.0.0.1'。 当 您 使 用“alitest” 账 户 在 IP 为 10.0.0.1 的客户端主机访问您的数据库的时候,鉴权时账户用的是 alitest@'10.0.0.1'。当您使用“alitest”账户在 IP 为 10.0.0.2 的客户端主机访 问您的数据库的时候,由于“alitest”的 host 只有 % 和 10.0.0.1。而 10.0.0.1 并不符合,所以鉴权时账户用的是 alitest@'%'。了解这点非常重要。
● 所以,我非常建议您创建一个独立的账号进行 DTS 的迁移,并且账号的 host 建议是 '%'。因为 DTS 服务器的网段非常多,并且没有规律(请参考图 3-5)。% 可以有效的避免账户连接多问题。
● MySQL 遇到最多的数据库账号连接类问题是这个错误 : Access denied for user 'xxxx'@'xxxx' (using password: YES) 这个错误在连接时产生的原因有 2 个:账户错误或者密码错误。您如果遇到, 请参考这里排查: https://yq.aliyun.com/articles/158321?spm=a2c4e.11155435.0.0.6ff363b5cXNuax
● MONGODB 的账户链接时,还需要填写一个“数据库名称”项,如下图 3-15。这个是指 MONGODB 账户的 authentication database。 authentication database 是指创建 MONGODB 账户的时候所在的数据库。比如一 个 MONGODB 数据库为 alitest。我们执行 use alitest 切换到 alitest 数据库 下,然后执行 db.createUser() 创建一个 test 账户,密码是 123。当我们使 用 test 账户登陆 mongodb 的时候,数据库名称 (authentication database) 就是 alitest。
3.3.6数据库密码
图 3-3 的“数据库密码”指的是使用的“数据库账号”的连接密码。数据库密码遇到的问题较少。请重点关注“数据库账号”章节的相关问题。
3.3.7连接方式
当实例类型选择“ECS 上的自建数据库”,数据库类型选择“MySQL”时, DTS 支持连接方式的选择,即支持 SSL 加密的连接方式。当勾选“SSL 安全连接” 时,需要上传 SSL 的证数等文件,如下图 3-16。其中 CA 根证数是必传的。另外, DTS 目前只支持 SSL 加密。请注意如下 2 点:
● 如您要使用 SSL 安全连接,请确保您的源端数据库以及目标端数据库做了相 应的 SSL 配置,关于如何配置数据库的 SSL 非本书的重点。不在此赘述。
● 并非所有的实例类型以及数据库类型 DTS 都支持 SSL 访问。
3.3.8测试连接
重点中的重点,图 3-3 的“测试连接”点击后,会使用我们配置的这些连接信 息去连接源端或者目标端的数据库,针对 ECS、RDS、云 MONGODB、云 REDIS 等云数据库,还会进行安全组、白名单的检查和添加操作,检查对应的云 ECS 实例 和云数据库实例的安全组、白名单里是否有 DTS 的安全组或者白名单,没有则添加。 测试分为 ping、telnet、数据库协议 ( 比如 MySql JDBC Connect ) 三个层面,测 试结果如下图 3-17。需要注意如下 4 点:
● 如果测试连接失败。分为 ping 失败,telnet 失败以及数据库协议 ( 比如 MySql JDBC Connect) 失败。我们只需要关注 telnet 和数据库协议即可。因为 ping 现在的测试结果并不能说明问题,可以忽略它的测试结果。
● telnet 如果成功,说明 DTS 可以正常通过您配置的地址与端口访问到对应的应 用程序。如果失败,则说明 DTS 无法通过您配置的地址与端口访问到您的应用 程序。此时则需要进行网络防火墙或者安全组的排查或者抓取网络报文排查。
● 数据库协议 ( 比如 MySql JDBC Connect ) 如果成功,则说明 DTS 可以通 过您配置的地址、端口、数据库账号、数据库密码等信息,成功访问到您的数 据库。如果失败,一般会有错误提示,对 MySQL 来说,最常见的是 Access denied for user 'xxxx'@'xxxx' (using password: YES), 这 点, 我 们 在 “3.3.5 数据库账号”讨论过。其他的连接问题,可以参考这个云栖文档 : https://yq.aliyun.com/articles/158321?spm=a2c4e.11155435.0.0.6ff363b5aL5jmA
● 有时点击测试连接后,会一直转圈,没有任何结果。遇到这个情况。可以忽略 测试连接,直接点击“授权白名单并进入下一步”。换句话说,测试连接并不 是必须要点击的。如果配置的源库连接有问题,我们点击“授权白名单并进入 下一步”跳转到新页面时会出错 ( 因为此时会真正的去源库取数据库的对象信 息,如下图 3-18)。如果配置的目标库连接有问题,我们在“预检查”时会 出错 ( 因为预检查会检查目标库连接 )。所以测试连接一般情况下可点可不点。 大多数情况下不需要执着于这一步。
3.3.9授权白名单并进入下一步
图 3-3 的“授权白名单并进入下一步”点击后,会和测试连接一样,也会进
行安全组与白名单的检查和添加,然后会进入数据库迁移对象选择页面,如下图3-19。这是一个库级别 ( 数据库级别的同步,DTS 还支持表级别和列级别同步 ) 同步的任务截图。这个页面的左侧显示的是源端数据库的对象信息 ( 如图例里的 dtstest、mysqltest 数据库 )。右侧显示的是要迁移到目标数据库的对象信息 ( 如 图例里的 dtstestdata 数据库 ),如果您要更改迁移到目标数据库的对象的名字, 可以把鼠标放到“dtstestdata”上,然后点击右侧的编辑,更改库名 ( 除了更改库 名外,表级别同步还支持修改表名以及列名 )。该功能为 DTS 的库表列映射,如下 图 3-20。
3.3.10迁移类型
3.3.10.1结构迁移
图 3-19 里的“结构迁移”是指是否迁移源端数据库的对象结构信息。这些结构 包括表结构、索引、视图、存储过程等。DTS 会通过 Select 的方式,获取源库的数 据对象的结构。为什么要进行结构迁移?什么时候需要结构迁移?原因分别如下:
● 结构迁移针对的是关系型数据库,非关系型数据库不需要 ( 比如 MONGODB),对关系型数据库来说,数据要存储,必须先建表。所以 DTS 需要先 进行结构迁移,创建表结构才能进行后面的数据迁移。
● 当目标数据库里面没有对应的表对象时,才需要选择结构迁移。如果目标数据 库里面已经有了对应的数据库的表对象,不需要选择结构迁移 ( 比如目标库已 经有表 A,此时选择结构迁移,DTS 会在目标库创建表 A,因为表 A 已经存 在,DTS 创建会出错,提示 1050 - Table xxxx already exists)。
结构迁移遇到的最常见的问题是 :
● 源端或者目标端的数据库的数据库对象非常非常多,因为 DTS 要以 Select 的 方式查询这些信息。数据库对象过多,容易造成查询超时,这类问题比较难解决。
如果您遇到这种问题,请反馈阿里云售后。 如果要查看 DTS 在源端或者目标端的进程状态,大多数数据库都可以在源 端或者目标端的执行数据库的相关查询命令,以 MySQL 为例,可以执行 :show processlist 确认会话信息。
3.3.10.2全量数据迁移
图 3-19 里的“全量数据迁移”是指是否迁移源端数据库的数据 ( 表的记录 )。 这是真正的数据的迁移,它迁移的是源端数据库表里已经存在的数据(这些数据可 能是历史数据,早已经写入,也可能刚刚写入不久的数据,非未来新增的数据),简 单的说,DTS 会通过 Select 获取源端数据库里的表的数据。然后通过 Insert、 Replace into、Update、Delete 的方式,写入到目标端。DTS 使用 Select 查询对 应表的数据,不是一次性全部查询的。一般是对的数据进行分片 ( 常见的是使用主键进行分割 ),然后并行查询各个分片的数据。DTS 写入目标端数据也是并行写入的。 这也就导致有 2 个问题:
● DTS 迁移完成后,目标数据库的数据空间大小比源端数据库的数据空间大小 大,这是因为并行写入产生数据空洞导致。如果您遇到这种问题,可以在业务 允许的期间执行 Optimize table xxx 对表的空间进行收缩 (Optimize table 有 产生 MDL 阻塞的可能 , 执行时请评估执行时间和业务影响 )。
● Optimize table 大多数情况下,都能够成功的对表的空间进行收缩。极少的情况 下无法对表的空间进行收缩。如果遇到无法收缩的情况,可以反馈阿里云售后。 如果要查看 DTS 在源端或者目标端的进程状态,大多数数据库都可以在源 端或者目标端的执行数据库的相关查询命令,以 MySQL 为例,可以执行 :show processlist 确认会话信息。
3.3.10.3增量数据迁移
图 3-19 里的“增量数据迁移”是指 DTS 通过解析源端数据库的相关数据库日 志 ( 比 如 MySQL 的 Binlog、SQLserver 的 Transaction Log、MONGODB 的 oplog 等 ),把全量迁移开始之后的增量数据,实时的同步到目标端。即源端有一条 Insert,DTS 会解析这些日志,生成一个同样的 Insert 发送到目标端,实现增量数 据迁移,增量迁移目前不支持触发器的迁移。
很多客户在问,DTS 是如何保证数据完整性的? DTS 通过全量 + 增量的方式 保证数据完整性,但是在如下 2 个情况下,DTS 无法保证数据的完整性:
● 迁移的对象里,没有主键或者唯一键的数据库对象,无法保证完整性。因为 DTS 是分批次抽取和并发写入数据,没有主键时会造成数据重复或者数据缺 失的情况。请确保迁移对象有主键或者唯一键。
● 多对一的相同数据库对象的数据迁移,无法保证数据完整性。多对一是指多个 源库通过多个任务,把源端多个数据库对象的数据迁移到目标库的同一个数据 库对象里。 如果要查看 DTS 在源端或者目标端的进程状态,大多数数据库都可以在源端或者目标端的执行数据库的相关查询命令,以 MySQL 为例,可以执行 :show processlist 确认会话信息。DTS 的增量会在源端的 MySQL 数据库启动一个 binlog dump 进程(如果您搭建过 MySQL 主从,MySQL 本身的主从也是会起动一个 binlog dump 进程)。 DTS 的增量数据迁移延迟是无法保证的,正常情况下 DTS 的增量迁移是秒级延 迟,但是当遇到一些 DDL、大量更新时或者 DTS 规格达到瓶颈等情况时,增量数据 迁移延迟会增高。如果您遇到大的延迟(比如超过 1000S),可与阿里云售后反馈。
3.3.11预检查并启动
当迁移对象以及迁移类型配置好后,点击“预检查并启动”将会进行下面的检 查环节,检查环节顺利通过后,会启动 DTS 任务开始迁移数据。检查的目的是避免 一些已知的问题导致 DTS 迁移异常,常见的检查项目如下图 3-21。预检查失败后, 无法进行下一步,需要您针对出错的检查项进行处理,当您处理了预检查失败的检查 项后。可以点击启动任务(启动方式为图 3-1 中任务列表的“启动任务”按钮。)重 新启动预检查。
3.3.11.1源库连接性检查
检查预检查的 DTS 服务器是否可以通过迁移任务页面的相关配置正常连接源端 数据库。需注意如下 2 点:
● DTS 的服务器有很多,这些服务器有的部署了预检查程序,有的部署了“测 试连接”程序,有的部署了结构迁移的程序,有的部署了全量迁移的程序,有 的部署了增量迁移的程序。这也就意味着,任何一个环节的连接正常都不能保 证下一个或者其他环节连接也正常 ( 比如数据库等防火墙做了限制 )。您可能 会遇到预检查正常但是后续的结构迁移连接异常,也可能遇到结构迁移任务正 常但是后续的全量迁移连接异常的情况。这些都是有可能的。
● 遇到连接异常的情况,首先要有一个判断,这个异常是网络本身 (TCP/IP) 不通还是应用层面的问题。如果是网络层面的,则需要查防火墙以及链路 配置。如果网络没问题只是在应用层出现的异常,则需要查造成这个应用异 常的原因。举一个例子,前面提到过的这个错误 : Access denied for user 'xxxx'@'xxxx' (using password: YES)。这个错误意味着,网络可达,只是 在对数据库进行账密认证的时候出错了 ( 应用层 )。如果网络不可达,我们甚 至无法进行数据库应用层面的这些认证。了解这点非常重要。
3.3.11.2源库权限检查
要使 DTS 通过您在创建迁移任务页面填写的账户信息获取源端数据库的数据, 就需要对这个账户进行一写数据库对象的授权。不同的数据库类型以及迁移类型需要 不同的数据库权限。以 MySQL 为例,结构、全量迁移只需要 SELECT 权限即可。 而增量迁移则需要 REPLICATION SLAVE、REPLICATION CLIENT、SHOW VIEW 和 SELECT 权限。
3.3.11.3目的库连接性检查
检查预检查的 DTS 服务器是否可以通过迁移任务页面的相关配置正常连接目标端数据库。注意点与“3.3.11.1 源库连接性检查”相同。
3.3.11.4 目的库权限检查
要使 DTS 把从源端获取到的数据写入目标端数据库,也需要对应的写入权限。 同样以 MySQL 为例,结构、全量和增量需要 SELECT 和 INSERT、UPDATE、 DELETE、CREATE 等等读写的权限。
3.3.11.5 存储引擎检查
这个一般是针对 MySQL 数据库的迁移,因为 MySQL 有很多数据库引擎。 DTS 不支持 FEDERATED、MRG_MyISAM 或 TokuDB 存储引擎的迁移。
3.3.11.6 源库版本检查
检查源库的版本是否符合 DTS 产品的要求,以 MySQL 为例,DTS 只支持如 下几个版本:5.1、5.5、5.6、5.7、8.0。其他数据库类型的版本限制可以参考这里: https://help.aliyun.com/document_detail/26618.html?spm=a2c4g.11186623.2.7.3a392a8770k06x#concept-26618-zh
3.3.11.7 同名对象存在性检查
目的是检查目标数据库中是否存在和待迁移对象同名的对象。当我们选择结构迁 移的时候,DTS 会在目标创建对象结构,如果目标数据库已经有同名的对象结构了, 就会创建失败。
这点我们在“3.3.10.1 结构迁移”讨论过。
3.3.11.8 数据库可用性检查
检查目标实例是否已经有了对应的数据库,比如我们要把源端 alitest 的数据库 迁移到目标端。我们需要先在目标端手动创建 alitest 实例。避免预检查失败,请注 意如下 1 点:
● 很多情况下,DTS 会自动的在目标端创建数据库,DTS 自动创建数据库的 前提是账户的权限正常。不过也有例外(比如字符集问题,数据库名称不合法 等),如果遇到 DTS 无法自动创建数据库的情况,请手动创建后重启预检查。
3.3.11.9 源库 binlog 开启检查
当迁移类型勾选增量迁移时,才会检查该项,在“3.3.10.3 增量数据迁移”我们 讨论过,增量迁移是通过一些日志来实现的。这个检查项是为了检查数据库这方面的 日志是否开启。如果源端是 MySQL 数据库,则检查 binlog。
3.3.11.10 源库 binlog 模式检查
开启了相关日志后,要检查源数据库的 Binlog 模式是否为 ROW。建议更 改 .cnf 配置文件,改完配置文件的参数后,请对源端数据库进行一次重启。
3.3.11.11 源库 binlog_row_image 是否为 FULL
如果您源端是 MySQL5.6 及以上的 数据库版本时,开启增量迁移后,会检查 binlog_row_image 参数。建议更改 .cnf 配置文件,改完配置文件的参数后,请对 源端数据库进行一次重启。
3.3.11.12 源库 server_id 检查
如果您源端是 MySQL 数据库,则开启增量迁移后,会检查源端数据库的 server id 参数。server_id 值需要是大于 2 的整数。请注意如下 1 点:
● 建议更改 .cnf 配置文件,更改完配置文件参数后,请对源端数据库进行一次重启
3.3.11.13 源库 binlog 存在性检查
这个检查项目主要检查 show binary logs 列出来的的文件是否存储,检查这个 的目的是因为很多情况下,我们删除 MySQL 的 binlog 时,是直接从操作系统目录 remove 掉的,并没有通过 MySQL 的 purge 进行删除。这也就导致数据库里还存 在着 binlog 文件的记录,而操作系统目录里已经没有了。遇到这种情况出现,您可 以通过执行 purge 来清理 MySQL 数据库记录的 binlog 文件。使之与操作系统目录 的文件数量和编号对应。
3.3.11.14 MySQL 密码格式检查
检查源库使用数据库密码格式是否为老版。主要检查数据库的参数 old_ passwords 是否为 1。如果您的 old_passwords 为 1,建议修改为 0。修改密码格 式可能会影响业务的正常运行,请谨慎操作。
3.3.11.15 复杂拓扑存在性检查
DTS 支持的迁移拓扑一般有如下 5 种:一对一、一对多、级联、多对一、双向 迁移(非双向同步),其中双向迁移是不支持的拓扑结构,如果后台检测到这种拓扑结 构,会出错。如果这个检查项您出现预检查失败,一般可以联系和授权阿里云售后跳 过概检查项(预检查检测环节可以手动跳过的前提是双向迁移的数据对象以及数据不 冲突,避免造成数据混乱)。
3.3.11.16 补充
如果预检查出现这种错误检查项“unexpected error”,请与阿里云售后反馈确认。
3.3.12 立即购买并启动
预检查通过后,点击下一步,进入购买页面,如下图 3-22。选择规格后,点击 “立即购买并启动”正式运行 DTS 任务。这里需要注意如下 3 点:
● 对 DTS 迁移来说,只进行结构迁移和全量迁移,目前是免费的
● 选择增量迁移后,才会收费,暂停同样收费。
● DTS 迁移只支持后付费(按量计费),不支持包年包月。