4数据迁移
4.1 RDS for MySQL
4.1.1使用DTS数据迁移
使用数据传输服务(DTS)将本地数据库迁移到RDS,可以实现应用不停服务的情况下,平滑完成数据库的迁移工作。
4.1.1.1背景信息
DTS 数据迁移支持 MySQL 的结构迁移、全量迁移和增量迁移。
1、结构迁移
DTS 会将本地数据库的结构定义迁移到目标实例。目前 DTS 支持结构迁移的对象有:表、视图、触发器、存储过程、存储函数
2、全量迁移
DTS 会将本地数据库迁移对象的数据全部迁移到目标实例。如果用户还选择了增量迁移,那么全量迁移过程中,为了保证数据一致性,无主键的非事务表会被锁定,锁定期间这些表无法写入,锁定时长依赖于这些表的数据量大小,在这些无主键非事务表迁移完成后,锁才会释放。
3、增量迁移
增量迁移会将迁移过程进行数据变更同步到目标实例,如果迁移期间进行了 DDL 操作,那么这些结构变更不会迁移到目标实例。
4.1.1.2迁移限制
将本地数据库迁移到 RDS 上有以下限制。
迁移过程中,不支持 DDL 操作
结构迁移不支持 event 的迁移
如果使用了对象名映射功能后,依赖这个对象的其他对象可能迁移失败
当选择增量迁移时,本地 MySQL 实例需要开启 binlog,且本地库的 binlog_format 要为 row。如果本地 MySQL 为5.6版本时,它的 binlog_row_image 还须设置为 full
4.1.1.3前提条件
已完成 RDS 实例数据库的准备,可参见 设置连接模式 和 创建数据库和帐号。
4.1.1.4操作步骤
本例以有公网 IP 的本地数据库迁移到 RDS 上为例。
4.1.1.4.1准备本地数据
在正式迁移之前,需要先在本地数据库和 RDS 实例中创建迁移帐号,并在 RDS 实例中创建要迁移的数据库,并将要迁移的数据库的读写权限授权给迁移帐号。不同的迁移类型需要不同的权限,如下表所示。
迁移类型 |
结构迁移 |
全量迁移 |
增量迁移 |
本地数据库 |
Select |
select |
select |
RDS 实例 |
读写权限 |
读写权限 |
读写权限 |
1. 在本地数据库中创建迁移帐号。
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
参数说明:
l username:要创建的帐号
l host:指定该帐号登录数据库的主机。如果是本地用户可以使用 localhost,如果想让该用户从任意主机登录,可以使用通配符 %
l password:该帐号的登录密码
例:
要创建帐号为 William,密码为 Changme123 的帐号从任意主机登录本地数据库,命令如下:
CREATE USER 'William'@'%' IDENTIFIED BY 'Changme123';
2. 在本地数据库中给迁移帐号授权,本地数据库中迁移帐号的权限要求请参见上表。
GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;
参数说明:
l privileges:该帐号的操作权限,如 SELECT、INSERT、UPDATE 等。如果要授权该帐号所有权限,则使用 ALL
l databasename:数据库名。如果要授权该帐号所有的数据库权限,则使用通配符 *
l tablename:表名。如果要授权该帐号所有的表权限,则使用通配符 *
l username:要授权的帐号名
l host:授权登录数据库的主机名。如果是本地用户可以使用 localhost,如果想让该用户从任意主机登录,可以使用通配符 %
l WITH GRANT OPTION:授权该帐号能使用GRANT命令,该参数为可选。
例:
授权帐号 William 对所有数据库和表的所有权限,并可以从任意主机登录本地数据库,命令如下:
GRANT ALL ON *.* TO 'William'@'%';
说明:
如果需要进行增量迁移,那么需要确认本地数据库的 binlog 是否开启并正确设置,执行以下步骤。
3. 开启本地数据库的 binlog。 使用如下命令查询是否开启了binlog。
show global variables like "log_bin";
如果查询结果为 log_bin=OFF,那么本地数据库没有开启 binlog。为了使迁移过程中产生的增量数据能同步迁移,需要修改配置文件 my.cnf 中的如下参数。
log_bin=mysql_bin
binlog_format=row
server_id=大于 1 的整数
binlog_row_image=full //当本地 MySQL 版本大于 5.6 时,则需设置该项
4. 修改完成后,重启 MySQL 进程。
$mysql_dir/bin/mysqladmin -u root -p shutdown
$mysql_dir/bin/safe_mysqld &
其中,“mysql_dir”为MySQL安装目录。
4.1.1.4.2正式迁移操作
数据准备完毕后,即可进入正式的迁移操作。
在 RDS 管理控制台 上单击 迁移数据库,进入 DTS,如下图所示。
单击 创建在线迁移任务,进入 创建迁移任务 页面,如下图所示。
3、输入任务名称、本地数据库信息和目标数据库信息,单击 授权白名单并进入下一步,如下图示。
l 任务名称:自定义任务名称,可以保持默认值
l 源库信息
实例类型:本地数据库的实例类型,可以选择 有公网IP的自建数据库、ECS上的自建数据库、RDS实例、云数据库MongoDB
数据库类型:本地数据库的类型,可以选择 Oracle、MySQL、SQLServer、PostgreSQL、MongoDB
主机名或 IP 地址:本地数据库的公网地址
端口:本地数据库的公网端口
帐号:本地数据库的迁移帐号
密码:本地数据库迁移帐号对应的密码
l 目标库信息
实例类型:默认为 RDS 实例
RDS 实例 ID:目标 RDS 实例的 ID。点击下拉菜单将自动联想当前登录 RDS 管理控制台 的帐号的 RDS 实例,点击选择所需要的实例
帐号:目标 RDS 数据库的迁移帐号
密码:目标 RDS 数据库迁移帐号对应的密码
1. 选择迁移类型,并在 迁移对象 中选择要迁移的对象,单击 > 将要迁移的对象放入 已选择中,单击 预检查并启动,如下图所示。
注意
数据迁移只会将本地数据库的数据(结构)复制一份到目标数据库,并不会对本地数据库数据(结构)造成影响
数据迁移过程中,不支持 DDL 操作,如进行 DDL 操作可能导致迁移失败
DTS 增量迁移的时间最长支持 15 天,如果超过 15 天不停止任务,系统资源可能被回收
如果要修改迁移对象在目标数据库上的名字,可以在 已选择 列表右侧单击 编辑,修改已选择的对象名称,如上图4所示。
说明:
以下以预检查不通过为例进行描述,如果预检查通过,请直接参见步骤 8。
5.
系统显示预检查结果,如下图所示。
6、 单击 检测结果 为 失败 的检测项后的!,查看失败详细信息,根据失败详细信息完成错误排查。
7、错误排查完毕后,在 迁移任务列表 页面,选择当前迁移任务,单击 启动,如下图所示。
8、 系统预检查通过后,单击 确定,自动进行迁移任务,如下图所示。
4.1.1.4.3后续操作
因迁移帐号拥有读写权限,为了保证本地数据库安全,请在数据迁移完成后,删除本地数据库和 RDS 实例中的迁移帐号。
4.1.2使用mysqldump迁移数据
使用 mysqldump 工具的优点是简单易用、容易上手,缺点是停机时间较长,因此它适用于数据量不大,或者允许停机的时间较长的情况。
4.1.2.1背景信息
由于 RDS 提供的关系型数据库服务与原生的数据库服务完全兼容,所以对用户来说,将原有数据库迁移到 RDS 实例的过程,与从一个 MySQL 服务器迁移到另外一台 MySQL 服务器的过程基本类似。
4.1.2.2前提条件
l 已完成 RDS 实例数据库的准备,可参见 设置连接模式 和 创建数据库和帐号。
l 已购买云服务器 ECS。
4.1.2.3操作步骤
1. 关闭 MySQL 进程。
$mysql_dir/bin/mysqladmin -u root -p shutdown
其中,mysql_dir 为MySQL安装目录。
2.
使用 mysqldump 的数据导出工具,将本地数据库数据导出为数据文件。
说明: 本步骤仅仅导出数据,不包括存储过程、触发器及函数。
mysqldump -h localIp -u userName -p --opt --default-character-set=utf8 --hex-blob dbName --skip-triggers > /tmp/dbName.sql
参数说明:
l localIp:本地数据库服务器 IP 地址
l userName:本地数据库的迁移帐号
l dbName:需要迁移的数据库名
l /tmp/dbName.sql:备份生成的文件名
3.
使用 mysqldump 导出存储过程、触发器和函数。
说明: 若数据库中没有使用存储过程、触发器和函数,可跳过此步骤。在导出存储过程、触发器和函数时,需要将 definer 去掉,以兼容 RDS。
mysqldump -h localIp -u userName -p --opt --default-character-set=utf8 --hex-blob dbName -R | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' > /tmp/triggerProcedure.sql
参数说明:
l localIp:本地数据库服务器 IP 地址
l userName:本地数据库的迁移帐号
l dbName:需要迁移的数据库名
l /tmp/triggerProcedure.sql:备份生成的文件名
4. 参见 ECS 产品文档,将数据文件和存储过程文件上传到 ECS 上。
本例以文件上传到如下路径为例。
/tmp/dbName.sql
/tmp/triggerProcedure.sql
5. 登录 ECS,将数据文件和存储过程文件导入到目标 RDS 中。
mysql -h intranet4example.mysql.rds.aliyuncs.com –u userName -p dbName < /tmp/dbName.sql
mysql -h intranet4example.mysql.rds.aliyuncs.com -u userName -p dbName < /tmp/triggerProcedure.sql
参数说明:
l intranet4example.mysql.rds.aliyuncs.com:RDS 实例连接地址,本例以内网地址为例
l userName:RDS 数据库的迁移帐号
l dbName:需要导入的数据库名
l /tmp/dbName.sql:要导入的数据文件名
l /tmp/triggerProcedure.sql:要导入的存储过程文件名
4.2 RDS for SQL Server
4.2.1使用 DTS 迁移数据
使用数据传输服务 (DTS) 将本地数据库迁移到 RDS,可以实现应用不停服务的情况下,平滑完成数据库的迁移工作。
4.2.1.1背景信息
DTS 支持 SQL Server 数据结构迁移和全量迁移。
l 结构迁移
DTS 会将本地数据库的结构定义迁移到目标实例。目前DTS支持结构迁移的对象有:表、视图、表触发器、同义词、SQL 存储过程、SQL 函数、自定义类型、plan guid、rule、default。
l 全量迁移
DTS 会将本地数据库迁移对象的数据全部迁移到目标实例。如果在迁移过程中有增量更新的话,这些增量不会被迁移到目标库。所以建议在业务无写入时,使用 DTS 进行全量数据迁移。
4.2.1.2迁移限制
将本地数据库迁移到 RDS 上有以下限制:
l 迁移过程中,不支持 DDL 操作
l 结构迁移不支持 assemblies、库级存储过程、service broker、全文索引、全文目录、分布式 schema、分布式函数、CLR 标量函数、CLR 标值函数、内部表、聚合函数和系统的迁移
l 如果使用了对象名映射功能后,依赖这个对象的其他对象可能迁移失败
4.2.1.3前提条件
已完成 RDS 实例数据库的准备,可参见 设置连接模式 和 创建数据库和帐号。
4.2.1.4操作步骤
本例以有公网 IP 的本地数据库迁移到 RDS 上为例。
4.2.1.4.1准备本地数据
在正式迁移之前,需要先在本地数据库和RDS实例中创建迁移帐号,并在RDS实例中创建要迁移的数据库,并将要迁移的数据库的读写权限授权给迁移帐号。不同的迁移类型需要不同的权限,如下表所示。
迁移类型 |
结构迁移 |
全量迁移 |
本地数据库 |
select |
Select |
RDS 实例 |
读写权限 |
读写权限 |
1. 在本地数据库中创建迁移帐号。
create login username with password='password', default_database=mydb;
go
create user username for login username with default_schema=dbo;
go
参数说明:
username:要创建的帐号
password:该帐号的登录密码
mydb:默认连接的数据库
dbo:默认的数据表
例:
要创建帐号为 William,密码为 Changme123 的帐号访问数据 mydb 的数据表 dbo,命令如下:
create login William with password='Changme123', default_database=mydb;
go
create user William for login William with default_schema=dbo;
go
2. 在本地数据库中给迁移帐号授权,本地数据库中迁移帐号的权限要求请参见上表。
GRANT privileges ON tablename TO username WITH GRANT OPTION;
参数说明:
privileges:该帐号的操作权限,如 SELECT、INSERT、UPDATE 等。如果要授权该帐号所有权限,则使用 ALL
tablename:表名。如果要授权该帐号所有的表权限,则使用通配符 *
username:要授权的帐号名
WITH GRANT OPTION:授权该帐号能使用GRANT命令,该参数为可选
例:
授权帐号 William 对所有数据库和表的所有权限,命令如下:
GRANT ALL ON * TO William;
4.2.1.4.2正式迁移操作
在 RDS
管理控制台 上单击 迁移数据库,进入DTS,如下图所示。
单击 创建在线迁移任务,进入 创建迁移任务 页面,如下图所示。
3. 输入任务名称、本地数据库信息和目标数据库信息,单击 授权白名单并进入下一步,如下图所示。
任务名称:自定义任务名称,可以保持默认值
源库信息
实例类型:本地数据库的实例类型,可以选择 有公网 IP 的自建数据库、ECS 上的自建数据库、RDS 实例、云数据库 MongoDB
数据库类型:本地数据库的类型,可以选择 Oracle、MySQL、SQLServer、PostgreSQL、MongoDB
主机名或IP地址:本地数据库的公网地址
端口:本地数据库的公网端口
帐号:本地数据库的迁移帐号
密码:本地数据库迁移帐号对应的密码
目标库信息
实例类型:默认为 RDS 实例
RDS实例ID:目标 RDS 实例的 ID。点击下拉菜单将自动联想当前登录管理控制台的帐号的 RDS 实例,点击选择所需要的实例
数据库名称:要迁移到目标数据库的名称
帐号:目标 RDS 数据库的迁移帐号
密码:目标 RDS 数据库迁移帐号对应的密码
4. 选择迁移类型,并在 迁移对象 中选择要迁移的对象,单击 > 将要迁移的对象放入 已选择 中,单击 预检查并启动,如下图所示。
注意
数据迁移只会将本地数据库的数据(结构)复制一份到目标数据库,并不会对本地数据库数据(结构)造成影响
数据迁移过程中,不支持DDL操作,如进行DDL操作可能导致迁移失败
DTS增量迁移的时间最长支持15天,如果超过15天不停止任务,系统资源可能被回收
如果要修改迁移对象在目标数据库上的名字,可以在 已选择 列表右侧单击 编辑 ,修改已选择的对象名称,如上图中4所示。
说明:
以下以预检查不通过为例进行描述,如果预检查通过,请直接参见步骤 8。
5. 系统显示预检查结果,如下图所示。
6. 单击 检测结果 为 失败 的检测项后的 !,查看失败详细信息,根据失败详细信息完成错误排查。
7、错误排查完毕后,在 迁移任务列表 页面,选择当前迁移任务,单击 启动,如下图所示。
8. 系统预检查通过后,单击 确定,自动进行迁移任务,如下图所示。
4.2.1.4.3后续操作
为了保证本地数据库安全,请在数据迁移完成后,删除本地数据库和 RDS 实例中的迁移帐号。
4.2.2使用 FTP 迁移数据
4.2.2.1背景信息
阿里云数据库 SQL Server 版导入数据有如下限制:
仅支持导入 SQL Server 2005、SQL Server 2008、SQL Server 2008R2 版本数据
仅支持全量数据导入
数据库的 Recover Mode 必须是 FULL 模式
4.2.2.2前提条件
已创建目标实例和数据库
如果数据库里有数据,请做好备份,目标数据库中的数据将被覆盖
为了确保数据一致性,请停止本地数据库的写入操作
准备好 Filezilla 3.6.0.2 客户端 软件,请注意软件版本,且安装后请不要升级版本
4.2.2.3操作步骤
4.2.2.3.1准备本地数据
1. 执行如下命令,检查本地数据库的 Recover Mode。
use master;
go
select name, case recovery_model
when 1 then 'FULL'
when 2 then 'BULD_LOGGED'
when 3 then 'SIMPLE' end model from sys.databases
where name not in ('master','tempdb','model','msdb');
go
确认本地数据库的 model 值:
l 如果 model 值不为 FULL,请执行步骤 2。
l 如果 model 值为 FULL,请执行步骤 3。
2. 执行如下命令,设置源数据库的 Recover Mode 为 FULL。 注意: Recover Mode 改成 FULL 模式会导致 SQL Server 日志增加,请注意有足够的硬盘空间。
ALTER DATABASE [dbname] SET RECOVERY FULL;
go
ALTER DATABASE [dbname] SET AUTO_CLOSE OFF;
go
3. 备份源数据库,本例以备份文件名为 filename.bak 为例。
use master;
go
BACKUP DATABASE [testdbdb] to disk ='d:\backup\filename.bak' WITH COMPRESSION,INIT;
go
4. 还原源数据库的 Recover Mode。
说明: 如果您未执行步骤 2,即数据库 Recover Mode 原为 FULL,则无需执行该步骤。
ALTER DATABASE [dbname] SET RECOVERY SIMPLE;
go
4.2.2.3.2正式迁移操作
1. 登录 RDS 管理控制台,选择目标实例。
2. 在菜单中选择 数据库管理。
3. 在 数据库管理 页面单击 备份文件(bak)迁入,如下图所示。
4、在 数据导入向导 页面的 备份你的数据库 步骤确认已参照 备份本地数据 备份好本地数据库后,单击 下一步,如下图所示。
5、 在 上传备份文件 步骤单击 获取 FTP 信息,获取备份文件上传 FTP 信息,如下图所示。
6. 将本地数据库备份文件名更改为上一步骤中获取的文件名。 注意: 本地备份文件名必须更改为上一步骤中提供的文件名,否则备份文件无法上传成功。
7. 打开 FileZilla 软件,选择 文件 > 站点管理器。
8. 单击 新站点,创建并命名新站点后,按步骤 5 中获取的 FTP 信息填写站点信息,如下图所示。
主机:FTP 信息中的 外网服务器
端口:FTP 信息中的 外网服务器端口
加密:选择 要求隐式的 FTP over TLS
登录类型:选择 正常
用户:FTP 信息中的 FTP 帐号
密码:FTP 信息中的 FTP 密码
9. 选择 传输设置 页签,设置 传输模式 为 被动,单击 连接,如下图所示。 说明: 系统会弹出 未知证书 提示,单击 确定 即可。
10. 连接 FTP 服务器后,将备份文件按步骤 5 中提供的文件名更名后,上传至 FTP 服务器。
11. 返回 RDS 管理控制台 的 数据导入向导,单击 下一步 进入 数据导入 步骤。
12.
确认 FTP 上传完成,且文件大小无误后,单击 数据导入,在弹出的确认框中单击 确定,如下图所示。
注意:
如果导入残缺或者非法文件,导入会失败,该实例控制台将一直处于恢复中状态,请提交工单解除该状态。
如果导入数据后,实例磁盘容量超过总使用量的 85%,则无法进行导入。请先删减实例的数据或扩展磁盘容量。
13. 数据导入完成后,单击 关闭,结束数据导入。
4.2.2.3.3后续操作
本地数据导入阿里云后,您可以在菜单中选择 备份文件迁入记录,查看数据导入记录,执行 数据导入 操作。
4.3 RDS for PostgreSQL
4.3.1使用DTS数据迁移
使用数据传输服务可以轻松得将本地的PostgreSQL迁移至RDS PostgreSQL,目前数据传输服务可以支持PostgreSQL的结构迁移及全量数据迁移。
4.3.1.1迁移类型简介
l 结构迁移
数据传输服务会将迁移对象的结构定义迁移到目标实例。对于PostgreSQL,数据传输服务支持结构迁移的对象有:Table、trigger、view、sequence、function、user defined type、rule、domain、operation、aggregate
l 全量迁移
数据传输服务会将源数据库迁移对象在的数据全部迁移到目标实例。为了保证迁移数据一致性,建议在迁移过程中,源数据库停止业务写入。如果在迁移过程中
,源数据库有业务写入的话,那么全量迁移后,源跟目标库数据可能不一致
4.3.1.2迁移限制
l 源实例,支持PostgreSQL 9.2、9.3、9.4
l 迁移过程中,不支持DDL操作
l 不支持迁移使用C语言编写的function
l 如果使用了对象名映射功能后,依赖这个对象的其他对象可能迁移失败
4.3.1.3迁移权限要求
当使用数据传输服务进行PostgreSQL迁移时,在不同迁移类型情况下,源跟目标数据库的迁移帐号权限要求如下:
迁移类型 |
结构迁移 |
全量迁移 |
本地PostgreSQL实例 |
pg_catalog的usage权限 |
迁移对象的select |
目的RDS实例 |
迁移对象的create、usage权限 |
schema的owner |
4.3.1.4迁移顺序
数据传输服务在进行PostgreSQL->RDS
For PostgreSQL数据迁移时,为了解决对象间的依赖,提高迁移成功率。结构对象及数据的迁移顺序如下:
(1) 进行结构对象:Table、view、sequence、function、user defined type、rule、domain、operation、aggregate的迁移
(2) 全量数据迁移
(3) 进行结构对象:trigger、foreign key的迁移
全量数据迁移完成后,任务列表中的迁移进度如下图,结构迁移100%,全量迁移100%,但是迁移状态为“迁移中”,此时迁移任务正在进行步骤(3)中的对象的迁移。此时,请勿直接结束任务,否则会造成迁移对象丢失。
4.3.1.5迁移步骤
下面详细介绍下用户如何使用数据传输服务将本地的PostgreSQL迁移到RDS上的流程
4.3.1.5.1 RDS实例数据库创建
在正式迁移之前,需要确认目标RDS实例中是否已经创建好了需要迁入的数据库,如果没有创建的话,需要先创建迁入数据库。
4.3.1.5.2迁移帐号创建
在正式迁移之前,需要先在本地PostgreSQL数据库及云上RDS实例中创建迁移帐号,并将要迁移的库表的相应权限授权给上面创建的帐号。
4.3.1.5.3正式迁移
当上面的所有前提条件都配置完成后,就可以开始正式的数据迁移了。下面详细介绍下具体的迁移步骤。
1. 进入DTS控制台,点击创建迁移任务,正式开始任务创建
2. 填写本地PostgreSQL跟目标RDS实例的连接信息
这里面源实例类型要选择有公网IP的自建数据库。
源实例需要填写如下几个内容:
实例类型: 实例类型需要选择有公网IP的自建数据库
数据库类型: 数据库类型需要选择PostgreSQL
主机名或IP地址: 数据库服务安装服务器的IP或实例的连接串地址
端口: 数据库监听端口号
数据库名称: 需要迁移对象所属数据库
账号: 数据库连接账号
密码: 数据库连接账号对应的密码
目标实例需要填写如下几个内容:
RDS实例ID: 需要迁入数据的RDS实例ID
数据库名称: 需要迁入对象所属的数据库
账号: 数据库连接账号
密码: 数据库连接账号对应的密码
3. 选择迁移对象及迁移类型
默认情况下,迁移对象迁移到目标库后,对象名跟源库一致。如果目标库对象名同源库不同,那么可以使用数据传输服务提供的对象名映射功能。
对于需要映射的对象,将鼠标挪到已选择对象框中,对应对象行上,右边会出现“编辑”按钮,点击编辑进入对象编辑页面,既可以修改对象名。
当点击编辑后,即进入对象名称修改页面:
修改了对象名后,目标实例要导入数据的对象名称即为修改后的对象名。
这里面只是简单介绍了配置对象映射的流程,详细操作方式详见数据迁移手册中的库表列映射。
数据传输服务同时还支持迁移数据过滤,具体使用方式详见数据迁移手册中的配置SQL条件过滤数据。
4. 启动预检查
在数据正式迁移之前,会先进行基础预检查,只有预检查通过后,才能启动迁移
如果预检查失败,那么可以查看具体的失败详情,根据失败原因修复后,重新进行预检查
当点击查看后,可以查看到具体的预检查失败原因:
当修复完成后,可以在任务列表中,选择这个任务,然后重新启动任务
5.
启动迁移任务
当预检查通过后,我们可以启动迁移任务,任务启动后,可以到任务列表中查看具体的迁移状态及进度
至此,完成将本地PostgreSQL数据库移到RDS的数据迁移任务配置。
4.3.2使用psql迁移数据
本例介绍通过 psql 命令将 PostgreSQL 数据备份文件恢复到目标 RDS中。
4.3.2.1背景信息
PostgreSQL 支持逻辑备份。我们使用 pg_dump 逻辑备份功能,导出备份文件,再通过 psql 导入到 RDS 中,实现将 PostgreSQL 的数据导入到 RDS 中。
4.3.2.2前提条件
已完成 RDS 实例数据库的准备,可参见 设置连接模式 和 创建数据库和帐号。
4.3.2.3操作步骤
4.3.2.3.1准备本地数据
1. 通过 PostgreSQL 客户端,连接本地 PostgreSQL 数据库。
2. 执行如下命令,备份数据。
pg_dump -U username -h hostname -p port databasename -f filename
参数说明如下:
username:本地数据库用户名
hostname:本地数据库主机名,如果是在本地数据库主机登录,可以使用 localhost
port:本地数据库端口号
databasename:要备份的本地数据库名
filename:要生成的备份文件名称
例如,数据库用户 William 要备份本地 PostgreSQL 数据库,登录 PostgreSQL 主机后,通过如下命令备份数据。
pg_dump -U William -h localhost -p 3433 pg001 -f pg001.sql
4.3.2.3.2正式迁移操作
说明:
通过 RDS 内网恢复数据,网络更稳定,数据更安全。建议您通过将数据上传到云服务器 ECS 上,然后通过内网将数据恢复到目标 RDS上。如果数据文件太大,可以先压缩后再上传。本例以该方式为例进行说明。
1. 登录云服务器 ECS
2. 通过 PostgreSQL 客户端,执行如下命令将数据导入到 RDS 中。
psql -U username -h hostname -d desintationdb -p port -f dumpfilename.sql
参数说明如下:
username:RDS 上的 PostgreSQL 数据库用户名
hostname:RDS 上的 PostgreSQL 数据库地址
port:RDS 上的 PostgreSQL 数据库端口号
databasename:RDS 上的 PostgreSQL 数据库名
filename:本地备份数据文件名
例如:
psql -U William -h postgresql.rds.aliyuncs.com -d pg001 -p 3433 -f pg001.sql
由于 RDS 数据库的权限设置和本地数据库不一致,在数据导入过程当中可能会出现一些与权限相关的 WARNING 或 ERROR,可以忽略,如:
WARNING: no privileges could be revoked for "xxxxx"
ERROR: role "xxxxx" does not exist
4.4 RDS for PPAS
4.4.1使用DTS数据迁移
使用数据传输服务(DTS)将本地数据库迁移到 RDS,可以实现应用不停服务的情况下,平滑完成数据库的迁移工作。迁移过程中,对本地的 Oracle 数据库没有影响。
4.4.1.1背景信息
DTS 数据迁移支持 PPAS 的结构迁移和全量迁移。
结构迁移
DTS 会将迁移对象的结构定义迁移到目标实例。目前 DTS 支持结构迁移的对象有:表、视图、同义词、触发器、存储过程、存储函数、包、自定义类型。
全量迁移
DTS 会将本地数据库迁移对象的数据全部迁移到目标实例。如果迁移过程中,本地 Oracle 数据库有数据写入的话,那么这些增量数据不一定能够被迁移到 RDS 中。所以,如果要保证数据一致性,那么尽量选择在业务低峰期进行全量迁移。
4.4.1.2迁移限制
将 PPAS 本地数据库迁移到 RDS 上有以下限制。
迁移过程中,不支持 DDL 操作
不支持物化视图的迁移
结构迁移时,会将 reverse index 迁移成普通索引
结构迁移时,会将位图索引迁移成普通索引
结构迁移时,会将分区索引迁移成在每个分区上单独创建的索引
4.4.1.3前提条件
已完成 RDS 实例数据库的准备,可参见 设置连接模式 和 创建数据库和帐号。
4.4.1.4操作步骤
本例以有公网 IP 的本地数据库迁移到 RDS 上为例。
4.4.1.4.1准备本地数据
在正式迁移之前,需要先在本地数据库和 RDS 实例中创建迁移帐号,并在 RDS 实例中创建要迁移的数据库,并将要迁移的数据库的读写权限授权给迁移帐号。不同的迁移类型需要不同的权限,如下表所示。
迁移类型 |
结构迁移 |
全量迁移 |
本地 Oracle 实例 |
schema 的 owner |
schema 的 owner |
RDS 上 PPAS 实例 |
schema 的 owner |
schema 的 owner |
1ï¼Â 通过 PostgreSQL 客户端,在本地数据库中创建迁移帐号。
CREATE USER username IDENTIFIED BY password;
参数说明:
l username:要创建的帐号
l password:该帐号的登录密码
例如:
CREATE USER myuser IDENTIFIED BY mypassword;
2. 在本地数据库中给迁移帐号授权,本地数据库中迁移帐号的权限要求请参见上表。
GRANT privileges ON tablename TO username;
参数说明:
l privileges:该帐号的操作权限,如 SELECT、INSERT、UPDATE 等。如果要授权该帐号所有权限,则使用 ALL
l tablename:表名。如果要授权该帐号所有的表权限,则使用通配符 *
l username:要授权的帐号名
例如:
GRANT ALL ON * TO myuser;
4.4.1.4.2正式迁移操作
1. 在 RDS 管理控制台 上单击 迁移数据库,进入 DTS,如下图所示。
2. 单击 创建在线迁移任务,进入 创建迁移任务 页面,如下图所示。