如何使用pgLoader将MySQL数据库迁移到PostgreSQL

迁移数据库的前景可能令人生畏,尤其是在从一个数据库管理系统迁移到另一个数据库管理系统时。本教程提供了有关如何安装pgLoader(一种开源数据库迁移工具)的说明,并使用它通过SSL连接将远程MySQL数据库迁移到PostgreSQL。

介绍

PostgreSQL ,也称为“Postgres”,是一个开源的关系数据库管理系统(RDBMS)。 近年来,它的受欢迎程度急剧增长 ,许多开发人员和公司将数据从其他数据库解决方案迁移到Postgres。

迁移数据库的前景可能令人生畏,尤其是在从一个数据库管理系统迁移到另一个数据库管理系统时。 pgLoader是一个开源数据库迁移工具,旨在简化迁移到PostgreSQL的过程。 它支持从几种文件类型和RBDMS(包括MySQLSQLite)迁移到PostgreSQL。

本教程提供了有关如何安装pgLoader并使用它通过SSL连接将远程MySQL数据库迁移到PostgreSQL的说明。 在本教程结束时,我们还将简要介绍一些pgLoader可能有用的不同迁移方案。

先决条件

要完成本教程,您需要以下内容:

  • 访问两台服务器,每台服务器运行Ubuntu 18.04。 两台服务器都应该有防火墙和配置了sudo权限的非root用户。 要进行设置,可以按照Ubuntu 18.04的初始服务器设置指南进行操作
  • MySQL安装在其中一台服务器上 要进行此设置,请按照我们的如何在Ubuntu 18.04上安装MySQL的指南中的第1步,2和3进行设置。 请注意,为了完成此处链接的所有必备教程,您需要将 MySQL用户配置为使用密码进行身份验证,如MySQL安装指南的第3步中所述。
  • PostgreSQL安装在另一台服务器上 要进行此设置,请完成我们的指南如何在Ubuntu 18.04上安装和使用PostgreSQL的 第1步
  • 您的MySQL服务器也应配置为接受加密连接。 要进行此设置,请完成我们的教程如何在Ubuntu 18.04上为MySQL配置SSL / TLS的每一步,包括可选的第6步 在您遵循本指南时,请务必使用PostgreSQL服务器作为MySQL客户端计算机,因为您需要能够从Postgres计算机连接到MySQL服务器,以便使用pgLoader迁移数据。

请注意,在本指南中,安装MySQL的服务器将被称为“ MySQL服务器 ”,并且应在此计算机上运行的所有命令都将以蓝色背景显示,如下所示:


同样,本指南将其他服务器称为“ PostgreSQL ”或“ Postgres”服务器,并且必须在该计算机上运行的任何命令都将以红色背景显示:


在您学习本教程时请记住这些,以避免混淆。

第1步 - (可选)在MySQL中创建示例数据库和表

此步骤描述了创建测试数据库并使用虚拟数据填充它的过程。 我们鼓励您在此测试用例中练习使用pgLoader,但如果您已经拥有要迁移的数据库,则可以继续执行下一步

首先在MySQL服务器上打开MySQL提示符:

mysql -u root -p

输入root用户的root用户密码后,您将看到My​​SQL提示符。

从那里,通过运行以下命令创建一个新数据库。 您可以根据需要为数据库命名,但在本指南中我们将其命名为source_db

CREATE DATABASE source_db;

然后USE命令切换到此数据库:

USE source_db;
Database changed

在此数据库中,使用以下命令创建示例表。 在这里,我们将此表命名为sample_table但可以给它另一个名称:

CREATE TABLE sample_table (
    employee_id INT PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    start_date DATE,
    salary VARCHAR(50)
);

然后使用以下命令使用一些示例员工数据填充此表:

