访问阿里云免费试用页面 https://free.aliyun.com,申请免费的 RDS 实例 和 ECS 服务器。
参考官方试用教程完成申请。


登录阿里云控制台,在顶部搜索栏搜索 "云数据库 RDS",点击进入 RDS 管理页面。

在 RDS 控制台左侧导航栏点击 "实例列表",可以查看已创建的 RDS 实例信息,包括实例ID、地域、数据库类型及状态等。

点击目标实例进入详情页,在左侧菜单中选择 "数据安全性" → "白名单设置"。
在设置白名单前,需要先查看本地的公网 IP 地址:
bash# 在本地 Windows 命令行中执行
C:\Users\Administrator> curl -4 ifconfig.me
183.69.158.166
将获取到的公网 IP 地址添加到 RDS 白名单中,以允许本地设备远程访问数据库。

在 RDS 实例详情页,点击左侧菜单 "账号管理" → "创建账号",创建一个普通数据库用户:
user01User01pass)
在 RDS 实例详情页,点击左侧菜单 "数据库管理" → "创建数据库":
mysql_testuser01创建完成后,user01 即拥有 mysql_test 数据库的读写权限。

在 RDS 实例详情页的 "数据库连接" 区域,点击 "申请外网地址",系统会分配一个外网访问域名(如 rm-xxxxx.mysql.rds.aliyuncs.com),记录该地址用于后续远程连接。

打开本地 Navicat,新建 MySQL 连接,填写以下信息:
| 配置项 | 值 |
|---|---|
| 连接名 | 自定义(如 RDS_MySQL) |
| 主机 | RDS 外网地址 |
| 端口 | 3306 |
| 用户名 | user01 |
| 密码 | 对应密码 |
点击 "测试连接",提示成功后点击 "确定" 保存连接。

在 Navicat 中双击打开 mysql_test 数据库,点击 "查询" → "新建查询",依次执行以下 SQL 语句:
(1)建表操作
sqlCREATE TABLE user(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
age TINYINT(100) NOT NULL,
sex CHAR(1) NOT NULL
);
(2)插入数据
sqlALTER TABLE user AUTO_INCREMENT = 1;
INSERT INTO user(name, age, sex) VALUES ('Lucas', 20, 'F');
INSERT INTO user(name, age, sex) VALUES ('Buryce', 20, 'F');
INSERT INTO user(name, age, sex) VALUES ('Lucas', 20, 'M');
(3)删除数据
sqlDELETE FROM user WHERE name LIKE 'Buryce';
(4)修改数据
sqlUPDATE user SET age = 21 WHERE name LIKE 'Lucas';
(5)查询数据
sqlSELECT * FROM user;

通过 SSH 登录阿里云 ECS 服务器(Ubuntu),执行以下命令安装 MySQL:
bashsudo apt update sudo apt install mysql-server -y
bashsudo systemctl start mysql
sudo systemctl enable mysql
验证 MySQL 运行状态:
bashroot@Ubuntu:/home/user01# systemctl status mysql
● mysql.service - MySQL Community Server
Loaded: loaded (/usr/lib/systemd/system/mysql.service; enabled; preset: enabled)
Active: active (running) since Fri 2026-04-03 20:41:19 CST; 1min 53s ago
Process: 15883 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
Main PID: 15895 (mysqld)
Status: "Server is operational"
Tasks: 37 (limit: 1860)
Memory: 363.6M (peak: 383.5M)
CPU: 1.527s
CGroup: /system.slice/mysql.service
└─15895 /usr/sbin/mysqld
Apr 03 20:41:18 Ubuntu systemd[1]: Starting mysql.service - MySQL Community Server...
Apr 03 20:41:19 Ubuntu systemd[1]: Started mysql.service - MySQL Community Server.
输出显示
Active: active (running)表示 MySQL 服务正常运行。
bashsudo mysql_secure_installation
按提示依次配置,默认全部选择 Y 即可(设置 root 密码、移除匿名用户、禁止远程 root 登录等)。
bashroot@Ubuntu:/home/user01# mysql
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
Query OK, 0 rows affected (0.01 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
bashroot@Ubuntu:/home/user01# mysql -u root -p
Enter password: (输入密码,屏幕不显示)
# 成功进入 mysql> 提示符即表示配置正确
登录 MySQL 后,创建目标迁移数据库 migrate 及测试表 staff:
sqlmysql> CREATE DATABASE migrate;
Query OK, 1 row affected (0.01 sec)
mysql> USE migrate;
Database changed
mysql> CREATE TABLE staff(
-> id INT PRIMARY KEY,
-> name VARCHAR(10),
-> age VARCHAR(10),
-> sex VARCHAR(10)
-> );
Query OK, 0 rows affected (0.08 sec)
mysql> INSERT INTO staff VALUES(1, 'joe', '28', 'male');
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO staff VALUES(2, 'Anny', '23', 'female');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO staff VALUES(3, 'Bob', '18', 'male');
Query OK, 1 row affected (0.01 sec)
为 DTS 数据迁移服务创建一个专用账号并授权:
sqlCREATE USER 'migration'@'%' IDENTIFIED BY '123456';
GRANT ALL ON *.* TO 'migration'@'%';
FLUSH PRIVILEGES;
编辑 MySQL 配置文件:
bashvim /etc/mysql/mysql.conf.d/mysql.cnf
在文件中添加以下内容:
ini[mysqld]
server_id = 2
log_bin = mysql_bin
binlog_format = row
binlog_row_image = full
保存后重启 MySQL 服务,并验证 binlog 已正确开启:
bashsudo systemctl restart mysql
sqlmysql> SHOW VARIABLES LIKE '%binlog_format%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW |
+---------------+-------+
1 row in set (0.01 sec)
确认
binlog_format的值为 ROW 即表示配置成功。
登录阿里云控制台 https://home.console.aliyun.com/,在顶部搜索框搜索 "数据传输服务 DTS",点击进入。

在左侧导航栏点击 "数据迁移",选择实例所属地域,即可创建和管理迁移任务。

点击 "创建迁移任务",填写基本信息并配置 源库 和 目标库 的连接信息:
| 配置项 | 源库(ECS自建MySQL) | 目标库(RDS实例) |
|---|---|---|
| 接入方式 | 公网IP | RDS实例 |
| 数据库类型 | MySQL | MySQL |
| 地址 | ECS公网IP | RDS内网地址(自动填入) |
| 端口 | 3306 | 3306 |
| 账号 | migration | user01 |
| 密码 | 123456 | 对应密码 |

填写完连接信息后,点击 "测试连接"。如果出现连接失败,需要逐一排查以下问题:
(1)测试连接报错

(2)检查ECS安全组规则
进入 ECS 控制台,找到实例的安全组,确保 3306 端口 已放通(入方向规则)。

(3)将ECS公网IP加入RDS白名单
在 RDS 实例的白名单设置中,添加 ECS 服务器的公网 IP(推荐临时设置为 0.0.0.0/0 全部放开,迁移完成后收回)。

(4)修改ECS MySQL监听地址
编辑 ECS 上的 MySQL 配置文件,允许外部访问:
bashvim /etc/mysql/mysql.conf.d/mysqld.cnf
找到并修改以下两行:
inibind-address = 0.0.0.0
mysqlx-bind-address = 0.0.0.0
修改后重启 MySQL,并验证监听状态:
bashsudo systemctl restart mysql
netstat -tulpn | grep 3306
# 输出应显示:0.0.0.0:3306,表示已对所有地址开放监听
测试连接全部通过后,进入 "迁移对象" 步骤。在左侧勾选需要迁移的数据库 migrate(含表 staff),点击 > 按钮将其添加到右侧已选列表中。

进入 "高级配置" 页面,保持默认设置即可,无需额外修改。

进入 "数据校验" 页面,选择 "结构校验"(免费选项),用于迁移完成后自动校验源库和目标库的表结构一致性。

进入 "预检查" 步骤,系统会自动检查迁移任务的前置条件(数据库连通性、账号权限、binlog 配置等)。等待所有检查项通过。

预检查全部通过后,才能进入下一步购买并启动。
预检查通过后,确认配置信息并点击 "购买并启动",完成 DTS 迁移任务的创建。

返回数据迁移任务列表,可以看到任务状态,等待迁移完成后状态显示为 "已完成"。

在本地 Navicat 中刷新远程连接的 RDS 数据库,可以成功看到从 ECS 迁移过来的数据库 migrate 及表 staff。

在 ECS 服务器上执行以下命令:
bashroot@Ubuntu:~# python3 -m venv myenv
root@Ubuntu:~# source myenv/bin/activate
(myenv) root@Ubuntu:~# pip install pymysql
安装输出:
Looking in indexes: http://mirrors.cloud.aliyuncs.com/pypi/simple/ Collecting pymysql Downloading http://mirrors.cloud.aliyuncs.com/pypi/packages/7c/4c/ad33b92b9864cbde84f259d5df035a6447f91891f5be77788e2a3892bce3/pymysql-1.1.2-py3-none-any.whl (45 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 45.3/45.3 kB 4.0 MB/s eta 0:00:00 Installing collected packages: pymysql Successfully installed pymysql-1.1.2
创建 rds.py 文件:
bash(myenv) root@Ubuntu:~# vim rds.py
rds.py 内容如下:
pythonimport pymysql
RDS_HOST = "rm-bp1w07s3m821014ic5o.mysql.rds.aliyuncs.com" # RDS公网地址
RDS_PORT = 3306
RDS_USER = "user01"
RDS_PASSWORD = "User01pass"
RDS_DB = "migrate"
try:
conn = pymysql.connect(
host=RDS_HOST,
port=RDS_PORT,
user=RDS_USER,
password=RDS_PASSWORD,
database=RDS_DB
)
print("连接成功!")
cursor = conn.cursor()
cursor.execute("SELECT * FROM staff;")
for row in cursor.fetchall():
print(row)
except Exception as e:
print("错误:", e)
bash(myenv) root@Ubuntu:/home/user01# python rds.py
输出结果:
连接成功! (1, 'joe', '28', 'male') (2, 'Anny', '23', 'female') (3, 'Bob', '18', 'male')
程序成功连接到 RDS 数据库,并读取到从 ECS 迁移过来的
staff表数据,验证数据迁移完整且可正常使用。
本实验完成了以下内容:
RDS实例创建与配置:在阿里云控制台创建 RDS MySQL 实例,配置白名单、创建数据库账号和数据库,并通过本地 Navicat 远程连接成功执行 SQL 操作。
ECS自建MySQL环境搭建:在阿里云 ECS(Ubuntu)上安装 MySQL,完成安全初始化、创建数据库与测试数据、开启 binlog 等准备工作。
DTS数据迁移:通过阿里云数据传输服务 DTS,将 ECS 自建 MySQL 中的 migrate 数据库完整迁移至 RDS 实例,过程中排查了安全组、白名单、监听地址等常见连通性问题。
应用程序对接:编写 Python 程序通过 PyMySQL 连接 RDS 数据库,成功读取迁移后的数据,验证了整个链路的可用性。
本文作者:Linxiong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!