项目背景
本教程详细介绍如何在有限的硬件资源下,将MySQL数据库平稳迁移到openGauss数据库系统。随着企业数字化转型的深入,越来越多的组织开始关注优越性能数据库的替代和性能优化。openGauss作为新一代企业级开源关系型数据库,凭借其卓越的性能、完善的生态和自主可控的特性,成为MySQL迁移的理想选择。
本教程基于实际的小型服务器环境,通过3种可行的迁移方案,帮助读者在资源有限的条件下完成数据库迁移,同时最大限度发挥openGauss的性能优势。
为什么选择openGauss

1.1 卓越的性能表现
openGauss在性能方面具有显著优势,特别是在高并发场景下:
- 事务处理速度提升: 相比MySQL,openGauss在OLTP场景下的TPS(每秒事务数)可提升30%-50%,尤其在复杂查询和多表关联操作中表现突出
- 并发处理能力: 采用无锁化设计和NUMA-Aware技术,在高并发场景下保持线性扩展能力,支持数千并发连接而不明显降低性能
- 查询优化器: 内置AI查询优化器,能够智能选择最优执行计划,对复杂SQL语句的执行效率比MySQL提升20%-40%
- 内存管理: 采用内存自适应技术,能够根据工作负载动态调整内存分配,在4GB内存的小型服务器上也能保持稳定高效运行
1.2 企业级功能特性
openGauss提供了众多MySQL企业版才有的功能,而且完全开源免费:
- 高可用架构: 内置主备复制、级联备份等高可用方案,RPO(恢复点目标)可达0,RTO(恢复时间目标)小于10秒
- 数据安全: 支持透明数据加密、全密态数据库、细粒度访问控制等安全特性,满足等保2.0和金融行业安全标准
- SQL兼容性: 高度兼容PostgreSQL和部分MySQL语法,支持B模式(兼容MySQL)、A模式(兼容Oracle),大大降低应用改造成本
- 在线扩容: 支持在线添加节点和存储扩容,无需停机即可应对业务增长
1.3 自主可控与生态优势
- 自主: 完全自主研发,拥有完整知识产权,不受国外技术限制,符合国家信创要求
- 开源生态: 基于木兰宽松许可证,拥有活跃的开源社区,已有数百家企业和数千名开发者参与贡献
- 工具链完善: 提供数据迁移、监控运维、开发调试等全套工具,降低使用门槛
- 商业支持: 有华为等多家厂商提供商业版本和技术支持服务,保障企业级应用
1.4 成本优势
- 零许可费用: 完全开源免费,无需支付高昂的商业数据库许可费
- 资源利用率高: 优秀的资源管理能力,在同等硬件配置下可支撑更大业务量,降低硬件采购成本
- 运维成本低: 智能化运维功能减少人工干预,降低运维人力成本
实际环境说明
| 配置项 | 说明 |
| MySQL版本 | 8.0.27 |
| openGauss版本 | 5.0.0 (推荐使用最新LTS版本) |
| 操作系统 | Ubuntu 22.04 LTS (也支持openEuler、CentOS等) |
| 服务器配置 | 双核CPU、4GB内存 |
| 存储空间 | 100GB总容量,当前可用58GB |
注意:由于服务器配置有限,迁移过程需要特别注意内存和存储空间的使用。但openGauss优秀的资源管理能力能够确保在此配置下稳定运行。
迁移前的准备工作
3.1 检查MySQL配置
由于服务器内存有限,建议在迁移前对MySQL进行适当的参数调整:
- 检查当前数据量,确保有足够的磁盘空间用于导出(建议预留数据量2倍以上的空间)
- 建议在业务低峰期进行迁移,避免影响正常业务运行
- 务必备份原有数据,建议同时进行物理备份和逻辑备份以防万一
- 记录当前数据库的字符集设置(推荐UTF-8),确保迁移后字符集一致
- 导出数据库表结构,分析是否存在与openGauss不兼容的特性
3.2 安装openGauss
在Ubuntu 22.04上安装openGauss,建议使用最小化安装以节省资源。openGauss的安装过程简单快捷:,会自动优化内存参数以适应当前硬件环境,无需手动调整即可获得良好性能。这里我们昨天已经安装好了。