INSERT INTO sample_table (employee_id, first_name, last_name, start_date, salary) 
VALUES (1, 'Elizabeth', 'Cotten', '2007-11-11', '$105433.18'),
(2, 'Yanka', 'Dyagileva', '2017-10-30', '$107540.67'),
(3, 'Lee', 'Dorsey', '2013-06-04', '$118024.04'),
(4, 'Kasey', 'Chambers', '2010-08-18', '$116456.98'),
(5, 'Bram', 'Tchaikovsky', '2018-09-16', '$61989.50');

在此之后,您可以关闭MySQL提示符:

exit

现在您有一个加载了虚拟数据的示例数据库,您可以继续执行下一步,在PostgreSQL服务器上安装pgLoader。

第2步 - 安装pgLoader

pgLoader是一个程序,可以从各种不同的源将数据加载到PostgreSQL数据库中。 它使用PostgreSQL的COPY命令将数据从源数据库或文件(例如逗号分隔值(CSV)文件复制到目标PostgreSQL数据库中。

pgLoader可以从默认的Ubuntu APT存储库中获得,您可以使用apt命令安装它。 但是,在本指南中,我们将利用pgLoader的useSSL选项,该选项允许通过SSL连接从MySQL进行迁移。 此功能仅在最新版本的pgLoader中可用,在撰写本文时,只能使用其GitHub存储库中的源代码进行安装。

在安装pgLoader之前,您需要安装其依赖项。 如果您最近没有这样做,请更新Postgres服务器的软件包索引:

sudo apt update

然后安装以下包:

  • sbcl :一个Common Lisp编译器
  • unzip.zip文件的unzip
  • libsqlite3-dev :SQLite 3的开发文件集合
  • gawk :“GNU awk”的缩写,是一种模式扫描和处理语言
  • curl :用于从URL传输数据的命令行工具
  • make :用于管理包编译的实用程序
  • freetds-dev :MS SQL和Sybase数据库的客户端库
  • libzip-dev :用于读取,创建和修改zip存档的库

使用以下命令安装这些依赖项:

sudo apt install sbcl unzip libsqlite3-dev gawk curl make freetds-dev libzip-dev

出现提示时,按ENTER确认您要安装这些软件包。

接下来,导航到pgLoader GitHub项目的Releases页面并找到最新版本。 对于本指南,我们将在撰写本文时使用最新版本: 版本3.6.1 向下滚动到Assets菜单并复制标记为Source codetar.gz文件的链接。 然后将链接粘贴到以下wget命令中。 这会将tarball下载到您的服务器:

wget https://github.com/dimitri/pgloader/archive/v3.6.1.tar.gz

提取tarball:

tar xvf v3.6.1.tar.gz

这将在您的服务器上创建许多新目录和文件。 导航到新的pgLoader父目录:

cd pgloader-3.6.1/

然后使用make实用程序编译pgloader二进制文件:

make pgloader

此命令将花费一些时间来构建pgloader二进制文件。

将二进制文件移动到/usr/local/bin目录,即Ubuntu查找可执行文件的位置:

sudo mv ./build/bin/pgloader /usr/local/bin/

您可以通过检查其版本来测试pgLoader是否已正确安装,如下所示:

pgloader --version
pgloader version "3.6.1"
compiled with SBCL 1.4.5.debian

现在安装了pgLoader,但在开始迁移之前,您需要对PostgreSQL和MySQL实例进行一些配置更改。 我们首先关注PostgreSQL服务器。

第3步 - 创建PostgreSQL角色和数据库

pgloader命令通过从文件或直接从数据库复制源数据并将其插入PostgreSQL数据库来工作。 因此,您必须将pgLoader作为可以访问Postgres数据库的Linux用户运行,或者必须在load命令中指定具有相应权限的PostgreSQL角色。

PostgreSQL通过使用角色来管理数据库访问。 根据角色的配置方式,可以将其视为数据库用户或数据库用户组。 在大多数RDBMS中,您使用CREATE USER SQL命令CREATE USER 然而,Postgres安装了一个名为createuser的方便脚本。 此脚本充当CREATE USER SQL命令的包装器,您可以直接从命令行运行该命令。

注意:在PostgreSQL中,您默认使用标识协议ident身份验证方法作为数据库用户进行身份验证,而不是使用密码。 这涉及PostgreSQL获取客户端的Ubuntu用户名并将其用作允许的Postgres数据库用户名。 这在许多情况下允许更高的安全性,但是在您希望外部程序连接到您的某个数据库的情况下也会导致问题。

只要该角色与发出pgloader命令的Linux用户配置文件共享同一名称,pgLoader就可以通过使用ident方法进行身份验证的角色将数据加载到Postgres数据库中。 但是,为了使此过程尽可能清晰,本教程描述了设置一个不同的PostgreSQL角色,该角色使用密码而不是ident方法进行身份验证。

在Postgres服务器上运行以下命令以创建新角色。 请注意-P标志,它告诉createuser提示您输入新角色的密码:

sudo -u postgres createuser --interactive -P

您可能会首先被提示输入您的sudo密码。 然后,该脚本将提示您输入新角色的名称。 在本指南中,我们将此角色称为pgloader_pg

Enter name of role to add: pgloader_pg

然后, createuser将提示您输入并确认此角色的密码。 请务必记下此密码,因为您需要它来执行第5步中的迁移:

Enter password for new role: 
Enter it again: 

最后,该脚本将询问您是否应将新角色归类为超级用户。 在PostgreSQL中,使用超级用户角色连接到数据库允许您绕过所有数据库的权限检查,但登录权限除外。因此,不应轻易使用超级用户权限, PostgreSQL文档建议您将大多数数据库作为非超级用户角色工作。 但是,由于pgLoader需要广泛的权限来访问和加载表中的数据,因此您可以安全地授予此新角色超级用户权限。 通过键入y然后按ENTER

. . .
Shall the new role be a superuser? (y/n) y

PostgreSQL附带了另一个有用的脚本,允许您从命令行创建数据库。 由于pgLoader还需要一个可以加载源数据的目标数据库,因此请运行以下命令来创建一个。 我们将此数据库new_db但如果您愿意,可以随意修改它:

sudo -u postgres createdb new_db

如果没有任何错误,则此命令将在没有任何输出的情况下完成。

既然您有一个专门的PostgreSQL用户和一个可以加载MySQL数据的空数据库,那么在执行迁移之前,您还需要做一些更改。 您需要创建一个可以访问源数据库的专用MySQL用户,并将您的客户端证书添加到Ubuntu的可信证书库。

第4步 - 在MySQL中创建专用用户和管理证书

保护窥探者的数据是任何数据库管理员工作中最重要的部分之一。 将数据从一台计算机迁移到另一台计算机,可以让恶意攻击者嗅探通过网络连接传输的数据包(如果未加密)。 在此步骤中,您将创建一个专用的MySQL用户,pgLoader将使用该用户通过SSL连接执行迁移。

首先打开MySQL提示符:

mysql -u root -p

在MySQL提示符下,使用以下CREATE USER命令创建新的MySQL用户。 我们将此用户命名为pgloader_my 因为此用户只能从PostgreSQL服务器访问MySQL,所以请务必将your_postgres_server_ip替换为PostgreSQL服务器的公共IP地址。 此外,使用安全密码或密码替换password

CREATE USER 'pgloader_my'@'your_postgres_server_ip' IDENTIFIED BY 'password' REQUIRE SSL;

请注意此命令末尾的REQUIRE SSL子句。 这将限制pgloader_my用户仅通过安全SSL连接访问数据库。

接下来,授予pgloader_my用户对目标数据库及其所有表的访问权限。 在这里,我们将指定我们在可选第1步中创建的数据库,但如果您有自己的数据库,则需要使用其名称来代替source_db

GRANT ALL ON source_db.* TO 'pgloader_my'@'your_postgresql_server_ip';

然后运行FLUSH PRIVILEGES命令重新加载授权表,启用权限更改:

FLUSH PRIVILEGES;

在此之后,您可以关闭MySQL提示符:

exit

现在返回到Postgres服务器终端并尝试以新的pgloader_my用户身份登录MySQL服务器。 如果您遵循为MySQL配置SSL / TLS的先决条件指南,那么您已经在PostgreSQL服务器上安装了mysql-client ,并且您应该能够使用以下命令进行连接:

mysql -u pgloader_my -p -h your_mysql_server_ip

如果命令成功,您将看到My​​SQL提示符:


确认您的pgloader_my用户可以成功连接后,继续并关闭提示:

exit

此时,您有一个专用的MySQL用户,可以从Postgres计算机访问源数据库。 但是,如果您尝试使用SSL迁移MySQL数据库,则尝试将失败。

原因是pgLoader无法读取MySQL的配置文件,因此不知道在先决条件SSL / TLS配置指南中查找复制到PostgreSQL服务器的CA证书或客户端证书的位置。 但是,pgLoader不是忽略SSL要求,而是在需要SSL连接到MySQL的情况下,需要使用受信任的证书。 因此,您可以通过将ca.pemclient-cert.pem文件添加到Ubuntu的受信任证书存储区来解决此问题。

为此,请将ca.pemclient-cert.pem文件复制到/usr/local/share/ca-certificates/目录。 请注意,您还必须重命名这些文件,使其具有.crt文件扩展名。 如果您不重命名它们,您的系统将无法识别您已添加这些新证书:

sudo cp ~/client-ssl/ca.pem /usr/local/share/ca-certificates/ca.pem.crt
sudo cp ~/client-ssl/client-cert.pem /usr/local/share/ca-certificates/client-cert.pem.crt

在此之后,运行update-ca-certificates命令。 此程序在/usr/local/share/ca-certificates查找/usr/local/share/ca-certificates ,将任何新/usr/local/share/ca-certificates添加到/etc/ssl/certs/目录,并生成可信SSL证书列表 - ca-certificates.crt - 基于/etc/ssl/certs/目录的内容:

sudo update-ca-certificates
Updating certificates in /etc/ssl/certs...
2 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.

有了这个,你们都准备将MySQL数据库迁移到PostgreSQL。

第5步 - 迁移数据

现在您已经配置了从PostgreSQL服务器到MySQL服务器的远程访问,您已准备好开始迁移。

注意:在采取可能影响数据完整性的任何操作之前备份数据库非常重要。 但是,在使用pgLoader执行迁移时,这不是必需的,因为它不会删除或转换数据; 它只复制它。

也就是说,如果您感到谨慎并希望在迁移数据之前备份数据,则可以使用mysqldump实用程序执行此操作。 有关详细信息,请参阅MySQL官方文档

pgLoader允许用户使用单个命令迁移整个数据库。 对于从MySQL数据库迁移到单独服务器上的PostgreSQL数据库,该命令将具有以下语法:

pgloader mysql://mysql_username:password@mysql_server_ip_/source_database_name?option_1=value&option_n=value postgresql://postgresql_role_name:password@postgresql_server_ip/target_database_name?option_1=value&option_n=value

这包括pgloader命令和两个连接字符串 ,第一个用于源数据库,第二个用于目标数据库。 这两个连接字符串都首先声明连接字符串指向哪种类型的DBMS,然后是有权访问数据库的用户名和密码(用冒号分隔),安装数据库的服务器的主机地址, pgLoader应该定位的数据库的名称,以及影响pgLoader行为的各种选项

使用本教程前面定义的参数,您可以使用具有以下结构的命令迁移MySQL数据库。 请务必替换任何突出显示的值以与您自己的设置对齐:

pgloader mysql://pgloader_my:mysql_password@mysql_server_ip/source_db?useSSL=true postgresql://pgloader_pg:postgresql_password@localhost/new_db

请注意,此命令包含MySQL连接字符串中的useSSL选项。 通过将此选项设置为true ,pgLoader将通过SSL连接到MySQL。 这是必要的,因为您已将MySQL服务器配置为仅接受安全连接。

如果此命令成功,您将看到一个描述迁移过程的输出表:

             table name     errors       rows      bytes      total time
-----------------------  ---------  ---------  ---------  --------------
        fetch meta data          0          2                     0.111s
         Create Schemas          0          0                     0.001s
       Create SQL Types          0          0                     0.005s
          Create tables          0          2                     0.017s
         Set Table OIDs          0          1                     0.010s
-----------------------  ---------  ---------  ---------  --------------
 source_db.sample_table          0          5     0.2 kB          0.048s
-----------------------  ---------  ---------  ---------  --------------
COPY Threads Completion          0          4                     0.052s
 Index Build Completion          0          1                     0.011s
         Create Indexes          0          1                     0.006s
        Reset Sequences          0          0                     0.014s
           Primary Keys          0          1                     0.001s
    Create Foreign Keys          0          0                     0.000s
        Create Triggers          0          0                     0.000s
       Install Comments          0          0                     0.000s
-----------------------  ---------  ---------  ---------  --------------
      Total import time          ✓          5     0.2 kB          0.084s

要检查数据是否已正确迁移,请打开PostgreSQL提示符:

sudo -i -u postgres psql

从那里,连接到您加载数据的数据库:

\c new_db

然后运行以下查询以测试迁移的数据是否存储在PostgreSQL数据库中:

SELECT * FROM source_db.sample_table;

注意:请注意此查询中的FROM子句,指定source_db 模式中保存的sample_table

. . . FROM source_db.sample_table;

这称为限定名称 您可以更进一步,通过包含数据库的名称以及模式和表的名称来指定完全限定的名称

. . . FROM new_db.source_db.sample_table;

在PostgreSQL数据库中运行查询时,如果表保存在默认public模式中,则不需要具体。 你必须这样做的原因是,当pgLoader将数据加载到Postgres时,它会创建并定位一个以原始数据库命名的新模式 - 在本例中为source_db 这是pgLoader对MySQL到PostgreSQL迁移的默认行为。 但是,您可以使用加载文件来指示pgLoader在加载数据后将表的架构更改为public 有关如何执行此操作的示例,请参阅下一步。

如果确实正确加载了数据,您将在查询的输出中看到下表:

 employee_id | first_name |  last_name  | start_date |   salary   
-------------+------------+-------------+------------+------------
           1 | Elizabeth  | Cotten      | 2007-11-11 | $105433.18
           2 | Yanka      | Dyagileva   | 2017-10-30 | $107540.67
           3 | Lee        | Dorsey      | 2013-06-04 | $118024.04
           4 | Kasey      | Chambers    | 2010-08-18 | $116456.98
           5 | Bram       | Tchaikovsky | 2018-09-16 | $61989.50
(5 rows)

要关闭Postgres提示符,请运行以下命令:

\q

现在我们已经讨论了如何通过网络迁移MySQL数据库并将其加载到PostgreSQL数据库中,我们将介绍一些其他常见的迁移方案,其中pgLoader可能很有用。

第6步 - 探索其他迁移选项

pgLoader是一种高度灵活的工具,可以在各种情况下使用。 在这里,我们将快速浏览一些其他方法,您可以使用pgLoader将MySQL数据库迁移到PostgreSQL。

使用pgLoader加载文件进行迁移

在pgLoader的上下文中, 加载文件命令文件是告诉pgLoader如何执行迁移的文件。 此文件可以包含影响pgLoader行为的命令和选项,使您可以更好地控制数据加载到PostgreSQL中的方式,并允许您执行复杂的迁移。

pgLoader的文档提供了有关如何使用和扩展这些文件以支持多种迁移类型的全面说明,因此我们将在此处通过一个相对基本的示例。 我们将执行在第5步中运行的相同迁移,但还将包括ALTER SCHEMA命令,以将new_db数据库的模式从source_db更改为public

首先,使用首选的文本编辑器在Postgres服务器上创建一个新的加载文件:

nano pgload_test.load

然后添加以下内容,确保更新突出显示的值以与您自己的配置一致:

pgload_test.load
LOAD DATABASE
     FROM      mysql://pgloader_my:mysql_password@mysql_server_ip/source_db?useSSL=true
     INTO pgsql://pgloader_pg:postgresql_password@localhost/new_db

 WITH include drop, create tables

ALTER SCHEMA 'source_db' RENAME TO 'public'
;

以下是每个条款的作用:

  • LOAD DATABASE :此行指示pgLoader从单独的数据库加载数据,而不是文件或数据存档。
  • FROM :此子句指定源数据库。 在这种情况下,它指向我们在第1步中创建的MySQL数据库的连接字符串。
  • INTO :同样,这一行指定了pgLoader应该加载数据的PostgreSQL数据库。
  • WITH :此子句允许您为pgLoader定义特定行为。 您可以在此处找到与MySQL迁移兼容的WITH选项的完整列表。 在这个例子中,我们只包括两个选项:
    • include drop :当使用此选项时,pgLoader将删除目标PostgreSQL数据库中也出现在源MySQL数据库中的任何表。 如果在将数据迁移到现有PostgreSQL数据库时使用此选项,则应备份整个数据库以避免丢失任何数据。
    • create tables :该选项告诉pgLoader根据MySQL数据库中保存的元数据在目标PostgreSQL数据库中创建新表。 如果使用相反的选项, create no tables ,则在迁移之前目标表必须已存在于目标Postgres数据库中。
  • ALTER SCHEMA :在WITH子句之后,您可以添加这样的特定SQL命令来指示pgLoader执行其他操作。 在这里,我们指示pgLoader将新的Postgres数据库模式从source_db更改为public ,但仅在创建模式之后。 请注意,您还可以在其他子句中嵌套此类命令(例如BEFORE LOAD DO ,以指示pgLoader在迁移过程中的特定点执行这些命令。

这是一个示例性示例,说明您可以在加载文件中包含哪些内容来修改pgLoader的行为。 可以在官方的pgLoader文档中找到可以添加到加载文件的条款的完整列表以及它们的作用。

添加完此内容后,保存并关闭加载文件。 要使用它,请将文件名作为pgloader命令的参数包含pgloader

pgloader pgload_test.load

要测试迁移是否成功,请打开Postgres提示:

sudo -u postgres psql

然后连接到数据库:

\c new_db

并运行以下查询:

SELECT * FROM sample_table;
 employee_id | first_name |  last_name  | start_date |   salary   
-------------+------------+-------------+------------+------------
           1 | Elizabeth  | Cotten      | 2007-11-11 | $105433.18
           2 | Yanka      | Dyagileva   | 2017-10-30 | $107540.67
           3 | Lee        | Dorsey      | 2013-06-04 | $118024.04
           4 | Kasey      | Chambers    | 2010-08-18 | $116456.98
           5 | Bram       | Tchaikovsky | 2018-09-16 | $61989.50
(5 rows)

此输出确认pgLoader已成功迁移数据,并且我们添加到加载文件的ALTER SCHEMA命令按预期工作,因为我们不需要在查询中指定source_db模式来查看数据。

请注意,如果您计划使用加载文件将一个数据库上保存的数据迁移到位于另一台计算机上的另一个数据库,则仍需要调整任何相关的网络和防火墙规则才能使迁移成功。

在本地将MySQL数据库迁移到PostgreSQL

您可以使用pgLoader将MySQL数据库迁移到同一台机器上的PostgreSQL数据库。 您只需要从可以访问root MySQL用户的Linux用户配置文件中运行migration命令:

pgloader mysql://root@localhost/source_db pgsql://sammy:postgresql_password@localhost/target_db

像这样执行本地迁移意味着您不必对MySQL的默认网络配置或系统的防火墙规则进行任何更改。

从CSV文件迁移

您还可以使用CSV文件中的数据加载PostgreSQL数据库。

假设您有一个名为load.csv的CSV文件,将其加载到Postgres数据库中的命令可能如下所示:

pgloader load.csv pgsql://sammy:password@localhost/target_db

由于CSV格式未完全标准化,因此以这种方式直接从CSV文件加载数据时可能会遇到问题。 幸运的是,您可以通过在pgLoader的命令行选项中包含各种选项或在加载文件中指定它们来纠正不规则性。 有关详细信息,请参阅有关该主题的pgLoader文档

迁移到托管PostgreSQL数据库

也可以执行从自我管理数据库到托管PostgreSQL数据库的迁移。 为了说明这种迁移的外观,我们将使用MySQL服务器和DigitalOcean Managed PostgreSQL数据库。 我们还将使用我们在第1步中创建的示例数据库,但如果您跳过该步骤并拥有自己想要迁移的数据库,则可以指向该数据库。

注意:有关如何设置DigitalOcean托管数据库的说明,请参阅我们的托管数据库快速入门指南。

对于此迁移,我们不需要pgLoader的useSSL选项,因为它只适用于远程MySQL数据库,我们将从本地MySQL数据库运行此迁移。 但是,当我们加载并连接到DigitalOcean Managed PostgreSQL数据库时,我们将使用sslmode=require选项,这将确保您的数据保持受保护。

因为我们这次没有使用useSSL ,所以你可以使用apt来安装pgLoader和postgresql-client软件包,这样你就可以从MySQL服务器访问Managed PostgreSQL数据库了:

sudo apt install pgloader postgresql-client

然后,您可以运行pgloader命令来迁移数据库。 为此,您需要托管数据库的连接字符串。

对于DigitalOcean托管数据库,您可以从云控制面板复制连接字符串。 首先,单击左侧边栏菜单中的“数据库”,然后选择要将数据迁移到的数据库。 然后向下滚动到“ 连接详细信息”部分。 单击下拉菜单,然后选择连接字符串 然后,单击“ 复制”按钮将字符串复制到剪贴板并将其粘贴到以下迁移命令中,替换此处显示的示例PostgreSQL连接字符串。 这会将您的MySQL数据库迁移到defaultdb PostgreSQL数据库,作为doadmin PostgreSQL角色:

pgloader mysql://root:password@localhost/source_db postgres://doadmin:password@db_host/defaultdb?sslmode=require

在此之后,您可以使用相同的连接字符串作为psql的参数来连接到托管的PostgreSQL数据库,并且:http://www.digitalocean.com/community/tutorials/how-to-migrate-mysql-database-to-postgres- using-pgloader#step-1-%E2%80%94-(可选)-creating-a-sample-database-and-table-in-mysql确认迁移成功:

psql postgres://doadmin:password@db_host/defaultdb?sslmode=require

然后,运行以下查询以检查pgLoader是否正确迁移了数据:

SELECT * FROM source_db.sample_table;
 employee_id | first_name |  last_name  | start_date |   salary   
-------------+------------+-------------+------------+------------
           1 | Elizabeth  | Cotten      | 2007-11-11 | $105433.18
           2 | Yanka      | Dyagileva   | 2017-10-30 | $107540.67
           3 | Lee        | Dorsey      | 2013-06-04 | $118024.04
           4 | Kasey      | Chambers    | 2010-08-18 | $116456.98
           5 | Bram       | Tchaikovsky | 2018-09-16 | $61989.50
(5 rows)

这确认了pgLoader成功地将MySQL数据库迁移到托管的PostgreSQL实例。

结论

pgLoader是一个灵活的工具,可以在单个命令中执行数据库迁移。 通过一些配置调整,它可以使用安全的SSL / TLS连接将整个数据库从一台物理机器迁移到另一台物理机器。 我们希望通过本教程,您将更清楚地了解pgLoader的功能和潜在的用例。

将数据迁移到PostgreSQL后,您可能会发现以下教程: