DataKit之OpenGauss数据迁移工具

# 在讲openGauss和datakit之前,我先说下pgloader

这个工具也支持将数据从mysql同步到openGauss或者postgresql,但是
注意了,官网明确说明了不支持视图和触发器的迁移,如果你只是迁移表结构和数据,那么这个既简单又快

下面我简述下安装部署流程和可能会遇到的问题
安装一种是docker(github地址最下面就有)一种是编译安装
1、docker
docker pull ghcr.io/dimitri/pgloader:latest
docker run --rm -it ghcr.io/dimitri/pgloader:latest pgloader --version

启动docker
docker run -tid --name pgloader_test dimitri/pgloader

创建迁移脚本
vim openGauss.loader
LOAD DATABASE
FROM mysql://root:12345@192.168.1.202:3306/test
INTO postgresql://root:12345@192.168.1.202:5432/postgres
WITH include drop, create tables, create indexes, reset no sequences,
     workers = 8, concurrency = 1,
     multiple readers per thread, rows per range = 50000
CAST
type varchar when(= 1 precision) to "boolean" drop typemod keep default keep not null;

将配置文件拷贝到docker内执行
docker cp ./openGauss.loader pgloader_test:/

进行docker容器
docker exec -it pgloader_test /bin/bash

执行迁移任务(一种是执行自定义的迁移脚本,另外一种是直接执行迁移任务)
1、pgloader openGauss.loader
2、pgloader mysql://root:12345@192.168.1.202:3306/test postgresql://jroot:12345@192.168.1.202:5432/postgres


2、编译安装
cd /usr/local
tar -zxvf pgloader-3.6.9.tar.gz
cd pgloader-3.6.9/
chmod 755 bootstrap-centos.sh

#需要下载很多关联插件
./bootstrap-centos.sh

#先package打包,后还要下载一些资源包
#此版本打包时,需要用到 openSSL11 版本的 so 库,
#如果有提示到 ("libcrypto.so.1.1" "libcrypto.so.1.0.0" "libcrypto.so.3" "libcrypto.so") 相关信息,
#需要先执行一下 yum -y install openssl openssl-devel ,再重新 make 。
make pgloader

#复制执行文件到用户本地执行目录
cp build/bin/pgloader /usr/local/bin/

#查看版本
pgloader --version

执行迁移任务
pgloader mysql://root:12345@192.168.1.202:3306/test postgresql://jroot:12345@192.168.1.202:5432/postgres


可能遇到的问题:
1、Condition QMYND:MYSQL-UNSUPPORTED-AUTHENTICATION was signalled
解决:
pgloader不支持caching_sha2_password
在/etc/my.cnf 中增加 default-authentication-plugin=mysql_native_password
重启mysql
2、KABOOM!
INFO: Control stack guard page unprotected
Control stack guard page temporarily disabled: proceed with caution

What I am doing here?

Control stack exhausted (no more space for function call frames).
This is probably due to heavily nested or infinitely recursive function
calls, or a tail call that SBCL cannot or has not optimized away.

PROCEED WITH CAUTION.
解决:
出现这个问题我是docker安装的,后来改用编译安装的方式了

参考:
https://blog.youkuaiyun.com/2401_83143557/article/details/137864590(docker安装参考)
https://www.cnblogs.com/java365/articles/17789520.html(编译安装参考)
https://pgloader.readthedocs.io/en/latest/ref/mysql.html#mysql-schema-transformations(pgloader的doc)
https://github.com/dimitri/pgloader(pgloader的github)



#1 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld


#2 当前JDK版本
wget https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz

vim /etc/profile
export JAVA_HOME=/usr/local/jdk-11.0.2
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile

java -version

# 一定要创建软连接
ln -s /usr/local/jdk-11.0.2/bin/java /usr/bin/java


#3 安装python环境
wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz
tar -zxvf Python-3.6.8.tgz
cd Python-3.6.8
./configure --prefix=/root/python3.6.8
make && make install

vi ~/.bashrc
alias python='/root/python3.6.8/bin/python3.6'
alias pip='/root/python3.6.8/bin/pip3'
source ~/.bashrc

python -V
pip --version

# 4 修改国内镜像源
vim /etc/docker/daemon.json 
{
"registry-mirrors": ["https://rsk59qvc.mirror.aliyuncs.com"]
}
service docker restart


#5 安装mysql
docker run --name mysql8 --restart=always -v /mysql_8.0.26/conf.d:/etc/mysql/conf.d -v /mysql_8.0.26/data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=jysa -d mysql:8.0.26 docker-entrypoint.sh --character-set-server=utf8mb4 --collation-server=utf8mb4_0900_ai_ci --lower-case-table-names=1

[mysqld]
binlog_format = ROW
log_bin = mysql-bin
server_id = 1
binlog_row_image = FULL
enforce_gtid_consistency = ON
gtid_mode = ON

docker restart 容器id

一定要修改mysql的密码校验插件
将caching_sha2_password修改为mysql_native_password
一定记得改完插件类型后,修改密码,不然可能导致登录不上(如图一)


# 6 设置
vi /etc/sysctl.conf
kernel.sem = 250 32000 100 999
sysctl -p


# 7 安装opengauss:5.1.0
wget https://opengauss.obs.cn-south-1.myhuaweicloud.com/5.1.0/x86/openGauss-5.1.0-CentOS-64bit.tar.bz2

useradd openGauss
passwd openGauss
usermod -aG openGauss openGauss
cat /etc/sudoers | grep openGauss
openGauss	ALL=(ALL) 	ALL

su openGauss
sudo mkdir /ops/openGauss5.1.0
sudo yum -y install bzip2
sudo tar -jxf openGauss-5.1.0-CentOS-64bit.tar.bz2


/ops/openGauss5.1.0/simpleInstall
sh install.sh -w "Jyzx2024" && source ~/.bashrc

# 修改配置文件
编辑 postgresql.conf
listen_addresses = '*'
local_bind_address = '*'
max_connections = 1000
password_encryption_type = 1

cd /ops/openGauss5.1.0/bin
gsql -d postgres
create user jyzx with createdb password 'Jyzx2024';
grant all privileges to jyzx;

# 这里使用的是openGuass用户
gs_ctl restart -D $GAUSSHOME/data/single_node -Z single_node


# 注意上面openGauss是通过部署包安装,也可以通过docker镜像安装
镜像包我放到这儿了,启动命令也在这儿:https://download.youkuaiyun.com/download/AinUser/89600056
启动容器之后,需要通过命令su - omm命令切换用户,然后执行相关的创建用户并授权的SQL,这个SQL上面有


# 8 安装openGauss datakit
wget https://opengauss.obs.cn-south-1.myhuaweicloud.com/5.1.0/tools/Datakit/Datakit-5.1.0.tar.gz

mkdir /ops/datakit5.1.0
tar -zxvf Datakit-5.1.0.tar.gz

mkdir -p logs config ssl files
cp ./application-temp.yml ./config/
vim ./config/application-temp.yml
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: org.opengauss.Driver
    url: jdbc:opengauss://192.168.1.202:5432/postgres?currentSchema=public&batchMode=off
    username: jyzx
    password: Jyzx@2024.
    druid:
      test-while-idle: false
      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 /ops/datakit5.1.0/ssl/keystore.p12 \
-validity 3650 \
-storepass 123456

/ops/datakit5.1
java -Xms4096m -Xmx8092m -jar openGauss-datakit-5.1.0.jar --spring.profiles.active=temp


# 注意
1、java软连接一定要建立,不然使用新创建的用户可能会找不到java命令
2、datakit平台,服务器管理一定要记住密码,迁移任务中心才会显示设备
3、启动datakit的内存一定要大,不然可能导致zookeeper和kafka进程被杀
4、进入容器后切用户一定要记得使用su - omm



参考:
https://jeames.blog.youkuaiyun.com/article/details/134016239(安装openGuass数据库)
https://blog.youkuaiyun.com/weixin_41645135/article/details/135891534(安装datakit)
https://opengauss.org/zh/download/archive/(官网下载包)
https://docs-opengauss.osinfra.cn/zh/docs/5.0.0/docs/DataMigrationGuide/%E5%85%A8%E9%87%8F%E8%BF%81%E7%A7%BB.html(官网全量迁移文档)
https://app.yinxiang.com/fx/a780e65f-2852-4e83-b91f-8cfbc16d7996(同事的笔记)

备注:
手动启动kafka和zookeeper,如果是启动,第一次会先启动zookeeper,再一次执行启动命令,才会启动kafka

-- 可以先执行停止kafka的命令,确保Kafka进程已停止,避免启动时出错,停止kafka的命令如下
java -Dpath=/data/dgq/portal/portal/ -Dorder=stop_kafka -Dskip=true -jar /data/dgq/portal/portal/portalControl-6.0.0rc1-exec.jar
-- 启动kafka进程的命令
java -Dpath=/data/dgq/portal/portal/ -Dorder=start_kafka -Dskip=true -jar /data/dgq/portal/portal/portalControl-6.0.0rc1-exec.jar

<think>我们正在讨论如何使用DataKit工具MySQL数据库迁移到openGauss数据库。根据提供的引用内容,我们可以整理出迁移的基本流程和关键步骤。引用[1]提到DataKitopenGauss的迁移工具,需要手动安装。引用[2]详细描述了迁移全流程包括五个阶段:全量迁移、全量校验、增量迁移、增量校验和反向迁移。引用[3]和[4]则提供了一些环境准备和配置的细节。根据这些信息,我们可以将迁移过程分为以下几个主要步骤:1.**环境准备**:安装DataKit工具,并确保源端(MySQL)和目的端(openGauss)数据库可用。2.**配置MySQL**:修改MySQL配置文件以启用必要的设置,如二进制日志、GTID等(引用[4])。3.**创建迁移任务**:在DataKit平台上创建迁移任务,选择源端和目的端数据库,并选择在线迁移模式(引用[2])。4.**执行迁移**:包括全量迁移、全量校验、增量迁移、增量校验和反向迁移(引用[2])。5.**验证迁移结果**:检查数据一致性和服务切换。下面将详细说明每个步骤的操作。###1.环境准备-确保已安装DataKit工具(引用[1])。-确保MySQLopenGauss数据库服务正常运行,并且网络互通。-MySQLopenGauss上创建具有足够权限的用户用于迁移。###2.配置MySQL根据引用[4],需要修改MySQL的配置文件(通常是`my.cnf`)添加以下配置:```log-bin=mysql-bindefault_authentication_plugin=mysql_native_passwordcharacter_set_server=utf8mb4enforce_gtid_consistency=ongtid_mode=on```然后重启MySQL服务。###3.创建迁移任务在DataKit平台中:1.进入“数据迁移->“迁移任务中心”。2.点击“创建迁移任务”。3.选择源端数据库(MySQL)和目的端数据库(openGauss)。4.添加子任务,迁移过程模式选择“在线模式”(引用[2])。###4.执行迁移在线模式包括五个阶段(引用[2]):1.**全量迁移**:将MySQL中现有数据全部迁移到openGauss。2.**全量校验**:检查全量迁移后的数据一致性。3.**增量迁移**:捕获全量迁移期间的增量数据(通过binlog)并迁移,直到数据追平。4.**增量校验**:检查增量数据的一致性。5.**反向迁移**:在业务切换后,将openGauss的增量数据迁移MySQL,以保证回退能力。###5.验证迁移结果-检查迁移任务的状态和日志。-进行数据抽样检查。-在业务低峰期进行切换测试。注意:在迁移过程中,建议在测试环境充分验证后再进行生产环境迁移。§§相关问题§§1.如何安装和配置DataKit迁移工具?2.在迁移过程中遇到数据不一致问题如何解决?3.迁移完成后如何进行业务切换和回退?4.MySQLopenGauss迁移有哪些常见错误?</think>### DataKit MySQL 迁移 openGauss 完整指南 #### 一、迁移前准备 1. **环境配置** - **MySQL端**(引用[4]): ```ini log-bin=mysql-bin default_authentication_plugin=mysql_native_password character_set_server=utf8mb4 enforce_gtid_consistency=on gtid_mode=on ``` 修改后重启MySQL服务,确保binlog功能开启。 - **openGauss端**: ```sql CREATE USER mig_user PASSWORD '密码'; GRANT ALL PRIVILEGES ON DATABASE target_db TO mig_user; ``` 2. **工具安装** -openGauss官网下载DataKit安装包 - 执行安装命令(引用[1]): ```bash ./install.sh --prefix=/opt/datakit ``` #### 二、迁移流程 1. **创建迁移任务**(引用[2]) - 登录DataKit控制台 → 数据迁移 → 创建任务 - 关键配置: ```yaml 源数据库: MySQL (IP:3306) 目标数据库: openGauss (IP:5432) 迁移模式: 在线模式 # 包含全量+增量 ``` 2. **全量迁移阶段** - DataKit自动导出MySQL表结构+数据 - 执行状态监控(引用[3]): ```bash jps # 检查迁移进程状态 ``` - 迁移性能优化: - 调整`batch_size`参数(建议5000-10000行/批) - 启用并行迁移(大表拆分) 3. **增量迁移阶段** - 自动捕获MySQL binlog变化 - 实时同步到openGauss - 关键检查点: ```sql SELECT * FROM pg_replication_slots; -- 检查复制槽状态 ``` 4. **数据校验**(引用[2]) - **全量校验**:比对行数/checksum值 - **增量校验**:验证实时同步延迟 ``` 校验报告示例:: user_info | 源端行数: 1,024,578 | 目标端行数: 1,024,578 | 状态: 一致 ``` 5. **业务切换** - 停写源库 → 执行最终增量同步 - 修改应用连接串指向openGauss - 开启**反向迁移**(引用[2]):将openGauss增量变化同步回MySQL(应急回退) #### 三、常见问题解决方案 | 问题现象 | 解决方法 | |---------|----------| | 字符集错误 | 在迁移配置中强制指定`charset=utf8mb4` | | GTID同步中断 | 执行`RESET MASTER;`重置MySQL GTID | | 大表迁移超时 | 调整`wait_timeout=86400` | | 外键约束失败 | 迁移前禁用外键检查:`SET foreign_key_checks=0` | #### 四、最佳实践 1. **性能优化建议**: - 迁移前清理MySQL冗余数据 -openGauss执行`VACUUM FULL`优化存储 - 使用SSD磁盘提升I/O性能 2. **割接流程**: ```mermaid graph LR A[业务低峰期] --> B[停写MySQL] B --> C[最终增量同步] C --> D[校验数据一致性] D --> E[应用切换至openGauss] E --> F[观察24小时] ``` > **重要提示**:生产环境迁移前务必在测试环境完成全流程验证(引用[1][4])。迁移过程中保持源数据库只读状态,避免数据不一致。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值