news 2026/2/28 13:13:35

DataKit实战:从MySQL到openGauss的全流程迁移指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DataKit实战:从MySQL到openGauss的全流程迁移指南

1. 环境准备:搭建迁移基础环境

在开始MySQL到openGauss的迁移之前,我们需要先准备好基础环境。这个过程就像装修房子前要准备好水泥和砖块一样,缺一不可。我遇到过不少因为环境没准备好导致迁移失败的案例,所以这部分特别重要。

首先,我们需要一个合适的操作系统环境。推荐使用openEuler 20.03 LTS版本,这是华为针对openGauss优化过的操作系统。下载地址可以在openEuler官网找到。安装完成后,有几个关键的系统配置需要调整:

# 关闭SELinux sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config # 关闭防火墙 systemctl stop firewalld systemctl disable firewalld # 设置字符集 echo "export LANG=en_US.UTF-8" >> /etc/profile source /etc/profile

这些配置修改后,建议重启服务器确保生效。接下来是安装必要的依赖包:

yum install -y libaio-devel flex bison ncurses-devel glibc-devel patch \ readline-devel libnsl tar vim java sysstat

特别要注意的是Java版本,我建议使用OpenJDK 11:

yum remove -y java-1.8* java-1.7* yum install -y java-11-openjdk.x86_64 java-11-openjdk-devel.x86_64

资源限制调整也很关键,特别是当数据量较大时:

echo "omm soft nproc 16384" >> /etc/security/limits.conf echo "omm hard nproc 16384" >> /etc/security/limits.conf echo "omm soft nofile 65536" >> /etc/security/limits.conf echo "omm hard nofile 65536" >> /etc/security/limits.conf

这些配置将为后续的openGauss安装和DataKit运行提供良好的基础环境。记得每次修改系统配置后都要检查是否生效,我遇到过不少因为配置没生效导致后续步骤失败的案例。

2. openGauss安装与配置

openGauss的安装是整个迁移过程中的核心环节。根据我的经验,很多迁移问题都源于openGauss安装不当。下面我会详细介绍如何正确安装和配置openGauss。

首先下载openGauss安装包,建议使用5.1及以上版本:

wget https://opengauss.obs.cn-south-1.myhuaweicloud.com/5.1.0/x86_openEuler/openGauss-5.1.0-openEuler-64bit-all.tar.gz

解压安装包到指定目录:

mkdir -p /opt/software/openGauss tar -zxvf openGauss-5.1.0-openEuler-64bit-all.tar.gz -C /opt/software/openGauss

创建专用的数据库用户和组:

groupadd dbgroup useradd -g dbgroup omm echo "omm@123" | passwd --stdin omm

执行安装脚本:

cd /opt/software/openGauss/simpleInstall sh install.sh -w omm@123

安装完成后,我们需要配置openGauss的远程连接和逻辑复制功能,这对后续的迁移工作至关重要:

# 配置监听地址 gs_guc set -D /opt/software/openGauss/data/single_node -c "listen_addresses = '*'" # 配置逻辑复制 gs_guc set -D /opt/software/openGauss/data/single_node -c "wal_level=logical" # 配置客户端认证 gs_guc set -D /opt/software/openGauss/data/single_node -h "host all all 0.0.0.0/0 sha256"

为了让openGauss能够开机自启,我们可以创建一个systemd服务:

cat > /usr/lib/systemd/system/opengauss.service <<EOF [Unit] Description=openGauss After=syslog.target After=network.target [Service] Type=forking User=omm Group=dbgroup Environment=PGDATA=/opt/software/openGauss/data Environment=GAUSSHOME=/opt/software/openGauss ExecStart=/opt/software/openGauss/bin/gs_ctl start -D /opt/software/openGauss/data/single_node ExecReload=/opt/software/openGauss/bin/gs_ctl restart -D /opt/software/openGauss/data/single_node ExecStop=/opt/software/openGauss/bin/gs_ctl stop -D /opt/software/openGauss/data/single_node KillMode=mixed KillSignal=SIGINT TimeoutSec=0 [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable opengauss systemctl start opengauss

最后,我们需要创建一个专门用于DataKit连接的数据库和用户:

CREATE DATABASE datakit; CREATE USER datakit WITH PASSWORD 'datakit@123'; GRANT ALL PRIVILEGES ON DATABASE datakit TO datakit;

3. MySQL环境准备与配置

作为迁移的源端,MySQL的配置同样重要。根据我的经验,很多迁移问题都源于MySQL配置不当,特别是binlog相关配置。

首先安装MySQL 5.7:

wget http://repo.mysql.com/mysql57-community-release-el7-10.noarch.rpm rpm -Uvh mysql57-community-release-el7-10.noarch.rpm yum install -y mysql-community-server --nogpgcheck systemctl start mysqld

获取初始密码并修改:

temp_pass=$(grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}') mysqladmin -u root -p"$temp_pass" password 'datakit@1234'

配置MySQL的关键参数:

cat >> /etc/my.cnf <<EOF server-id = 1 log-bin=mysql-bin binlog_format=ROW binlog_row_image=FULL expire_logs_days=7 gtid_mode=ON enforce_gtid_consistency=ON EOF systemctl restart mysqld

创建测试数据库和用户:

CREATE DATABASE world; USE world; CREATE TABLE city ( ID int NOT NULL AUTO_INCREMENT, Name char(35) NOT NULL DEFAULT '', CountryCode char(3) NOT NULL DEFAULT '', District char(20) NOT NULL DEFAULT '', Population int NOT NULL DEFAULT '0', PRIMARY KEY (ID) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 创建迁移专用用户 CREATE USER 'mig_user'@'%' IDENTIFIED BY 'mig_password'; GRANT ALL PRIVILEGES ON *.* TO 'mig_user'@'%'; FLUSH PRIVILEGES;

建议导入一些测试数据,方便后续验证迁移效果。可以使用MySQL自带的world数据库样例:

wget https://downloads.mysql.com/docs/world-db.tar.gz tar -zxvf world-db.tar.gz mysql -uroot -p world < world-db/world.sql

4. DataKit安装与配置

DataKit是整个迁移过程的管理平台,它的正确安装和配置直接关系到迁移能否顺利进行。根据我的经验,很多用户在这一步会遇到Java环境或SSL证书的问题。

首先创建DataKit的工作目录:

mkdir -p /opt/datakit/datakit5.1/{logs,config,ssl,files} chown -R ops:ops /opt/datakit

下载并解压DataKit安装包:

wget https://opengauss.obs.cn-south-1.myhuaweicloud.com/latest/tools/DataKit-5.1.0.tar.gz tar -zxvf DataKit-5.1.0.tar.gz -C /opt/datakit/datakit5.1

配置DataKit的application.yml文件:

system: defaultStoragePath: /opt/datakit/datakit5.1/files whitelist: enabled: false server: port: 9494 ssl: key-store: /opt/datakit/datakit5.1/ssl/keystore.p12 key-store-password: 123456 key-store-type: PKCS12 enabled: true servlet: context-path: / logging: file: path: /opt/datakit/datakit5.1/logs/ spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: org.opengauss.Driver url: jdbc:opengauss://127.0.0.1:5432/datakit?currentSchema=public&batchMode=off username: datakit password: datakit@123 druid: test-while-idle: true test-on-borrow: true validation-query: "select 1" validation-query-timeout: 10000 connection-error-retry-attempts: 0 break-after-acquire-failure: true max-wait: 6000 keep-alive: true max-active: 30 min-evictable-idle-time-millis: 600000

生成SSL证书:

keytool -genkey -noprompt \ -dname "CN=opengauss, OU=opengauss, O=opengauss, L=Beijing, S=Beijing, C=CN" \ -alias opengauss \ -storetype PKCS12 \ -keyalg RSA \ -keysize 2048 \ -keystore /opt/datakit/datakit5.1/ssl/keystore.p12 \ -validity 3650 \ -storepass 123456

启动DataKit服务:

cd /opt/datakit/datakit5.1 nohup java -Xms2048m -Xmx4096m -jar openGauss-datakit-5.1.0.jar --spring.profiles.active=temp > logs/datakit.out 2>&1 &

DataKit启动后,可以通过https://服务器IP:9494访问管理界面,默认用户名密码是admin/admin123。第一次登录后记得修改密码。

5. 全量迁移实战

全量迁移是将MySQL中的现有数据完整地迁移到openGauss的过程。根据我的经验,这是最耗时的阶段,但也是最关键的阶段。

首先,我们需要在DataKit中添加数据源:

  1. 登录DataKit管理界面
  2. 进入"资源中心"->"实例管理"
  3. 添加MySQL数据源:
    • 数据库类型:MySQL
    • 连接地址:MySQL服务器IP
    • 端口:3306
    • 用户名:mig_user
    • 密码:mig_password
  4. 添加openGauss数据源:
    • 数据库类型:openGauss
    • 连接地址:openGauss服务器IP
    • 端口:5432
    • 用户名:datakit
    • 密码:datakit@123

接下来添加执行服务器:

  1. 进入"资源中心"->"服务器管理"
  2. 添加服务器:
    • IP地址:DataKit服务器IP
    • 用户名:root
    • 密码:服务器root密码
    • 记住密码:是

创建迁移任务:

  1. 进入"数据迁移"->"迁移任务中心"
  2. 点击"创建数据迁移任务"
  3. 选择源数据库(MySQL)和目标数据库(openGauss)
  4. 添加子任务,选择要迁移的数据库(如world)
  5. 迁移过程模式选择"离线模式"
  6. 分配执行机资源,选择刚才添加的服务器
  7. 点击"完成"创建任务

启动迁移任务:

  1. 在迁移任务列表中找到刚创建的任务
  2. 点击"启动"按钮
  3. 点击"详情"查看迁移进度

全量迁移过程中,有几个关键点需要注意:

  1. 字符集问题:MySQL和openGauss的字符集可能不同,建议在openGauss中创建数据库时指定兼容模式:

    CREATE DATABASE world WITH dbcompatibility='B';
  2. 数据类型映射:有些MySQL数据类型在openGauss中没有直接对应,DataKit会自动处理大部分情况,但可能需要手动调整。

  3. 外键约束:全量迁移完成后,外键约束可能需要特殊处理。可以在迁移完成后执行:

    chameleon detach_replica --config default --source mysql
  4. 大表处理:对于大表,可以考虑分批迁移,避免一次性迁移导致内存不足。

迁移完成后,建议进行数据校验:

-- 在openGauss中执行 SELECT count(*) FROM city; SELECT * FROM city LIMIT 10; -- 与MySQL中的结果对比

6. 增量迁移与反向迁移

全量迁移完成后,如果需要保持业务连续性,就需要进行增量迁移。这是将全量迁移期间和之后产生的数据变更同步到openGauss的过程。

6.1 增量迁移配置

  1. 在DataKit中创建一个新的迁移任务
  2. 选择与全量迁移相同的源和目标数据库
  3. 迁移过程模式选择"在线模式"
  4. 启动迁移任务

增量迁移开始后,它会自动捕获MySQL的binlog变化并应用到openGauss。我们可以测试增量迁移的效果:

在MySQL中执行一些数据变更:

USE world; INSERT INTO city(Name, CountryCode, District, Population) VALUES('New City', 'CHN', 'Beijing', 100000); UPDATE city SET Population = Population + 1000 WHERE ID = 1; DELETE FROM city WHERE ID = 2;

然后在openGauss中验证这些变更是否同步:

SELECT * FROM city WHERE Name = 'New City'; SELECT * FROM city WHERE ID = 1; SELECT * FROM city WHERE ID = 2;

6.2 业务割接

当增量迁移运行一段时间,确认数据同步正常后,可以进行业务割接:

  1. 停止应用程序向MySQL的写入
  2. 等待增量迁移追平所有变更
  3. 修改应用程序连接字符串,指向openGauss
  4. 重新启动应用程序

6.3 反向迁移配置

业务割接到openGauss后,为了确保数据安全,可以配置反向迁移,将openGauss的变更同步回MySQL:

  1. 在增量迁移任务详情页面
  2. 点击"停止增量"按钮
  3. 点击"启动反向"按钮
  4. 等待反向迁移启动完成

测试反向迁移:

在openGauss中执行一些变更:

INSERT INTO city(Name, CountryCode, District, Population) VALUES('Reverse City', 'USA', 'Texas', 50000); UPDATE city SET District = 'Shanghai' WHERE Name = 'New City';

然后在MySQL中验证这些变更:

SELECT * FROM city WHERE Name = 'Reverse City'; SELECT * FROM city WHERE Name = 'New City';

6.4 迁移完成

当确认业务在openGauss上稳定运行后,可以完全停止迁移任务:

  1. 在反向迁移任务详情页面
  2. 点击"停止反向"按钮
  3. 点击"结束任务"按钮

7. 常见问题与解决方案

在实际迁移过程中,可能会遇到各种问题。根据我的经验,以下是几个最常见的问题及其解决方案:

7.1 GTID相关问题

问题现象:增量迁移失败,日志显示GTID相关错误。

解决方案

-- 在MySQL中执行 SET GLOBAL ENFORCE_GTID_CONSISTENCY = ON; SET GLOBAL gtid_mode=OFF; SET GLOBAL gtid_mode=OFF_PERMISSIVE; SET GLOBAL gtid_mode=ON_PERMISSIVE; SET GLOBAL gtid_mode=ON;

7.2 字符集问题

问题现象:迁移后数据出现乱码。

解决方案

  1. 确保MySQL和openGauss都使用UTF-8编码
  2. 在openGauss中创建数据库时指定编码:
    CREATE DATABASE world WITH ENCODING 'UTF8' dbcompatibility='B';

7.3 性能问题

问题现象:迁移速度慢,特别是大表迁移。

解决方案

  1. 调整DataKit的JVM参数:
    nohup java -Xms4096m -Xmx8192m -jar openGauss-datakit-5.1.0.jar ...
  2. 在openGauss中临时调整参数:
    ALTER SYSTEM SET max_connections = 500; ALTER SYSTEM SET shared_buffers = '4GB';

7.4 外键迁移问题

问题现象:表结构迁移了,但外键没有迁移。

解决方案

  1. 对于离线迁移,外键会自动迁移
  2. 对于在线迁移,需要在停止增量迁移后执行:
    chameleon detach_replica --config default --source mysql

7.5 插件安装失败

问题现象:迁移插件安装失败,提示缺少libmysqlclient.so.18。

解决方案

yum install -y mysql-community-libs-compat ldconfig

8. 性能优化建议

迁移完成后,为了获得最佳性能,可以考虑以下优化措施:

8.1 openGauss参数优化

-- 增加工作内存 ALTER SYSTEM SET work_mem = '16MB'; -- 优化并行查询 ALTER SYSTEM SET max_parallel_workers_per_gather = 4; -- 调整维护工作内存 ALTER SYSTEM SET maintenance_work_mem = '1GB';

8.2 索引优化

检查MySQL的索引是否都正确迁移,并根据openGauss的特性添加新的索引:

-- 查看表索引 \d 表名 -- 添加新索引 CREATE INDEX idx_city_country ON city(CountryCode);

8.3 统计信息更新

ANALYZE VERBOSE city;

8.4 查询重写

将MySQL特有的语法重写为openGauss兼容的形式,特别是LIMIT子句和日期函数。

8.5 分区表考虑

对于大表,可以考虑使用openGauss的分区表功能提高查询性能:

CREATE TABLE measurement ( city_id int not null, logdate date not null, peaktemp int, unitsales int ) PARTITION BY RANGE (logdate);

9. 迁移后的验证与测试

迁移完成后,必须进行全面的验证,确保数据的完整性和一致性。根据我的经验,以下验证步骤必不可少:

9.1 数据量验证

-- MySQL中执行 SELECT table_name, table_rows FROM information_schema.tables WHERE table_schema = 'world'; -- openGauss中执行 SELECT relname, reltuples FROM pg_class C LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace) WHERE nspname = 'public' AND relkind = 'r';

9.2 抽样数据验证

随机选择几张表,比较记录内容:

-- MySQL中执行 SELECT * FROM city ORDER BY ID LIMIT 10; -- openGauss中执行 SELECT * FROM city ORDER BY ID LIMIT 10;

9.3 约束验证

检查主键、唯一键等约束是否正常:

-- 尝试插入重复主键 INSERT INTO city(ID, Name) VALUES(1, 'Test'); -- 应该报错

9.4 应用测试

使用真实应用程序进行测试,验证:

  1. 查询功能是否正常
  2. 写入功能是否正常
  3. 事务处理是否正常
  4. 性能是否满足要求

9.5 性能对比测试

对关键业务SQL进行执行计划分析:

EXPLAIN ANALYZE SELECT * FROM city WHERE CountryCode = 'CHN';

10. 总结与建议

通过DataKit进行MySQL到openGauss的迁移是一个系统性的工程,需要仔细规划和执行。根据我多年的迁移经验,以下几点建议可能对你有所帮助:

  1. 充分测试:在生产环境迁移前,一定要在测试环境充分验证迁移过程。
  2. 备份数据:迁移前备份MySQL数据,迁移后备份openGauss数据。
  3. 选择合适的时间窗口:大型迁移尽量安排在业务低峰期进行。
  4. 监控资源使用:迁移过程中密切监控CPU、内存、磁盘和网络使用情况。
  5. 文档记录:详细记录迁移步骤和遇到的问题,为后续维护提供参考。
  6. 考虑专业支持:对于关键业务系统,考虑寻求原厂或专业服务团队的支持。

迁移完成后,建议运行一段时间反向迁移作为回退方案,等业务完全稳定后再停止。同时,可以利用openGauss的特性如AI4DB、DB4AI等,发掘数据的更大价值。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/28 2:21:28

AutoGen Studio实战教程:Qwen3-4B-Instruct构建客户画像与精准营销Agent

AutoGen Studio实战教程&#xff1a;Qwen3-4B-Instruct构建客户画像与精准营销Agent 1. 什么是AutoGen Studio&#xff1f; AutoGen Studio是一个面向实际业务落地的低代码AI代理开发平台。它不是那种需要你从零写几十个Python文件、配置七八个YAML参数才能跑起来的工具&…

作者头像 李华
网站建设 2026/2/25 13:48:29

3步攻克游戏中文乱码:CK2DLL双字节终极解决方案

3步攻克游戏中文乱码&#xff1a;CK2DLL双字节终极解决方案 【免费下载链接】CK2dll Crusader Kings II double byte patch /production : 3.3.4 /dev : 3.3.4 项目地址: https://gitcode.com/gh_mirrors/ck/CK2dll 让《十字军之王II》玩家彻底摆脱文字显示困扰 您是否…

作者头像 李华
网站建设 2026/2/21 4:56:28

Git-RSCLIP保姆级教程:Web应用部署与功能体验全记录

Git-RSCLIP保姆级教程&#xff1a;Web应用部署与功能体验全记录 1. 这个模型到底能帮你做什么&#xff1f; 你有没有遇到过这样的场景&#xff1a;手头有一张卫星拍下来的遥感图像&#xff0c;但不确定它具体展示的是什么——是农田、城市、森林&#xff0c;还是河流&#xf…

作者头像 李华
网站建设 2026/2/22 10:29:44

高速信号反射现象解析:从阻抗匹配到PCB设计优化

1. 高速信号反射的本质与危害 高速信号反射就像高速公路上的连环追尾事故——当信号在传输线上遇到阻抗突变时&#xff0c;部分能量会被反弹回来&#xff0c;与后续信号发生碰撞。我在调试一块千兆网卡PCB时&#xff0c;就曾亲眼目睹过这种灾难&#xff1a;原本干净的方波信号在…

作者头像 李华