ITPub博客

首页 > 数据库 > 国内数据库 > MySQL数据库使用pgloader迁移至openGauss

MySQL数据库使用pgloader迁移至openGauss

国内数据库 作者:ppddt 时间:2022-11-21 09:31:07 0 删除 编辑

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数据库至open Gauss。

    安装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:password123@1.1.1.1:3306/mysql_database

            INTO postgresql://opengauss_test:password_123@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 和 password_123。openGauss服务器的IP和port分别是1.1.1.1和5432,目标数据库是opengauss_database。

            需要注意的是,这里使用的用户需要有远程连接MySQL和openGauss的权限,以及对对应数据库的读写权限。同时对于op enGauss,运行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侧查看迁移结果:


              更多内容请参考:

              https://docs.opengauss.org/zh/docs/3.1.0/docs/BriefTutorial/BriefTutorial.html

              来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69999989/viewspace-2924233/ ,如需转载,请注明出处,否则将追究法律责任。

              请登录后发表评论 登录
              全部评论

              注册时间:2021-05-14

              • 博文量
                17
              • 访问量
                5258