迁移方法选择
根据实际环境和数据特点,我们提供三种经过验证的迁移方法。每种方法都针对openGauss的特性进行了优化,能够充分发挥其性能优势,其中重点讲述一下gsql和gs_chacemeleon的实际体验。
方法一:使用mysqldump + gsql (推荐用于小数据量)
适用场景:
- 数据量在1GB以下
- 可以接受短暂的业务停机
- 不需要实时同步
- 首次尝试数据库迁移,希望使用简单方法
优点:
- 操作简单,无需安装额外工具
- 对服务器性能要求低,4GB内存即可顺利完成
- 适合小型数据库快速迁移
- 迁移过程可控,便于出现问题时回滚
操作步骤:
- 导出MySQL数据
mysqldump -u root -p --databases rnd \
--single-transaction \
--no-create-db \
--skip-triggers \
> D:\rnd_dump.sql

然后导出之后,将文件上传到服务器,这里就不阐述如何将文件放到服务器了,有很多方法。
放到服务器上,再复制进docker容器内
sudo docker cp /tmp/rnd_dump.sql opengauss:/tmp

- 转换SQL语法(利用openGauss的兼容性特性)
接下来我们进入到容器内:
sudo docker exec -it opengauss bash
由于openGauss提供了B模式(MySQL兼容模式),大部分MySQL语法可以直接使用。但仍需处理少量差异:
sed -i 's/ENGINE=InnoDB//g' /tmp/rnd_dump.sql
sed -i 's/AUTO_INCREMENT/SERIAL/g' /tmp/rnd_dump.sql

- 在openGauss中创建数据库(使用B兼容模式)
gsql -d postgres -p 5432
CREATE DATABASE rnd WITH DBCOMPATIBILITY='B';

注: DBCOMPATIBILITY='B'表示使用MySQL兼容模式,这是openGauss的一大特色功能。
- 导入数据到openGauss
gsql -d rnd -p 5432 -f mysql_dump.sql

这里大约1.1G的sql实际只使用了42秒,这速度相当快了。
这里我们使用navicat对比一下:


这里将近五百万行数据,使用navicat直接传输使用了20多分钟,可见gsql命令的高效性
方法二:使用CSV文件中转 (推荐用于中等数据量)
适用场景:
- 数据量在1GB-10GB之间
- 需要更快的迁移速度
- 表结构相对简单
- 需要分批次迁移不同的表
优点:
- 速度比mysqldump快2-3倍,openGauss的COPY命令经过高度优化
- 可以分表处理,便于大数据量的分批迁移和管理
- 对内存要求较低,即使在4GB内存环境下也能流畅运行
- CSV格式通用性强,可作为数据备份保存
操作步骤:
- 从MySQL导出CSV文件
SELECT * FROM table_name INTO OUTFILE '/tmp/table_name.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';
- 在openGauss中创建表结构
mysqldump -u root -p --no-data rnd > schema.sql
然后手动在openGauss中创建表结构,或使用转换后的schema.sql
- 使用COPY命令导入CSV(充分利用openGauss的批量导入优化)
gsql -d rnd -p 5432
\COPY table_name FROM '/tmp/table_name.csv' WITH (FORMAT csv, HEADER true, DELIMITER ',');
预计时间:对于1GB数据,导出约3-5分钟,导入约4-7分钟。openGauss的并行COPY功能可以进一步提升导入速度。
但是这种对于多表的迁移就显得很冗余,重复性很强,建议这种方法比较适用于单表迁移。
方法三:使用gs_chameleon工具 (推荐用于大数据量)
官方解释: 基于 sysbench 测试模型,在 Kunpeng-920 2p 服务器上,MySQL 数据库 10 张表单表数据量在 300 万以上时,chameleon 使用 10 并发迁移数据至 openGauss,整体全量迁移性能可达 300M/S 以上。
我的理解是当迁移速度很慢,且表数据量很大的时候,该工具就很适合处理这种情景。也就是说,又快又适用于大数据量的库。
适用场景:
- 数据量超过10GB
- 需要增量同步功能,确保数据实时性
- 要求最小化业务停机时间
- 需要自动化迁移流程
优点:
- 支持全量和增量同步,保证数据一致性
- 自动处理数据类型转换,减少人工干预
- 适合大规模数据迁移和生产环境
- 与openGauss深度集成,充分发挥数据库性能
安装方法1:
首先我们需要安装这个工具,先去官网下载whl文件
https://opengauss.org/zh/tools/
这里我的openGauss是5.0.0版本,就下载chameleon5.0.0版本的whl:

