确定迁移工具选项
有许多选项可用于执行从 PostgreSQL 服务器到 Azure Database for PostgreSQL 灵活服务器的迁移。 有本机 PostgreSQL 工具,例如 pg_dump、pgadmin 和 pg_restore。 有一些 Microsoft Azure 云服务(如数据库迁移服务和 Azure Database for PostgresSQL 灵活服务器中的迁移选项)可以在很大程度上自动完成从源到目标的整个数据传输过程。
Azure Database for PostgreSQL 灵活服务器 - 迁移
在 Azure Database for PostgreSQL 灵活服务器服务中,有一种原生功能支持将数据库从其他 PostgreSQL 实例迁移到基于 Azure 的服务。 此选项用于将数据库从源脱机迁移到目标。 要使用该选项,我们需要使用前面讨论过的 pg_dumpall 和 psql 工具来迁移迁移到灵活服务器的服务器级别对象数据库。
该功能的设计将外部 PostgreSQL 实例作为源,将创建迁移项目的灵活服务器作为目标。 实质上是用于将数据拉取到灵活服务器中。 与执行手动转储和还原过程相比,使用这项服务的好处在于迁移的托管性质。 配置完成后,它会监视所有表正在迁移到灵活服务器的过程,这样我们就能轻松地看到何时可以执行应用程序级的切换。
迁移项目
完成连接排序后,我们只需选择要迁移到新服务器的一个或多个数据库。 在下面的屏幕截图中,请注意,如果有多个数据库支持若干服务,而这些服务构成了更大系统的一部分,那么我们可以选择将它们作为一组进行迁移,而不是逐个迁移。 这种数据库分组不仅有助于加快迁移速度,还能在迁移活动期间保持逻辑一致性。
当我们开始验证和迁移过程时,就可以使用项目仪表板查看过程的总体进度。 此仪表板显示数据库经过验证,然后迁移到新服务器。
这些信息会在迁移后保留,以便跟踪总体进度。 这些信息还可提供更改控制流程所需的证据,说明所开展的任何工作的成功与否以及持续时间。
PostgreSQL 工具
在此,我们将探讨可用于将数据从 PostgreSQL 服务器迁移到 Azure Database for PostgreSQL 灵活服务器的主要工具。
pgcopydb
Pgcopydb 是一个开源项目,可自动完成在 PostgreSQL 服务器之间复制数据库的过程。 与安装 PostgreSQL 时提供的本机工具相比,使用 pgcopydb 有几个好处,其中包括。
- 使用 pg_backup 和 pg_restore 消除了对中间文件的需求。
- 创建索引并发性,通过使用 PostgreSQL 中的 synchronize__seqscans 功能并行创建表索引。
- 多线程表复制可对数据分区并并行传输较大的表。
- 用于数据同步的变更数据捕获功能可最大限度地减少长时间停机的需要。
pgcopydb 中有两个主要选项,可用于从源服务器向目标迁移数据库和数据。 这些选项是克隆和复制。
pgcopydb 克隆
克隆是将整个数据库从源服务器复制到目标的主要选项。 此命令具有多个可用的开关,支持配置基本的克隆操作,直至自动配置变更数据捕获以同步数据,从而最大限度地减少迁移停机时间。 我们还可以指定按表并行化数据传输的选项,以及针对表、索引和大对象的并行传输选项。
pgcopydb 复制
在迁移数据库或部分数据库时,“复制”选项可实现更精细的控制。 我们可以使用该命令选项选择要从源服务器数据库向目标服务器和数据库转移的架构、表、角色等。 在应用程序现代化迁移活动中,在将一个大型数据库分解为多个小型数据库的情况下,此命令非常有用。 另外,通过合并迁移活动,可以将一个数据库的内容迁移到另一个数据库的架构中。
这些选项只是 pgcopydb 可以帮助我们改进将数据库迁移到 Azure Database for PostgreSQL 灵活服务器的过程的部分方法。 该过程提供了一种迁移方式,可将风险降至最低,并最大限度地增加成功机会。
pgAdmin
pgAdmin 是一种广泛使用的管理工具,可用于与 PostgreSQL 数据库交互。 此工具支持创建和执行 pgsql 脚本。 该工具包含一系列有用的 GUI 工具,可用于配置、备份和还原 PostgreSQL 数据库。 通常,在管理工作站上安装 pgAdmin。 该工具支持注册和连接多个 PostgreSQL 服务器,这使其成为我们迁移工具集的重要组成部分。
pg_dump、pg_restore 和 psql
pg_dump 是与 PostgreSQL 实例一起安装的命令行工具,可根据需要安装在管理工作站上。 它支持从 PostgreSQL 创建一致的数据库备份,即使在有并发工作负载的情况下也是如此。 它适用于各个数据库,并支持备份整个数据库或部分数据库。
如果使用 pg_dump 导出架构对象,那么可以使用 psql 在目标数据库上运行生成的 .sql 文件来创建对象。 完成这一步后,我们就可以研究如何将数据从源系统迁移到目标系统。 以下示例展示了从一个数据库中导出数据库架构并在另一个数据库中创建它的命令。
pg_dump -O --host=MyServerName --port=5432 --username=adminuser --dbname=AdventureWorks --schema-only > adventureWorks.sql
psql --host=MyFlexibleServer --username=demo --dbname=AdventureWorks < adventureWorks.sql
如果要创建源数据库的完整转储,需要使用 pg_restore 来读取生成的文件,并将数据库还原到目标 PostgreSQL 实例。 在执行备份和还原以进行转储时,这些活动所需的时间有几个决定因素。 特别是数据库的大小、存储子系统的性能以及处理组件之间的网络带宽和延迟。
下面的示例展示了如何将数据库转储到自定义位置,然后将其还原到另一台服务器。
pg_dump -Fc --host=MyServerName --port=5432 --username=adminuser --dbname=AdventureWorks > db.dump
pg_restore -Fc --host=MyServerName --port=5432 --create --username=adminuser --dbname=AdventureWorks db.dump
pg_dumpall
pg_dump 用于转储单个数据库,而 pg_dumpall 则用于将所有数据库转储到单个脚本文件中,该文件可由 psql 读取到新的 PostgreSQL 实例中。
此外,pg_dumpall 还可用于为全局服务器级对象(如角色)生成脚本文件,当数据库在服务器之间迁移时,可以依赖这些脚本文件。