确定迁移工具选项
有许多选项可用于执行从 PostgreSQL 服务器到 Azure Database for PostgreSQL 灵活服务器的迁移。 有本机 PostgreSQL 工具,例如 pg_dump、pgadmin 和 pg_restore。 Microsoft Azure 云服务如数据库迁移服务和 Azure Database for PostgreSQL - Flexible Server 中的迁移选项,可以在很大程度上自动化从源到目标的整体数据传输过程。
Azure Database for PostgreSQL 灵活服务器 - 迁移
在 Azure Database for PostgreSQL 灵活服务器服务中,有本机功能支持将数据库从其他 PostgreSQL 实例迁移到基于 Azure 的服务。 此选项旨在将数据库从源脱机迁移到目标。 若要使用此选项,我们需要使用前面讨论的 pg_dumpall 和 psql 工具来迁移迁移到灵活服务器的服务器级别对象数据库。
此功能是为将外部 PostgreSQL 实例作为源,并将创建迁移项目的弹性服务器作为目标而设计的。 主要用于将数据拉入灵活服务器。 使用此服务而非手动进行转储和还原的好处在于迁移过程的托管性质。 配置后,它会监控所有正在迁移到灵活服务器的表的过程,以便我们可以轻松确定何时可以在应用程序级别执行切换。
迁移项目
排序连接后,我们需要做的就是选择要迁移到新服务器的数据库或数据库。 在下面的屏幕截图中,请注意,如果有多个数据库支持多个服务,而这些服务是一个更大系统的一部分,那么我们可以选择将它们作为一个整体群组来迁移,而不是逐个迁移。 此数据库分组不仅有助于加快迁移速度,还可以在迁移活动期间保持逻辑一致性。
启动验证和迁移过程时,可以使用项目仪表板查看流程的总体进度。 此仪表板显示数据库经过验证,然后迁移到新服务器。
迁移后将保留此信息,使我们能够跟踪总体进度。 这些信息还提供更改控制过程所需的任何证据,说明所执行的任何工作的成功和持续时间。
PostgreSQL 工具
在这里,我们探讨了可用于将数据从 PostgreSQL 服务器迁移到 Azure Database for PostgreSQL 灵活服务器的主要工具。
pgcopydb
Pgcopydb 是一个开源项目,可以自动执行在 PostgreSQL 服务器之间复制数据库的过程。 使用 pgcopydb 相较于在安装 PostgreSQL 时提供的本机工具,有几个好处,这些好处包括:
- 使用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可用于为全局服务器级别对象生成脚本文件,例如数据库在服务器之间迁移时可能依赖的角色。