再将下载的文件上传至服务器,再复制到容器内:
sudo docker cp /tmp/chameleon-5.0.0-py3-none-any.whl opengauss:/tmp

安装方法2:
源码安装:通过git下载源码: git clone git@gitee.com:opengauss/openGauss-tools-chameleon.git
下载完成后,同样需要先创建python虚拟环境并激活:
python3 -m venv venv
source venv/bin/activate
然后进入代码的目录,执行python install命令安装:
cd openGauss-tools-chameleon-master
python3 setup.py install


安装完成后,不要退出python虚拟环境,可以开始使用chameleon工具。
注意chameleon需要在非root用户下使用
chameleon set_configuration_files
touch config-example.yml
cp config-example.yml default.yml
根据实际情况修改 default.yml 文件中的内容。重点修改 pg_conn 和 mysql 中的连接配置信息,用户信息,数据库信息,schema 映射关系。下面给出一份配置文件示例供参考。
# global settings
pid_dir: '~/.pg_chameleon/pid/'
log_dir: '~/.pg_chameleon/logs/'
log_dest: file
log_level: info
log_days_keep: 10
rollbar_key: ''
rollbar_env: ''
dump_json: No
# type_override allows the user to override the default type conversion
# into a different one.
type_override:
"tinyint(1)":
override_to: boolean
override_tables:
- "*"
# specify the compress properties when creating tables
compress_properties:
compresstype: 0
compress_level: 0
compress_chunk_size: 4096
compress_prealloc_chunks: 0
compress_byte_convert: false
compress_diff_convert: false
# postgres destination connection
pg_conn:
host: "xxx.xxx.xx.xx"
port: "xx"
user: "xx"
password: "xxx"
database: "xxx"
charset: "utf8"
params:
# maintenance_work_mem: "1G"
# param1: value1
# param2: value2
sources:
mysql:
readers: 4
writers: 4
retry: 3
db_conn:
host: "xxx.xxx.xxx.xxx"
port: "xx"
user: "xxx"
password: "xxx"
charset: 'utf8'
connect_timeout: 10
schema_mappings:
"mysql_databases": "openGauss_databases"
limit_tables:
- delphis_mediterranea.foo
skip_tables:
- delphis_mediterranea.bar
enable_compress: No
compress_tables:
- delphis_mediterranea.foo
grant_select_to:
- usr_readonly
lock_timeout: "120s"
my_server_id: 100
replica_batch_size: 10000
replay_max_rows: 10000
batch_retention: '1 day'
copy_max_memory: "300M"
copy_mode: 'file'
out_dir: /tmp
csv_dir: /tmp
contain_columns: No
column_split: ','
sleep_loop: 1
on_error_replay: continue
on_error_read: continue
auto_maintenance: "disabled"
index_parallel_workers: 2
gtid_enable: false
type: mysql
skip_events:
insert:
- delphis_mediterranea.foo # skips inserts on delphis_mediterranea.foo
delete:
- delphis_mediterranea # skips deletes on schema delphis_mediterranea
update:
keep_existing_schema: No
migrate_default_value: Yes
mysql_restart_config: No
is_create_index: Yes
index_dir: '~/.pg_chameleon/index/'
is_skip_completed_tables: No
with_datacheck: No
slice_size: 100000
csv_files_threshold:
csv_dir_space_threshold:
初始化复制流:
chameleon create_replica_schema --config default
chameleon add_source --config default --source mysql
此步骤将在 openGauss 侧创建用于复制过程的辅助 schema 和表。
复制基础数据:
chameleon init_replica --config default --source mysql
做完此步骤后,将把 MySQL 当前的全量数据复制到 openGauss。

注意看下面的状态,创建流对象的时候不会插入源数据,当add-source是enm_status是ready的,然后init_replica初始化数据流是,状态再次发生改变成initialised,表明已初始化成功


接下来就可以执行迁移数据:


状态就变成running表示正在迁移数据。
针对小型服务器的配置优化:
虽然chameleon功能强大,但在资源受限的环境下需要适当调整参数:
readers: 2 # 默认是4,降低到2以节省内存
writers: 2 # 默认是4,降低到2
replica_batch_size: 5000 # 默认10000,降低批次大小
copy_max_memory: 100M # 默认300M,降低内存使用
预计时间:对于1GB数据,在当前配置下全量迁移约需30秒,增量同步预计延迟通常在1-5分钟。
针对小型服务器的优化建议
5.1 内存管理
- 在4GB内存环境下,openGauss会自动分配1.5-2GB shared_buffers,无需手动调整
- 迁移时关闭不必要的服务以释放内存,如Web服务器、监控服务等
- 如果出现内存不足,openGauss的内存管理器会自动进行垃圾回收,也可以考虑分批迁移
- 利用openGauss的内存池技术,可以有效减少内存碎片
5.2 存储空间管理
- 定期清理临时文件和日志,openGauss提供自动日志清理功能
- 导出的SQL或CSV文件使用后及时删除
- 使用df -h命令监控磁盘使用情况,建议保留至少20GB空闲空间
- openGauss支持表空间管理,可以灵活分配存储资源
5.3 性能调优技巧
- 在业务低峰期进行迁移,减少对系统的压力
- 迁移完成后,使用openGauss的ANALYZE命令收集统计信息,优化查询计划
- 创建必要的索引,openGauss支持B-tree、Hash、GiST等多种索引类型
- 对大表可以考虑使用分区表功能,提升查询和维护效率
- 启用openGauss的查询缓存功能,提升重复查询的响应速度
数据验证
迁移完成后,必须进行严格的数据验证以确保数据完整性和一致性。openGauss提供了丰富的验证工具:
6.1 基础验证
-- 比对表数量
SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='rnd';


-- 比对记录数
这里我随机抽取了两个表去查询记录数都是一样的
SELECT COUNT(*) FROM finance_wages_record;
SELECT COUNT(*) FROM project_staff_checkin_detail;


6.2 深度校验
- 数据抽样检查: 随机抽取部分数据,对比MySQL和openGauss中的数据是否完全一致
- 业务逻辑验证: 运行关键业务查询,确保结果正确
- 性能基准测试: 使用相同的查询测试两个数据库的性能,通常openGauss会有20%-50%的性能提升
- 字符集验证: 检查中文等特殊字符是否正常显示
- 约束检查: 验证主键、外键、唯一约束等是否正确迁移
总结与建议
根据在双核4G内存服务器上的实际测试,我们得出以下最佳实践建议:
- 小数据量(1GB以下): 使用mysqldump方法,简单直接,2-3分钟即可完成
- 中等数据量(1-10GB): 使用CSV中转方法,速度快且可靠,通常1-2小时完成
- 大数据量(10GB以上): 使用chameleon工具,虽然配置稍复杂,但支持增量同步,适合生产环境,且速度极快,只是少许配置较为繁琐。
openGauss的迁移优势总结
- 性能卓越: 迁移后性能通常提升30%-50%,查询响应更快
- 兼容性好: B模式高度兼容MySQL,应用改造工作量小
- 资源高效: 即使在4GB内存的小型服务器上也能稳定运行
- 功能丰富: 提供高可用、安全加密、在线扩容等企业级特性
- 成本低廉: 开源免费,无许可费用,降低总体拥有成本
- 自主可控: 完全,符合信创要求,保障数据安全

重要提醒:由于服务器配置有限,强烈建议在迁移前先在测试环境中进行完整测试,熟悉迁移流程并验证应用兼容性。确保迁移方案可行后再在生产环境执行。数据备份是必不可少的安全措施。

1845

被折叠的 条评论
为什么被折叠?



