使用Pgloader将MySQL迁移到PostgreSQL详细教程

本文介绍了pgloader,一个强大的PostgreSQL数据加载工具,其特点包括事务处理、错误继续、数据格式转换、安装教程、安全配置以及支持SQLite和MySQL迁移。它提供命令文件支持和增量迁移功能,提升数据迁移效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0. 前言

pgloader 是一个专为 PostgreSQL 设计的数据加载工具,主要使用 COPY命令。其优越性主要体现在事务行为,pgloader 会保留一个包含被拒绝数据的独立文件,但同时会继续尝试在你的数据库中复制正常的数据。相比之下,PostgreSQL 的默认行为是事务性的,任何输入数据(文件或远程数据库)中的错误行都会导致整个表的批量加载中止。

pgloader 还能够实现数据的重格式化。例如,它能将 MySQL 的日期时间戳 0000-00-00 和 0000-00-00 00:00:00 转换为 PostgreSQL 的 NULL 值,因为我们的日历系统从未有过零年。

使用 pgloader,你可以提供一个命令文件,或者直接从命令行运行。更多的使用详情请查看 快速入门

Pgloader 的错误处理机制使得任何遇到的错误不会打断迁移过程。它会继续迁移数据,并在最后提供一个详细的错误报告,帮助你了解并解决问题。 pgloader可以并行处理多个表的迁移,大大提高了迁移速度。同时,它还支持增量迁移,你可以在初次完整迁移后,再次运行 Pgloader,只迁移源数据库中的新增数据。这无疑大大提高了迁移的效率。

1. 安装和操作示例

Pgloader 还使用了批量处理技术,可以在不消耗过多内存的情况下迁移大量数据。

$ createdb newdb
$ pgloader ./test/sqlite/sqlite.db postgresql:///newdb

或者我们要从 MySQL 进行完全迁移,包括架构定义(表,索引,外键,注释)和修正数据的并行加载:

$ createdb pagila
$ pgloader mysql://user@localhost/sakila postgresql:///pagila

1.1 linux安装

如果你想安装 pgloader,它的完整安装文档可以在 https://pgloader.readthedocs.io/ 上查看。如果你正在使用 debian 系统,只需执行下面的命令即可安装:

$ apt-get install pgloader

1.2 docker安装

如果你正在使用 docker,你可以使用 CI 在每次提交到 master 分支时构建的最新版本:

$ docker pull ghcr.io/dimitri/pgloader:latest
$ docker run --rm -it ghcr.io/dimitri/pgloader:latest pgloader --version

2. 教程

Pgloader 的简单使用教程

2.1 MySQL迁移教程

  1. 安装 Pgloader:你可以直接在你的 Linux 系统中使用包管理器来安装 Pgloader,例如在 Ubuntu 系统中,你可以使用以下命令来安装:

    sudo apt-get install pgloader
    
  2. 准备你的迁移文件:你需要编写一个 .load 文件,来描述你的迁移需求。例如:cc.load

    load database
        from 'mysql://user:password@localhost/dbname'
        into 'postgres://user:password@localhost/dbname'
    
    CAST type datetime to timestamptz drop default drop not null using zero-dates-to-null,
         type date drop not null drop default using zero-dates-to-null,
    
    WITH create tables, create indexes, reset sequences,
         foreign keys
    
    SET maintenance_work_mem to '128MB', work_mem to '12MB'
    

在命令行中直接包含密码可能存在安全风险,因此通常建议使用其他方式来提供密码。在 pgloader 的情况下,你可以在命令行中省略密码,然后 pgloader 会提示你输入密码。

不过,如果你确实需要在命令行中提供密码,可以按照以下格式指定数据库 URL:

postgresql://username:password@localhost/database

或者对于 MySQL:

mysql://username:password@localhost/database

这样,你就可以在 pgloader 命令中包含密码了。例如:

$ pgloader mysql://user:password@localhost/sakila postgresql://user:password@localhost/pagila

但请注意,这种方式可能会让密码在命令历史或日志文件中留下记录,因此请确保你理解相关风险,并在必要时采取适当的安全措施。
3. 运行 Pgloader:你可以使用以下命令来运行 Pgloader:

 pgloader cc.load

完整的文档可以在线查看,包括所有 pgloader 子命令的手册页。请查看 https://pgloader.readthedocs.io/。

$ pgloader --help
pgloader [选项 ... ] 源 目标
  --help -h                       布尔值  显示使用方法并退出。
  --version -V                    布尔值  显示 pgloader 版本并退出。
  --quiet -q                      布尔值  安静模式
  --verbose -v                    布尔值  详细模式
  --debug -d                      布尔值  显示调试级别信息。
  --client-min-messages           字符串   控制台看到的日志过滤器(默认:"warning")
  --log-min-messages              字符串   日志文件中看到的日志过滤器(默认:"notice"--summary -S                    字符串   将摘要复制到的文件名
  --root-dir -D                   字符串   输出根目录。(默认:#P"/tmp/pgloader/")
  --upgrade-config -U             布尔值  输出对应于 v2.x 的 .conf 文件的命令
  --list-encodings -E             布尔值  列出 pgloader 已知的编码并退出。
  --logfile -L                    字符串   发送日志的文件名。
  --load-lisp-file -l             字符串   从文件中读取用户代码
  --dry-run                       布尔值  只检查数据库连接,不加载任何东西。
  --on-error-stop                 布尔值  不处理错误。
  --no-ssl-cert-verification      布尔值  指示 OpenSSL 不验证证书。
  --context -C                    字符串   命令上下文变量
  --with                          字符串   加载选项
  --set                           字符串   PostgreSQL 选项
  --field                         字符串   源文件字段规范
  --cast                          字符串   特定的转换规则
  --type                          字符串   强制输入源类型
  --encoding                      字符串   预期的源编码
  --before                        字符串   加载数据前运行的 SQL 脚本
  --after                         字符串   加载数据后运行的 SQL 脚本
  --self-upgrade                  字符串   pgloader 更新源的路径
  --regress                       布尔值  驱动回归测试

pgloader 快速入门

2.2 SQLite 进行完全迁移:

$ createdb newdb
$ pgloader ./test/sqlite/sqlite.db postgresql:///newdb

或者从 MySQL 进行完全迁移,包括架构定义(表,索引,外键,注释)和修正数据的并行加载:

$ createdb pagila
$ pgloader mysql://user@localhost/sakila postgresql:///pagila
参考资源链接:[pgloader:异构迁移指南,MySQLPostgreSQL的高效解决方案](https://wenku.csdn.net/doc/4eifhnitht?utm_source=wenku_answer2doc_content) 在生产环境中部署pgloader以进行MySQLPostgreSQL迁移是一个复杂过程,涉及到多个技术层面的考量。为了确保迁移过程的高效和稳定,推荐使用pgloader:异构迁移指南,MySQLPostgreSQL的高效解决方案》作为参考指南,该指南详细介绍了整个迁移过程中的关键步骤和最佳实践。 首先,需要在目标服务器上进行pgloader的安装和配置。如果选择源码编译安装方式,按照指南中提供的步骤确保所有依赖项安装完整。对于容器部署,可以使用Docker,这样可以减少对服务器环境的依赖,并利用Docker的镜像管理优势,简化部署和迁移过程。 在部署时,优化带宽的策略是关键。考虑到迁移过程可能占用大量带宽资源,可能会对生产环境造成影响,因此,推荐在非高峰时段进行迁移。此外,可以使用压缩技术来减少数据传输量,比如在编译安装过程中启用压缩选项,或在迁移脚本中指定数据压缩选项。 完成安装配置后,运行相应的验证命令来确保pgloader正确安装。接着,根据MySQL数据库的结构,编写适合的pgloader迁移脚本。在脚本中,需要精确配置源数据库和目标数据库的连接参数,以及表结构映射。此外,处理数据类型转换和异常情况也是迁移脚本的重要部分。 整个迁移过程需要谨慎处理,确保数据的一致性和完整性。在迁移过程中,密切监控迁移状态和网络带宽使用情况,及时调整以适应实际环境变化。 在迁移完成并验证数据无误后,可以考虑将pgloader及其依赖的组件打包成镜像,以便在其他环境快速部署和复现迁移过程。这样不仅可以节省部署时间,还能保证环境的一致性。 总的来说,使用pgloader进行异构数据库迁移是一个需要细致规划和执行的过程。《pgloader:异构迁移指南,MySQLPostgreSQL的高效解决方案》提供了详尽的指导,帮助用户在确保数据完整性的同时,优化带宽使用,提高迁移效率。 参考资源链接:[pgloader:异构迁移指南,MySQLPostgreSQL的高效解决方案](https://wenku.csdn.net/doc/4eifhnitht?utm_source=wenku_answer2doc_content)
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰点.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值