前6天我们搭建好了OceanBase集群、创建了租户、设计了分区表,现在终于到了最关键的一步------把现有的MySQL业务数据迁移过来。很多团队对迁移心存顾虑,怕停机时间长、怕数据不一致。今天我们就来演示两种最实用的迁移方案,从最简单的 mysqldump 到专业的 DataX,帮你找到最适合自己业务的方式。
方案一:mysqldump(适合中小数据量,10GB以下)
这是最简单粗暴的方式,原理就是把MySQL的数据导出成标准SQL文件,再用 obclient 导入OceanBase。因为OceanBase高度兼容MySQL语法,绝大多数情况下无需修改SQL文件。
# 第一步:从MySQL导出数据(带一致性事务快照)
mysqldump -h 192.168.1.1 -uroot -p --single-transaction \
--set-gtid-purged=OFF --default-character-set=utf8mb4 \
--databases myapp_db > myapp_db.sql
# 第二步:处理可能的字符集兼容问题(MySQL 8.0常见)
sed -i 's/utf8mb4_0900_ai_ci/utf8mb4_general_ci/g' myapp_db.sql
# 第三步:导入OceanBase
obclient -h 127.0.0.1 -P 2881 -uroot@my_tenant -D myapp_db -A < myapp_db.sql
⚠️ 避坑提醒 :导入前建议在OceanBase中先执行 SET FOREIGN_KEY_CHECKS = 0; 禁用外键检查,可以大幅提升导入速度。导入完成后再执行 SET FOREIGN_KEY_CHECKS = 1; 恢复。
方案二:DataX(适合大数据量,支持增量同步)
当数据量达到几十GB甚至TB级别时,mysqldump 就不够用了。这时推荐使用阿里巴巴开源的 DataX,它支持断点续传、并发读写,并且可以配置增量同步任务。
首先下载并解压DataX:
wget https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202308/datax.tar.gz
tar -xvzf datax.tar.gz
然后编写一个迁移任务配置文件 mysql2ob.json:
{
"job": {
"setting": {
"speed": { "channel": 4 },
"errorLimit": { "record": 0, "percentage": 0.1 }
},
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"username": "root",
"password": "your_mysql_password",
"connection": [
{
"table": ["orders", "users"],
"jdbcUrl": ["jdbc:mysql://192.168.1.1:3306/myapp_db"]
}
]
}
},
"writer": {
"name": "oceanbasev10writer",
"parameter": {
"obWriteMode": "insert",
"column": ["*"],
"connection": [
{
"jdbcUrl": "jdbc:oceanbase://127.0.0.1:2881/myapp_db",
"table": ["orders", "users"]
}
],
"username": "root@my_tenant",
"password": "your_ob_password",
"writerThreadCount": 10
}
}
}
]
}
}
执行迁移任务:
python datax/bin/datax.py mysql2ob.json
💡 生产迁移最佳实践
无论选择哪种方案,正式迁移前请务必做好以下准备:
- 评估数据量:先在小表上测试迁移速度,估算全量迁移所需时间窗口。
- 备份源库:迁移前对MySQL做一次完整备份,确保有回滚方案。
- 类型兼容性检查 :重点关注
ENUM、SET、JSON等特殊类型在OceanBase中的映射关系。 - 增量追平:如果停机窗口有限,可以先用DataX做一次全量迁移,然后在切换前再跑一次增量同步,追平差异数据。
今日小结
今天我们掌握了两种从MySQL迁移到OceanBase的实战方案。mysqldump 简单直接,适合中小数据量快速验证;DataX 功能强大,适合生产环境的大数据量迁移。迁移并没有想象中那么可怕,OceanBase的MySQL兼容性让这个过程变得非常平滑。
💡 课后思考
迁移完成后,业务SQL真的可以"零修改"直接运行吗?如果原来的MySQL里用了一些OceanBase不支持的语法(比如某些存储过程或触发器),我们该怎么排查和改造?欢迎在评论区分享你的迁移踩坑经历!