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

news/2024/7/9 21:58:40 标签: mysql, postgresql, 数据库

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

http://www.niftyadmin.cn/n/4962487.html

相关文章

java-线程相关知识二

1. 线程基本方法 线程相关的基本方法有 wait,notify,notifyAll,sleep,join,yield 等。 1.1. 线程等待(wait) 调用该方法的线程进入 WAITING 状态,只有等待另外线程的通知或被中断…

Linux下/sysconfig/network、hosts、host.conf、resolv.conf文件解释

原文链接: https://blog.csdn.net/f641385712/article/details/105233229 Linux下/sysconfig/network、hosts、host.conf、resolv.conf文件解释 /sysconfig/network:此文件是针对本计算机 # 支持网络通信 NETWORKINGyes# 主机名,默认是loca…

定位相关常识高德百度国家地理局

做的项目本来是要求定位功能,但是发现市面上都是收费的 首先我们要了解一下有几种坐标系 1、 GPS,WGS-84,原始坐标体系。一般用国际标准的GPS记录仪记录下来的坐标,都是GPS的坐标。很可惜,在中国,任何一个地…

【C++奇遇记】内存模型

🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集 数据库专栏 初阶数据结构 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如…

计算机竞赛 基于Django与深度学习的股票预测系统

文章目录 0 前言1 课题背景2 实现效果3 Django框架4 数据整理5 模型准备和训练6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于Django与深度学习的股票预测系统 ** 该项目较为新颖,适合作为竞赛课题方向&#xff…

计算机竞赛 基于GRU的 电影评论情感分析 - python 深度学习 情感分类

文章目录 1 前言1.1 项目介绍 2 情感分类介绍3 数据集4 实现4.1 数据预处理4.2 构建网络4.3 训练模型4.4 模型评估4.5 模型预测 5 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 基于GRU的 电影评论情感分析 该项目较为新颖,适合作为竞…

Utilities

can.detect_available_configs(interfacesNone) 检测接口当前可以连接的所有配置/通道。 这可能相当耗时。 自动配置检测可能不是由每个平台上的每个接口来实现的。在这种情况下,此方法不会引发错误,而是返回该接口的空列表。 PARAMETERS: interfac…

数据结构好题总结

Cut Inequality Down 题解 https://blog.csdn.net/lzh_naive/article/details/103340568 概括:st表倍增类st表 考虑如果没有UL限制的话,相当于是前缀和 我们发现,如果某次到了U/L(相当于是一次碰壁)那么这个值已知…