3

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

 2 years ago
source link: https://blog.csdn.net/GaussDB/article/details/120336223
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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 实现只迁移特定的表或者在迁移过程中排除特定的表。

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

Migrating a MySQL Database to PostgreSQL — pgloader 3.4.1 documentation

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

以上配置文件的含义是,迁移数据时,MySQL侧使用的用户名密码分别是 mysql_test 和 password123。MySQL服务器的IP和port分别是1.1.1.1和3306,待迁移的数据库是mysql_database。

openGauss侧使用的用户名密码分别是 opengauss_test 和 password_123。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侧查看迁移结果:

图片


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK