首页 > 数据库 >如何使用pgloader迁移MySQL数据库至openGauss

如何使用pgloader迁移MySQL数据库至openGauss

时间:2024-04-17 11:14:11浏览次数:27  
标签:数据库 pgloader MySQL 迁移 docker openGauss

pgloader 介绍
pgloader 是一个数据导入工具,使用 COPY 命令将数据导入到 PostgreSQL。pgloader 有两种工作模式,一种是从文件导入,一种是迁移数据库。pgloader 在两种情况下都使用 PostgreSQL 的 COPY 协议高效的传输数据。

openGauss 兼容 PostgreSQL 的通信协议以及绝大部分语法,可使用 pgloader 将 MySQL 数据库迁移至 openGauss。

pgloader 在 openGauss 上的问题
由于 openGauss 对原生 PostgreSQL 的通信协议进行了安全加固,这导致与 PostgreSQL 的默认通信协议互相不兼容了,因此,使用 pgloader 的 PostgreSQL 原生版本默认是不能连接 openGauss 的。会报类似下述错误:

处理方式是通过修改 GUC 进行规避,涉及的 GUC 参数是 password_encryption_type,PostgreSQL 默认的加密方式是 md5,由于 md5 已经不安全了,为了提高 openGauss 的安全能力,openGauss 支持 sha256, 并且默认是 sha256 的加密方式,这就导致了上述报错。但是 openGauss 并没有删除 md5 的加密和验证逻辑,因此,是可以通过修改该 GUC 参数开启 md5 加密方式的。

开启方法:

gs_guc reload -D $PGDATA -c "password_encryption_type = 1"
一定要在设置完上述参数后,再新建用户。 然后就可以使用该新建用户登录数据库了。

接下来我们将演示如何使用 pgloader 迁移 MySQL 数据库至 openGauss。

安装 pgloader
您可以直接从 apt.postgresql.org 和官方 debian 存储库 packages.debian.org/pgloader 安装 pgloader。

$ apt-get install pgloader
同时,您也可以通过 docker image 使用 pgloader。

$ docker pull dimitri/pgloader
$ docker run --rm --name pgloader dimitri/pgloader:latest pgloader --version
$ docker run --rm --name pgloader dimitri/pgloader:latest pgloader --help
配置 pgloader
pgloader 提供丰富的配置项,您可以自由定义迁移时的各类动作,如通过 include drop,删除目标数据库中名称出现在 MySQL 数据库中的所有表,以允许连续多次使用同一命令,从干净的环境自动启动。

这里简单介绍几个常用的配置项。

FROM :源数据库的连接 URL,格式如下:

mysql://[user[:password]@][netloc][:port][/dbname][?option=value&...]
INTO :目标数据库的连接 URL,格式如下:

postgresql://[user[:password]@][netloc][:port][/dbname][?option=value&...]
WITH :从 MySQL 数据库加载时的选项。有 include drop、create tables、create indexes 等选项。 CAST :用户自定义类型转换规则。允许用户覆盖已有的默认转换规则或者使用特殊情况修改它们。

部分迁移:用户可以通过 including only table names matching 和 excluding table names matching 实现只迁移特定的表或者在迁移过程中排除特定的表。

详细的配置项解读,可查看官网的说明:

https://pgloader.readthedocs.io/en/latest/ref/mysql.html

下面是一份从 MySQL 迁移到 openGauss 的配置文件示例:

LOAD DATABASE
FROM mysql://mysql_test:[email protected]:3306/mysql_database
INTO postgresql://opengauss_test:*****_@1.1.1.1:5432/opengauss_database
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;
以上配置文件的含义是,迁移数据时,MySQL 侧使用的用户名密码分别是 mysql_test 和 password123 。MySQL 服务器的 IP 和 port 分别是 1.1.1.1 和 3306 ,待迁移的数据库是 mysql_database 。

openGauss 侧使用的用户名密码分别是 opengauss_test 和 *****_ 。openGauss 服务器的 IP 和 port 分别是 1.1.1.1 和 5432 ,目标数据库是 opengauss_database 。

需要注意的是,这里使用的用户需要有远程连接 MySQL 和 openGauss 的权限,以及对对应数据库的读写权限。同时对于 openGauss,运行 pgloader 所在的机器需要在 openGauss 的远程访问白名单中。

创建用户及 database
在 openGauss 侧创建迁移时需要用到的用户以及 database。

