# 在讲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.csdn.net/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)