源端环境搭建:在ECS服务器(Ubuntu系统)上安装MySQL服务,完成安全初始化配置,创建migrate测试数据库及staff表并插入测试数据,开启binlog二进制日志并设置为ROW格式,创建迁移专用账号并授权
DTS数据迁移:使用阿里云DTS数据传输服务创建迁移任务,配置源库(ECS自建MySQL)和目标库(RDS实例)的连接信息,排查并解决ECS安全组、RDS白名单、MySQL监听地址等连通性问题,完成数据库迁移并验证数据完整性
Python程序对接:在ECS上搭建Python虚拟环境并安装PyMySQL库,编写Python程序连接RDS数据库,读取并显示迁移后的数据,验证迁移成功与应用程序对接的可用性
步骤1-2:安装并启动MySQL服务
通过SSH登录阿里云ECS服务器(Ubuntu系统),执行sudo apt update更新软件源,然后执行sudo apt install mysql-server -y安装MySQL服务。安装完成后,执行sudo systemctl start mysql启动服务,执行sudo systemctl enable mysql设置开机自启,使用systemctl status mysql验证服务处于active (running)状态。
步骤3-5:安全配置与密码登录
执行sudo mysql_secure_installation运行安全初始化脚本,按提示设置root密码、移除匿名用户、禁止远程root登录。登录MySQL执行ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'配置密码认证方式,执行FLUSH PRIVILEGES刷新权限,使用mysql -u root -p验证密码登录功能正常。
步骤6:创建测试数据
登录MySQL后执行CREATE DATABASE migrate创建数据库,使用USE migrate切换数据库。执行CREATE TABLE staff语句创建包含id、name、age、sex四个字段的表,依次执行INSERT语句插入三条测试记录:(1,'joe','28','male')、(2,'Anny','23','female')、(3,'Bob','18','male')。
步骤7-8:创建迁移账号与开启Binlog
创建迁移专用账号:执行CREATE USER 'migration'@'%' IDENTIFIED BY '123456'和GRANT ALL ON *.* TO 'migration'@'%'。编辑/etc/mysql/mysql.conf.d/mysql.cnf文件,在[mysqld]部分添加server_id=2、log_bin=mysql_bin、binlog_format=row、binlog_row_image=full等配置。执行sudo systemctl restart mysql重启服务,使用SHOW VARIABLES LIKE '%binlog_format%'验证binlog格式为ROW。
步骤9-11:配置DTS迁移任务 登录阿里云控制台搜索"数据传输服务DTS",点击"数据迁移"创建迁移任务。配置源库为ECS自建MySQL(填写ECS公网IP、端口3306、账号migration、密码123456),目标库为RDS实例(系统自动填入内网地址、账号user01及对应密码)。点击"测试连接"逐一排查问题:检查ECS安全组放通3306端口、将ECS公网IP加入RDS白名单、修改MySQL配置文件监听地址为0.0.0.0并重启服务。
步骤12-16:执行迁移 在左侧选择迁移对象migrate数据库及staff表,点击">"按钮添加到已选列表。保持高级配置默认,选择结构校验。执行预检查等待所有项通过,点击"购买并启动"正式开始迁移,等待任务状态显示为"已完成"。
步骤17:验证迁移结果 在本地Navicat中刷新RDS连接,查看数据库列表,成功看到迁移过来的migrate数据库和staff表,打开表查询数据,三条记录完整无误。
步骤18-20:Python程序连接
在ECS上执行python3 -m venv myenv创建虚拟环境,执行source myenv/bin/activate激活环境,执行pip install pymysql安装依赖库。编写rds.py程序,使用pymysql.connect()方法连接RDS数据库(填写RDS外网地址、端口3306、账号user01、密码、数据库名migrate)。执行python rds.py运行程序,终端成功输出三条staff表记录,验证迁移完整且程序对接成功。
实验结果 实验成功完成从ECS自建MySQL到阿里云RDS的数据库迁移。在ECS端完成MySQL安装配置,创建migrate数据库及staff表并插入三条测试记录,开启binlog并设置为ROW格式,创建迁移专用账号migration。使用DTS配置迁移任务时,逐一排查并解决ECS安全组3306端口未放通、RDS白名单未添加ECS公网IP、MySQL监听地址未修改为0.0.0.0等连通性问题。迁移完成后在Navicat中验证数据完整无误,编写Python程序使用PyMySQL成功读取RDS中的数据并输出三条记录,验证了整个迁移链路的完整性和应用程序对接的可用性。
个人收获 通过本次实验,系统掌握了数据库迁移从源端准备、网络连通、任务配置到结果验证的完整生命周期。深入理解了binlog作为迁移技术基础的作用,ROW格式能够精确记录数据变化确保迁移准确性。在排查连通性问题时,体会到云架构的分层防御机制:ECS安全组控制实例级流量、RDS白名单控制数据库级访问、MySQL监听地址决定服务绑定接口,三者需协同配置才能建立端到端连通。掌握PyMySQL的使用方法后,认识到数据库迁移不仅是数据的物理移动,更要保证应用程序能够无缝切换到新的数据源,这为后续构建云原生应用积累了宝贵经验。
本文作者:Linxiong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!