运行 pgloader 进行数据迁移
以下演示基于使用 docker image 方式安装的 pgloader。将前面准备好的配置文件命名为 openGauss.loader。

启动 docker:

docker run -tid --name pgloader_test dimitri/pgloader
复制配置文件到 docker:

docker cp ./openGauss.loader pgloader_test:/
进入 docker 环境:

docker exec -it pgloader_test /bin/bash

启动 pgloader,等待数据迁移完成,查看迁移结果报告:

pgloader openGauss.loader

在 openGauss 侧查看迁移结果:

标签:数据库,pgloader,MySQL,迁移,docker,openGauss
From: https://www.cnblogs.com/helloopenGauss/p/18140107

相关文章

  • MySQL存储引擎
    MySQL存储引擎存储引擎就是存储数据,建立索引,更新查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可以称为表类型。查看存储引擎showengines;查看数据库默认存储引擎showvariableslike'%storage_engine%';MySQL存储引擎特性MySQL5.5之前......
  • MySQL的架构以及SQL的执行过程
    MySQL主要分为Server层和存储引擎层Server层:主要包括连接器、查询缓存、分析器、优化器、执行器等,所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图,函数等,还有一个通用的日志模块binlog日志模块。存储引擎:主要负责数据的存储和读取,采用可以替换的插件式架构......
  • MySQL体系结构
    MySQL体系结构连接层客户端连接器连接器负责与客户端建立连接,处理客户端发送的请求,并将结果返回给客户端。连接池连接池用于管理数据库连接,提高数据库的并发处理能力和性能。服务层管理工具管理工具用于监控和管理MySQL服务器,包括配置管理、性能调优、安全管理等功能。S......
  • MySQL触发器
    MySQL触发器触发器是预先定义的一段SQL语句,当在某个表上执行INSERT/UPDATE/DELETE操作之前或之后,会自动执行触发器。创建触发器CREATETRIGGERtrigger_nameAFTER/BEFOREINSERT/UPDATE/DELETEONtable_nameFOREACHROWBEGIN--触发器操作的SQL语句END;查看触发器......
  • MySQL存储过程与函数
    MySQL存储过程与函数存储过程创建、调用、删除创建CREATEPROCEDURE存储过程名(参数列表)BEGIN--SQL语句END;调用CALL存储过程名(参数值);删除DROPPROCEDUREIFEXISTS存储过程名;函数创建、调用、删除创建CREATEFUNCTION函数名(参数列表)RETURNS返......
  • MySQL游标
    MySQL游标创建游标DECLAREcursor_nameCURSORFORselect_statement;使用游标OPEN光标OPENcursor_name;FETCH光标FETCHcursor_nameINTOvar_name[,var_name]...CLOSE光标CLOSEcursor_name;循环获取游标DECLAREemp_reaultcursorforselect*fromemp;D......
  • Mysql低版本中处理row_number()函数的适配问题
    在最近的项目中遇到了mysql8.0版本中row_number()函数在迁移数据库低版本mysql5.0版本无法使用的问题。具体sql如下:1SELECTDATE(a.CRETIFICATE_DATE)ASNAME,COUNT(*)ASCOUNTFROM2(SELECTCERTIFICATE_DATE,ENABLED,CERTIFICATION_STATE,ROW_NUMBER()over(PARTIT......
  • MySQL视图
    MySQL视图创建或修改视图创建视图CREATE[ORREPLACE][ALGORITHM={UNIFINED|MERGE|TEMPLATE}]VIEWview_name[(column_list)]ASselect_statement[WITH[CASCADED|LOCAL]CHECKOPTION]修改视图ALTER[ALGORITHM={UNIFINED|MERGE|TEMPLATE}]VIEWview_n......
  • MySQL登录
    MYSQL登录登录MySQL查看MySQL默认密码:安装MySQL的时候,会生成一个随机密码sudogreppassword/var/log/mysqld.log登录MySQL,执行下面的命令,然后输入密码mysql-uroot-p更改root密码方法1使用root用户登录mysql后,输入:setpassword='{password}';需要注意,密码......
  • MySQL的三大日志及事务
    标题其实不太准确,应该是MySQL的binlog,InnoDB的redolog和undolog 事务的四大特征:ACID, 其中原子性(A)、隔离性(I)和持久性(D)是手段, 一致性(C)是目标。Atomicity   原子性 ==》由undolog实现Consistency一致性 ==》最终的目标,由AID共同来保证Isolation   ......