数据迁移最佳实践

数据迁移最佳实践概述

该部分主要从Mysql数据库上云迁移SQL Server数据库上云迁移PostgreSQL数据库上云迁移三个部分来为用户展示不同数据库上云迁移的步骤,帮助用户尽快将本地服务器或是其他虚拟服务器上的数据库迁移到云上。

Mysql数据库上云迁移

简介

随着云计算的兴起,考虑到数据库的稳定性和运维成本,越来越多的企业,会将运行在本地服务器或是其他虚拟服务器上的数据库迁移到云上。当前将数据库迁移到RDS for Mysql的方法包括停机迁移、不停机迁移,下面将详细介绍这两种上云迁移方法的不同方案,我们推荐您使用DTS来进行迁移。

迁移方法

停机迁移

如果应用程序可以接受一定时间的停服,那么停机迁移是最简单的方案。目前有2种方案可以选择:

mysqldump方式

具体步骤如下:

  • 停止应用程序的写入,或关闭应用程序服务器;
  • 使用mysqldump工具,备份出所有的库表:
    mysqldump –u dbuser –p dbpass -h dbhost -Pdbport -A > data.sql
  • 通过RDS域名来连接,使用mysql客户端工具将备份出来的数据库导入到RDS上:
    mysql -u dbuser -p dbpass -h rdsdns -Pdbport < data.sql
  • 修改应用程序中数据库的连接地址,重新启动应用程序服务器或开启写入。

DTS数据迁移方式(推荐方式)

具体步骤如下:

  • 停止应用程序的写入,或关闭应用程序服务器;
  • 在DTS上配置源端和目标端的数据库连接方式,选择结构+全量迁移,并启动任务。DTS数据迁移的操作步骤详见:https://cloud.baidu.com/doc/DTS/GettingStarted.html#.E6.95.B0.E6.8D.AE.E8.BF.81.E7.A7.BB
  • 等DTS迁移任务运行结束后,修改应用程序中数据库的连接地址,重新启动应用程序服务器或开启写入;
  • 结束DTS迁移任务。

不停机迁移

一般情况下,应用程序希望在不停服的情况下,将数据库迁移到云上,而且如果迁移数据库的数据量很大的时候,停服时间将很长,这也是不可接受的。目前,不停机迁移有2种方案可以选择:

mysqldump + 主从复制方式

此方法只适用于开启GTID的Mysql,具体步骤如下:

  • 使用与Mysql Server同版本的mysqldump工具,导出所有的库表数据:
    mysqldump –u dbuser –p dbpass -h dbhost -Pdbport -A > data.sql
  • 在RDS上申请Super权限,通过RDS域名连接,并使用Mysql客户端工具将备份出来的数据导入进去:
    mysql -u dbuser -p dbpass -h rdsdns -Pdbport < data.sql
  • 使用Mysql客户端登录,执行change master to master_host=xxx, master_port=xxx, master_user=xxx, master_password=xxx, master_auto_position=1;,开始追增量;
  • 开始停止应用程序写入,等到追上老主库的数据后,修改应用程序的数据库访问地址,并开始写入,这样就能达到短暂停写来实现上云迁移。

xtrabackup方式

此方法需要发工单联系RDS值班人员来恢复数据,具体步骤如下:

  • 使用xtrabackup工具进行数据库热备,然后将备份出来的数据上传到百度智能云BOS上:
    innobackupex --user=dbuser --password=dbpass --host=dbhost --port=dbport /path/to/BACKUP-DIR/
  • 通过工单方式,将备份数据的BOS地址提供给RDS值班人员,进行数据的恢复;
  • 数据恢复完成后,在RDS上申请Super权限,使用Mysql客户端登录,执行change master,此处可以使用binlog file+position或gtid的方式来进行同步增量;
  • 开始停止应用程序写入,等到追上老主库的数据后,修改应用程序的数据库访问地址,并开始写入,从而完成上云迁移。

DTS增量迁移方式(推荐方式)

具体步骤如下:

SQL Server数据库上云迁移

简介

RDS针对SQL Server数据库提供在线和离线数据迁移方法,在线方法通过控制台完成数据库的迁移。用户不停服务即可完成数据库的在线迁移,此功能支持SQL Server 2008 以上版本的数据库迁移,而离线数据迁移需要用户提供全量备份包之后,我们通过线下方式给用户恢复到rds上面。

线下迁移注意事项

备份之前数据库的恢复模式改为完整模式

线下迁移步骤

用户使用SQL命令备份对应的库

USE master  
    BACKUP DATABASE dbname1 TO DISK ='D:\dbname1.bak' with INIT;  
    BACKUP LOG dbname1 TO DISK ='D:\dbname1.bak' WITH NOINIT;  
    GO

把bak备份包上传到可下载的地方,并提供给客服,就会进行线下迁移迁移。

PostgreSQL数据库上云迁移

简介

RDS PostgreSQL支持用户使用离线的方式完成对自建数据库迁移的需求。为了保证数据的同步性,建议用户在使用离线迁移的时候执行停机操作。

概述

当用户需要迁移的数据源基于PostgreSQL数据库时,由于RDS提供的关系型数据库服务与PostgreSQL数据库完全兼容,用户将原有数据库迁移到RDS实例的过程,类似于将一个PostgreSQL服务器迁移到另一个PostgreSQL服务器的过程。这个过程可以使用pg_dump工具来实现。

迁移步骤

创建RDS实例

用户创建RDS实例后,系统会为用户提供RDS实例的域名和端口,如:postgresql94.example.rds.bj.baidubce.com:3306。具体内容请参考《RDS操作指南 创建RDS实例》。

创建数据库和帐号

用户在控制台创建RDS实例之后,继续在其中创建需要的数据库和帐号并分配对应的读写权限。具体内容请参考《RDS操作指南 创建数据库》和《RDS操作指南 创建帐号

用户数据导出

  1. 利用pg_dump导出用户数据

使用pg_dump工具从用户的PostgreSQL数据源中导出需要导入RDS实例中的数据文件(本步骤仅导出数据,不包括存储过程、触发器及函数)。命令格式如下:

${pgdir}/bin/pg_dump –h ${ip} -p ${port} –d ${db_name} –U
${user} -f ${datadir}/${db_name}.sql

参数说明:

参数 说明
${pgdir} 用户本地安装PostgreSQL的路径
${ip} 用户本地PostgreSQL服务的IP地址
${port} 用户本地PostgreSQL服务的端口
${user} 用户本地PostgreSQL数据库用户名
${db_name} 用户本地需要迁移的自建数据库名
${datadir} 用户本地备份生成的文件路径
${db_name}.sql 用户本地备份生成的文件名

通过云服务器BCC将数据迁移至RDS

  1. 将备份文件上传至云服务器BCC
    使用云服务器的方法请参考《操作指南 管理云服务器》,以下用Linux服务器为例,假设已上传的文件在云服务器中的路径为:

    /tmp/${db_name}.sql

  2. 将数据迁移至RDS
    使用云服务器将上传的数据文件导入到已购买的RDS实例中,命令格式:

    ${pgdir}/bin/psql –U ${rds_user} –h ${rds_ip} –p
    ${port} -d ${rds_db_name} -f /tmp/${db_name}.sql

参数说明:

参数 说明
${rds_ip} RDS实例的域名,具体请参考《操作指南 使用RDS实例
${rds_user} RDS数据库帐号,具体请参考《操作指南 管理数据库帐号
${rds_db_name} RDS中数据库名,具体请参考《操作指南 管理数据库
${port} RDS中PostgreSQL服务的端口
${db_name}.sql 用户备份生成的文件名

注意:

由于帐号针对每个数据库都有访问权限,因此用户需要提前在RDS中创建需要导入数据的数据库并赋予对应使用帐号的读写权限才可以成功导入数据。

至此数据迁移完毕,用户可使用数据库客户端工具或程序的方式,通过RDS实例连接地址、端口号、数据库帐号和密码连接数据库。