postgresql|数据库|MySQL数据库向postgresql数据库迁移的工具pgloader的部署和初步使用

这篇具有很好参考价值的文章主要介绍了postgresql|数据库|MySQL数据库向postgresql数据库迁移的工具pgloader的部署和初步使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:

MySQL数据库和postgresql数据库之间的差异并不多,这里的差异指的是对SQL语言的支持两者并不大,但底层的东西差异是非常多的,例如,MySQL的innodb引擎概念,数据库用户管理,这些和postgresql相比是完全不同的(MySQL用户就是用户,没有角色,postgresql有用户,有角色,但差异不大),但,索引例如btree这些两者又是相同的或者说相通的。

那么,这些差异化的地方导致MySQL在向postgresql数据库迁移数据的时候会造成一些困扰,虽然两者数据库使用的SQL语言百分之九十是相同的,但就是这剩下的百分之十也是一个巨大的鸿沟。

普通的方案,MySQLdump或者navicat直接备份MySQL,然后将备份文件导入postgresql需要修改很多地方,最基本的是需要提取insert语句,光这些工作量就非常的大了,如果要迁移的数据很多的话,因此,该方案基本上是不能考虑的。

OK,那么,有没有MySQL数据库平滑的向postgresql数据库迁移的方案呢?

答案是有的,版本答案就是pgloader工具,但丑话先说前面,此工具只支持全量迁移并不支持增量迁移,这应该是一个比较遗憾的地方,其它的方面,比如迁移效率(迁移用时),迁移质量(也就是迁移到postgresql的数据是否完整,准确),迁移方式(例如,库对库迁移,读取csv文件迁移,编写配置文件迁移)这些方面是让人挑不出理的。

一,

pgloader的部署安装

下载

pgloader通常的部署方式是三种,第一种是编译部署,第二种是docker镜像部署,第三种是二进制部署,本文选择的是二进制部署,其它部署方式本文不予讨论。

pgloader的官方下载地址:

https://github.com/dimitri/pgloader/releases

离线安装的地址:

链接:https://pan.baidu.com/s/18aN0CvyoXy_o8iP-aqVwGg?pwd=kkey 
提取码:kkey 

 

建议选择最新版本3.6.9

postgresql|数据库|MySQL数据库向postgresql数据库迁移的工具pgloader的部署和初步使用,postgresql数据库,数据库,postgresql,mysql

 二,

环境依赖安装

上述的离线安装包 ,解压后,进入文件夹,rpm -ivh * 即可。

如果是centos的,确认是否有安装libtool-ltdl,有输出表示已经安装,将那个libtool-ltdl-2.4.2-22.h1.eulerosv2r7.x86_64.rpm移除即可。

确认是否有安装libtool-ltdl,有输出表示已经安装,

[root@centos5 ~]# rpm -qa |grep libtool-ltdl
libtool-ltdl-2.4.2-22.el7_3.x86_64

这里说明一下,两个关键依赖,分别是freetds-devel和sbcl-1.4.0,其它rpm包是这两个关键依赖的依赖。

三,

部署

已经部署过了

[root@centos5 pgloader-bundle-3.6.9]# pwd
/root/pgloader-bundle-3.6.9
[root@centos5 pgloader-bundle-3.6.9]# make pgloader
make: `pgloader' is up to date.

第一次部署的,make pgloader的输出是这样的:

;; loading system "cffi"

;; loading system "cl+ssl"

;; loading system "mssql"

;; loading file #P"/root/pgloader_soft/pgloader-bundle-3.6.2/local-projects/pgloader-3.6.2/src/hooks.lisp"

;; loading system "pgloader"

compressed 0 bytes into 8 at level -1

compressed 32768 bytes into 617 at level -1

compressed 3047424 bytes into 820965 at level -1

compressed 23691264 bytes into 6785671 at level -1

compressed 91127808 bytes into 16513612 at level -1

# that's ugly, but necessary when building on Windows :(

mv bin/pgloader.tmp bin/pgloader

环境变量设置:

vi /etc/profile

 

alias pgloader=/root/pgloader-bundle-3.6.9/bin/pgloader

:wq

 

source /etc/profile

验证:

[root@centos5 ~]# pgloader --version
pgloader version "3.6.9"
compiled with SBCL 1.4.0-1.el7

四,

pgloader的初步使用

既然是MySQL迁移数据到postgresql,那么,自然需要两个服务器,服务器1  IP是192.168.123.15,该服务器部署postgresql-12.5,服务器2 IP是192.168.123.16,该服务器部署mariadb

如何部署这两个数据库就不在这里废话了。

MySQL数据库有test数据库,该库里有erp表:

MariaDB [(none)]> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [test]> show tables;
+----------------+
| Tables_in_test |
+----------------+
| DEPT           |
| EMP            |
+----------------+
2 rows in set (0.00 sec)

MariaDB [test]> select * from EMP;
+-------+--------+-----------+------+------------+------+------+--------+
| EMPNO | ENAME  | JOB       | MGR  | HIREDATE   | SAL  | COMM | DEPTNO |
+-------+--------+-----------+------+------------+------+------+--------+
|  7369 | SMITH  | CLERK     | 7902 | 1980-12-17 |  800 | NULL |     20 |
|  7499 | ALLEN  | SALESMAN  | 7698 | 1981-02-20 | 1600 |  300 |     30 |
|  7521 | WARD   | SALESMAN  | 7698 | 1981-02-22 | 1250 |  500 |     30 |
|  7566 | JONES  | MANAGER   | 7839 | 1981-04-02 | 2975 | NULL |     20 |
|  7654 | MARTIN | SALESMAN  | 7698 | 1981-09-28 | 1250 | 1400 |     30 |
|  7698 | BLAKE  | MANAGER   | 7839 | 1981-05-01 | 2850 | NULL |     30 |
|  7782 | CLARK  | MANAGER   | 7839 | 1981-06-09 | 2450 | NULL |     10 |
|  7788 | SCOTT  | ANALYST   | 7566 | 1987-04-19 | 3000 | NULL |     20 |
|  7839 | KING   | PRESIDENT | NULL | 1981-11-17 | 5000 | NULL |     10 |
|  7844 | TURNER | SALESMAN  | 7698 | 1981-09-08 | 1500 |    0 |     30 |
|  7876 | ADAMS  | CLERK     | 7788 | 1987-05-23 | 1100 | NULL |     20 |
|  7900 | JAMES  | CLERK     | 7698 | 1981-12-03 |  950 | NULL |     30 |
|  7902 | FORD   | ANALYST   | 7566 | 1981-12-03 | 3000 | NULL |     20 |
|  7934 | MILLER | CLERK     | 7782 | 1982-01-23 | 1300 | NULL |     10 |
+-------+--------+-----------+------+------------+------+------+--------+
14 rows in set (0.00 sec)

编辑迁移配置文件,在postgresql所在的服务器上,文件内容如下:

vi pg.load.test1

 

load database

from mysql://root:密码@192.168.123.16:3306/test

into pgsql://postgres:密码@192.168.123.15:5432/postgres;

开始迁移:

迁移命令和日志文件的内容:

[postgres@centos5 ~]$ pgloader --verbose pg.load.test1>> pg.load.test2 2>&1
[postgres@centos5 ~]$ cat pg.load.test2 
-bash: pgloader: command not found
[postgres@centos5 ~]$ logout
[root@centos5 ~]# mv /home/postgres/pg.load.test1 ./
[root@centos5 ~]# pgloader --verbose pg.load.test1>> pg.load.test2 2>&1
[root@centos5 ~]# cat pg.load.test
pg.load.test1  pg.load.test2  
[root@centos5 ~]# cat pg.load.test2
2023-08-04T08:03:56.023000+08:00 NOTICE Starting pgloader, log system is ready.
2023-08-04T08:03:56.049000+08:00 LOG pgloader version "3.6.9"
2023-08-04T08:03:56.115000+08:00 LOG Migrating from #<MYSQL-CONNECTION mysql://root@192.168.123.16:3306/test {1008D4C553}>
2023-08-04T08:03:56.115000+08:00 LOG Migrating into #<PGSQL-CONNECTION pgsql://postgres@192.168.123.15:5432/postgres {1008D4D933}>
2023-08-04T08:03:56.404000+08:00 ERROR mysql: Failed to connect to mysql at "192.168.123.16" (port 3306) as user "root": MySQL Error [1045]: "Access denied for user 'root'@'192.168.123.15' (using password: YES)"
2023-08-04T08:03:56.404000+08:00 LOG report summary reset
       table name     errors       read   imported      bytes      total time       read      write
-----------------  ---------  ---------  ---------  ---------  --------------  ---------  ---------
  fetch meta data          0          0          0                     0.000s    
-----------------  ---------  ---------  ---------  ---------  --------------  ---------  ---------
-----------------  ---------  ---------  ---------  ---------  --------------  ---------  ---------
[root@centos5 ~]# vim pg.load.test1
[root@centos5 ~]# pgloader --verbose pg.load.test1>> pg.load.test2 2>&1
[root@centos5 ~]# cat pg.load.test2
2023-08-04T08:03:56.023000+08:00 NOTICE Starting pgloader, log system is ready.
2023-08-04T08:03:56.049000+08:00 LOG pgloader version "3.6.9"
2023-08-04T08:03:56.115000+08:00 LOG Migrating from #<MYSQL-CONNECTION mysql://root@192.168.123.16:3306/test {1008D4C553}>
2023-08-04T08:03:56.115000+08:00 LOG Migrating into #<PGSQL-CONNECTION pgsql://postgres@192.168.123.15:5432/postgres {1008D4D933}>
2023-08-04T08:03:56.404000+08:00 ERROR mysql: Failed to connect to mysql at "192.168.123.16" (port 3306) as user "root": MySQL Error [1045]: "Access denied for user 'root'@'192.168.123.15' (using password: YES)"
2023-08-04T08:03:56.404000+08:00 LOG report summary reset
       table name     errors       read   imported      bytes      total time       read      write
-----------------  ---------  ---------  ---------  ---------  --------------  ---------  ---------
  fetch meta data          0          0          0                     0.000s    
-----------------  ---------  ---------  ---------  ---------  --------------  ---------  ---------
-----------------  ---------  ---------  ---------  ---------  --------------  ---------  ---------
2023-08-04T08:05:15.005000+08:00 NOTICE Starting pgloader, log system is ready.
2023-08-04T08:05:15.015000+08:00 LOG pgloader version "3.6.9"
2023-08-04T08:05:15.048000+08:00 LOG Migrating from #<MYSQL-CONNECTION mysql://root@192.168.123.16:3306/test {1008DBCD63}>
2023-08-04T08:05:15.048000+08:00 LOG Migrating into #<PGSQL-CONNECTION pgsql://postgres@192.168.123.15:5432/postgres {1008DBE1E3}>
2023-08-04T08:05:15.138000+08:00 NOTICE Prepare PostgreSQL database.
2023-08-04T08:05:15.194000+08:00 NOTICE Processing tables in this order: test.emp: 14 rows, test.dept: 4 rows
2023-08-04T08:05:15.208000+08:00 NOTICE COPY test.emp with 14 rows estimated [2/4]
2023-08-04T08:05:15.227000+08:00 NOTICE COPY test.dept with 4 rows estimated [1/4]
2023-08-04T08:05:15.241000+08:00 NOTICE DONE copying test.dept in 0.000s
2023-08-04T08:05:15.241000+08:00 NOTICE DONE copying test.emp in 0.000s
2023-08-04T08:05:15.253000+08:00 NOTICE CREATE UNIQUE INDEX idx_16388_primary ON test.emp (empno);
2023-08-04T08:05:15.268000+08:00 NOTICE Completing PostgreSQL database.
2023-08-04T08:05:15.268000+08:00 NOTICE Reset sequences
2023-08-04T08:05:15.282000+08:00 NOTICE ALTER TABLE test.emp ADD PRIMARY KEY USING INDEX idx_16388_primary;
2023-08-04T08:05:15.284000+08:00 NOTICE ALTER DATABASE "postgres" SET search_path TO public, test;
2023-08-04T08:05:15.286000+08:00 LOG report summary reset
             table name     errors       read   imported      bytes      total time       read      write
-----------------------  ---------  ---------  ---------  ---------  --------------  ---------  ---------
        fetch meta data          0          3          3                     0.045s    
         Create Schemas          0          0          0                     0.001s    
       Create SQL Types          0          0          0                     0.002s    
          Create tables          0          4          4                     0.017s    
         Set Table OIDs          0          2          2                     0.006s    
-----------------------  ---------  ---------  ---------  ---------  --------------  ---------  ---------
               test.emp          0         14         14     0.6 kB          0.033s     0.023s  
              test.dept          0          4          4     0.1 kB          0.009s     0.005s  
-----------------------  ---------  ---------  ---------  ---------  --------------  ---------  ---------
COPY Threads Completion          0          4          4                     0.022s    
 Index Build Completion          0          1          1                     0.006s    
         Create Indexes          0          1          1                     0.002s    
        Reset Sequences          0          0          0                     0.010s    
           Primary Keys          0          1          1                     0.001s    
    Create Foreign Keys          0          0          0                     0.000s    
        Create Triggers          0          0          0                     0.000s    
        Set Search Path          0          1          1                     0.000s    
       Install Comments          0          0          0                     0.000s    
-----------------------  ---------  ---------  ---------  ---------  --------------  ---------  ---------
      Total import time          ✓         18         18     0.7 kB          0.041s    

在postgresql数据库上查看是否迁移成功:

可以看到,完美迁移了

postgresql|数据库|MySQL数据库向postgresql数据库迁移的工具pgloader的部署和初步使用,postgresql数据库,数据库,postgresql,mysql

 文章来源地址https://www.toymoban.com/news/detail-629989.html

到了这里,关于postgresql|数据库|MySQL数据库向postgresql数据库迁移的工具pgloader的部署和初步使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Oracle到PostgreSQL数据库的语法迁移手册(建议收藏)

    异构数据库的迁移(譬如从Oracle迁移到PostgreSQL)工作主要包括三个方面, 数据库对象的迁移,包括库、模式、表、索引、视图、触发器、存储过程等等; 数据内容的迁移,主要指的是数据表中的数据; 数据应用的迁移,主要指的是应用中SQL语句的迁移。 目前对于数据库对

    2024年04月08日
    浏览(74)
  • 数据库信息速递 AWS因迁移PostgreSQL DBaaS而遭遇长时间停机时间而备受诟病

    开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共840人左右 1 + 2 + 3)新人会进入3群。 亚马逊的云业务告诉用户,它将在2

    2024年02月09日
    浏览(75)
  • 【数据库】如何利用Python中的petl将PostgreSQL中所有表的外键删除,迁移数据,再重建外键

    在数据库管理中,外键是一种重要的约束,用于确保数据的一致性和完整性。然而,在某些情况下,我们可能需要删除或修改外键。本文将介绍如何使用Python中的petl库将PostgreSQL中所有表的外键删除,迁移数据,并重新建立外键。 首先,我们需要安装petl和psycopg2库。在命令行

    2024年02月10日
    浏览(47)
  • 【数据库迁移系列】从MySQL到openGauss的数据库对象迁移实践

    在之前这一篇中我们分享过使用chameleon工具完成MySQL到openGauss的全量数据复制、实时在线复制。9.30新发布的openGauss 3.1.0版本 ,工具的全量迁移和增量迁移的性能不但有了全面提升,而且支持数据库对象视图、触发器、自定义函数、存储过程的迁移。 本篇就来分享一下使用c

    2024年02月02日
    浏览(61)
  • 数据库迁移之mysql到达梦数据库

    由于业务需求要求数据库国产化,因此将数据从mysql数据库中迁移到国产达梦数据库中。将mysql中的每个库迁移到达梦不同模式下,下面为详细过程。 (1)安装达梦客户端工具 (2)点击选择DM管理工具 (3)创建模式和用户 在用户菜单中,新建一个TEST模式以及相应的用户。

    2024年02月08日
    浏览(61)
  • mysql数据库迁移

    公司有个项目,刚开始数据量不是大的时候,数据库和服务上的所有应用数据都放在一个旧小盘中,随着项目数据的增长,旧的磁盘被占满了,导致系统无法写入数据,我和同事排查了很长时间,最终确定是磁盘被占满导致的一系列连锁问题。问题找到了,接下来就是想办法

    2024年02月14日
    浏览(47)
  • mysql数据库数据如何迁移目录

    默认位置 C:ProgramDataMySQLMySQL Server 8.0 步骤2中Data文件夹就是mysql存放数据的位置 这里举例移动到E盘下 原来my.ini文件不要修改文件位置,如果修改需要另行学习

    2024年02月07日
    浏览(73)
  • 如何迁移MySQL数据库?

    迁移MySQL数据库可以采取多种方法,以下是其中几种常用的方法: 备份和还原:将原有的MySQL数据库备份到一个文件中,然后将备份文件还原到新的MySQL服务器中。具体来说,可以使用mysqldump命令进行备份,使用mysql命令进行还原。例如,备份一个名为mydb的数据库可以使用以下

    2024年02月09日
    浏览(53)
  • MySQL数据库迁移(直接复制文件)

    MySQL数据库迁移(直接复制文件) - 简书 (jianshu.com) 看了几种方法: 1、修改注册表的 windows下迁移mysql数据 - 程序员丁先生 - 博客园 (cnblogs.com) 2、mysqldump指令将数据库表/数据保存成xx.sql文件存到本地的 (157条消息) 如何简单实现mysql数据库迁移_岁月呀的博客-CSDN博客 看着都复

    2024年02月15日
    浏览(49)
  • 超全mysql转换postgresql数据库方案

    写在前文: 近期由于公司业务产品发展需要,要求项目逐渐国产化:(1)项目国产操作系统部署;(2)数据库国产化;国产数据库最终选型为highgo(瀚高),该数据库基于pg开发,所以要求先将mysql适配到postgresql数据库; 1.1.1 镜像拉取 dockerhub官网选取自己想安装的版本(

    2024年02月06日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包