场景描述

在帮助用户实施上云规划的时候,绕不开的一个话题,就是数据库怎么迁移到云平台上面?针对于这个问题的回答,可以使用AWS DMS这个服务,来进行把本地的数据库,迁移到aws上面。

什么是DMS

AWS Database Migration Service(AWS DMS) 是一种云服务,可以迁移关系数据库、数据仓库、NoSQL 数据库和其他类型的数据存储。您可以使用将数据迁移AWS DMS到云和本地设置的组合中,AWS Cloud或者在云和本地设置的组合之间迁移。

借AWS DMS助,您可以发现源数据存储、转换源架构和迁移数据。

  • 要发现您的源数据基础架构,您可以使用 DMS Fleet Advisor。该服务从您的本地数据库和分析服务器收集数据,并建立可以迁移到云端的服务器、数据库和架构清单。AWS

  • 要迁移到其他数据库引擎,可以使用 DMS 架构转换。此服务会自动评估您的源架构并将其转换为新的目标引擎。或者,您可以将 AWS Schema Conversion Tool (AWS SCT) 下载到本地 PC 以转换源架构。

  • 转换源架构并将转换后的代码应用到目标数据库后,您可以使用迁AWS DMS移数据。您可以执行一次性迁移或复制正在进行的更改,以保持源和目标同步。因为AWS DMS是其中的一部分AWS Cloud,您可以获得AWS服务所提供的成本效率、上市速度、安全性和灵活性。

在基本层面上,AWS DMS是运行复制软件AWS Cloud的服务器。您可以创建源连接和目标连接,以告知从AWS DMS何处提取数据以及将数据加载到何处。接下来,您计划在此服务器上运行的任务来移动数据。 AWS DMS如果目标上不存在表和关联的主键,则创建这些表和关联的主键。如果你愿意,你可以自己创建目标表。或者你可以使用 AWS Schema Conversion Tool (AWS SCT) 来创建部分或全部目标表、索引、视图、触发器等。

迁移说明

宁夏的EC2云主机,去自建一个数据库。

使用DMS服务迁移到北京的RDS上面。

注意事项:数据库的版本要一致。

宁夏EC2自建数据库

自建数据库

使用到的工具为docker,用docker可以快速的构建一个mysql数据库,然后批量添加数据。

curl http://169.254.169.254/latest/dynamic/instance-identity/document ###使用这个命令可以查看到ec2的元数据信息

###安装docker
yum -y install docker

###启动docker
systemctl start docker && systemctl enable docker

###下载mysql镜像
docker pull mysql:8

###启动mysql
mkdir -p /data/mysql
#命令解释:这里创建一个名字为aws_mysql,宿主机3306映射到容器3306端口,密码是qaz@WSX123. 宿主机的/data/mysql 映射到容器内部的/var/lib/mysql/ 镜像是mysql:8  小伙伴们可以根据自己的实际情况去自定义
docker run --name aws_mysql -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=qaz@WSX123. -v /data/mysql/:/var/lib/mysql mysql:8


生成测试数据

首先我们需要登录到数据库中,然后进行授权

###登录到容器内部
docker exec -it aws_mysql /bin/bash

###添加一个用户
mysql> alter user 'root'@'%' identified with mysql_native_password by 'root';
Query OK, 0 rows affected (0.01 sec)

###对该用户设置密码
mysql> set password for 'root'@'%' = 'qaz@WSX123.';
Query OK, 0 rows affected (0.01 sec)

###授权
mysql> grant all privileges on *.* to 'root'@'%' ;
Query OK, 0 rows affected (0.00 sec)


###权限刷新
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)


###退出命令行界面
mysql> exit
Bye

###退出容器终端
bash-4.4# exit
exit


以上步骤就是对一个数据库进行授权


连接本地数据库

连接数据库有两种方法,一种是直接用ec2安装mysql客户端去连接,一种是使用客户端工具:Navicat去连接

ec2安装mysql客户端连接

###安装客户端工具
yum -y install mysql

###连接
mysql -uroot -p -P3306 -h127.0.0.1

Navicat工具连接(推荐)

如果不知道Navicat是怎么安装的,可以查看的我另外一篇文章,里面有涉及。这里不做安装的演示

Navicat安装:Navicat15.0工具安装与使用(含破解方法)

创建库和表

ec2创建库

###按照上面的操作方法,先登录到数据库
create database test;

###在test库里面去创建表
use test;
###创建表用于测试
CREATE TABLE users (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(50),
  age INT,
  event_time DATETIME
);

Navicat操作

脚本生成测试数据

脚本内容

vim mysql.sh
#!/bin/bash

# 定义生成SQL语句的函数
generate_sql() {
  local id=$1
  local name=$2
  local age=$3

  # 生成INSERT语句
  echo "INSERT INTO users (id, name, age , event_time) VALUES ('$id', '$name', '$age',NOW());"
}

# 生成10万条数据
for ((i = 1; i <= 100000; i++)); do
  id=$i
  name="User$i"
  age=$((RANDOM % 18 + 65))  # 生成随机年龄

  generate_sql "$id" "$name" "$age"
done


###执行脚本,输出为一个sql文件
bash mysql.sh >test.sql

导入sql文件

ec2导入方式:

先登录到mysql数据库中,然后执行source test.sql;

Navicat方式导入文件

至此:源数据准备完成


DMS使用

创建一个DMS复制实例

在有了源数据之后,我们接下来需要到AWS控制台上面去创建一个复制实例。该实例的内存、cpu取决于前期的规划。这里只是用作与测试,因此给的实例时2C4G的一个实例



然后点击创建

创建一个端点(源)

最后点击创建端点:

创建一个RDS数据库(Mysql)

需要导航到RDS中,然后去创建对应的mysql数据库


下面的其他选项:保持默认的就好。然后点击创建。

使用Navicat去连接该数据库。之所以要连接,是因为我们在迁移之后,要验证数据

创建端点(目标)

创建迁移任务

其他的保持默认,下面主要就是表映射

选择稍后手动启动

等待创建完成之后,然后我们点击启动任务。然后就开始迁移了。迁移的过程、取决于您的网络带宽、cpu性能、io吞吐量等

可以参考这一篇文章:https://aws.amazon.com/cn/dms/faqs/


开始启动迁移

启动迁移

数据验证

接下来我们去用Navicat工具去查看是否有这个test库和users表

增量同步测试

现在利用脚本往源数据库里面再去插入10w条数据

我们需要修改的就是范围

vim mysql2.sh
#!/bin/bash

# 定义生成SQL语句的函数
generate_sql() {
  local id=$1
  local name=$2
  local age=$3

  # 生成INSERT语句
  echo "INSERT INTO users (id, name, age , event_time) VALUES ('$id', '$name', '$age',NOW());"
}

# 生成10万条数据
for ((i = 100001; i <= 200000; i++)); do
  id=$i
  name="User$i"
  age=$((RANDOM % 18 + 30))  # 生成随机年龄

  generate_sql "$id" "$name" "$age"
done

可以看到已经同步过来了。

自我判定

#

判定描述

自我判定(是/否)

1在各搜索引擎中是否能找到知识信息(包括但不限于Google、百度、Bing)
2是否需要代码集成开发