Pgloader极简教程

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: pgloader 是一款强大的数据同步与迁移工具,专为将数据从多种来源迁移到 PostgreSQL 设计。它支持从文件(如 CSV)和多种数据库系统(如 SQLite、MySQL)迁移数据。pgloader 提供了丰富的安装选项,包括手动编译安装,适用于不同操作系统。使用上,既可以通过命令行直接操作,也可以通过配置文件进行复杂的数据迁移任务,如表结构和数据的同步。其高效性和灵活性使得数据库迁移变得更加简便和可靠。

[toc]

简介

pgloader是一个数据同步工具,用来将数据从其它地方迁移到postgresql中,支持从如下源迁移:

  • 文件:CSV、Fixed Format、Postgres COPY text format、DBF、IXF
  • 数据库系统:SQLite、MySql、MSSQLServer、PostgreSQL、Redshift

应用场景

需要往postgresql中导入数据的时候,如数据迁移。

安装

安装概述

安装方式比较丰富,详见 https://pgloader.readthedocs.io/en/latest/install.html

遗憾的是未提供CentOS环境编译好的程序供下载,所以需要手动编译安装。

CentOS编译安装

去官网下载最新源码:

https://github.com/dimitri/pgloader

将源码放到 /usr/bin下,本文为例:


[root@bogon pgloader-3.6.9]# pwd
/usr/local/pgloader-3.6.9

如果下载的是源码压缩包需要使用如下命令解压:


tar -zxvf pgloader-3.6.9.tar.gz

赋予脚本执行权限:

cd /usr/local/pgloader-3.6.9


chmod -R 777 *

执行 bootstrap-centos7.sh 脚本,下载相关依赖


bootstrap-centos7.sh

执行编译:


make  pgloader

如果有提示到 ("libcrypto.so.1.1" "libcrypto.so.1.0.0" "libcrypto.so.3" "libcrypto.so") 没有找到或者相关信息
需要先安装 openssl


yum -y install openssl openssl-devel

复制编译好的程序到系统执行目录 /usr/local/bin/ 下


cp  /usr/local/pgloader-3.6.9/build/bin/pgloader        /usr/local/bin/

查看是否安装好了:


[root@bogon home]# pgloader --version
pgloader version "3.6.7~devel"
compiled with SBCL 2.2.5

使用

pgloader 有两种常见的使用方式:

  • 通过命令行
  • 通过迁移配置文件

命令行

如下命令行:

pgloader mysql://user:password@ip:3306/dbName postgresql://user:password@ip:5432/dbName
  • 将名为dbName的数据库结构和数据 从mysql迁移到postgresql
  • pgloader 为上述 /usr/local/bin/pgloader 的可执行文件
  • 后面是mysql 的连接信息 , postgresql 的连接信息,中间使用空格分隔
  • 需要使用有写入权限的账号,建议使用root用户操作

配置文件迁移

另外一种方式就是编写迁移配置文件,然后使用 pgloader sync.load 命令执行配置文件。

如下配置文件演示了仅同步mysql的ource_db库中的ramble_doc 表到 postgresql中的target_db库中,执行完毕之后将在postgresql中新建一个名为ramble_doc 的表,并新增数据。

LOAD DATABASE
     FROM     mysql://root:xxx@192.168.1.92:3306/source_db
     INTO     postgresql://postgres:xxx@192.168.1.24:5432/target_db

INCLUDING ONLY TABLE NAMES matching 'ramble_doc' ;
  • LOAD DATABASE :表示从数据库执行迁移
  • FROM :源数据库连接信息
  • INTO :目标数据库连接信息
  • INCLUDING ONLY TABLE NAMES matching :仅包含匹配的表
  • 最后那个分号不可少
  • 配置文件需要按照格式编写,如缩进

如下配置文件演示了同步mysql 的source_db库下所有表到postgresql的target_db库下面,包含表结构和数据。

LOAD DATABASE
     FROM     mysql://root:xxx@192.168.1.92:3306/source_db
     INTO     postgresql://postgres:xxx@192.168.1.24:5432/target_db
     WITH batch rows = 10000 , batch size =200MB , prefetch rows  = 5000 , workers = 4 ,concurrency = 3
;
  • WITH:with 后面可以追加一下附属参数,各个参数使用英文逗号分隔。常见的参数如:是否需要同步数据还是仅同步结构,是否在写入数据前先删除表等
  • batch rows :在同步数据的时候分批插入postgresql的行数,默认为2.5万。
  • batch size:每批最大数据大小,设置此参数可避免出现内存溢出
  • prefetch rows:在同步数据的时候分批从mysql读取的行数,默认为1000。
  • workders: 线程数量
  • concurrency:并发线程数量

可能遇到的错误

内存溢出

报错信息为:


Heap exhausted during garbage collection: 64 bytes available, 80 requested.


垃圾回收期间堆已耗尽:可用64个字节,请求80个字节。

解决方案为调优分批数量和并发数量,需要根据源数据库数据量,硬件情况不断尝试。

更多配置参考

官网给了一个例子:


LOAD DATABASE
     FROM      mysql://root@localhost/sakila
     INTO postgresql://localhost:54393/sakila

 WITH include drop, create tables, create indexes, reset sequences,
      workers = 8, concurrency = 1,
      multiple readers per thread, rows per range = 50000

  SET PostgreSQL PARAMETERS
      maintenance_work_mem to '128MB',
      work_mem to '12MB',
      search_path to 'sakila, public, "$user"'

  SET MySQL PARAMETERS
      net_read_timeout  = '120',
      net_write_timeout = '120'

 CAST type bigint when (= precision 20) to bigserial drop typemod,
      type date drop not null drop default using zero-dates-to-null,
      -- type tinyint to boolean using tinyint-to-boolean,
      type year to integer

 MATERIALIZE VIEWS film_list, staff_list

 -- INCLUDING ONLY TABLE NAMES MATCHING ~/film/, 'actor'
 -- EXCLUDING TABLE NAMES MATCHING ~<ory>
 -- DECODING TABLE NAMES MATCHING ~/messed/, ~/encoding/ AS utf8
 -- ALTER TABLE NAMES MATCHING 'film' RENAME TO 'films'
 -- ALTER TABLE NAMES MATCHING ~/_list$/ SET SCHEMA 'mv'

 ALTER TABLE NAMES MATCHING ~/_list$/, 'sales_by_store', ~/sales_by/
  SET SCHEMA 'mv'

 ALTER TABLE NAMES MATCHING 'film' RENAME TO 'films'
 ALTER TABLE NAMES MATCHING ~/./ SET (fillfactor='40')

 ALTER SCHEMA 'sakila' RENAME TO 'pagila'

 BEFORE LOAD DO
   $$ create schema if not exists pagila; $$,
   $$ create schema if not exists mv;     $$,
   $$ alter database sakila set search_path to pagila, mv, public; $$;

https://pgloader.readthedocs.io/en/latest/ref/mysql.html

总结

pgloader是一个数据库迁移工具,花一点点时间研究一下如何使用,将在数据库迁移的时候起到事半功倍的效果,往往比自己编写迁移脚本更加完善和可靠。

引用

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
网络安全 网络虚拟化 数据安全/隐私保护
教程 - EasyConnect 的使用
下载和安装 自动安装组件失败,请手动 EasyConnectInstaller.exe EasyConnect下载链接 //后面的IP是服务端的IP地址,如果是域名直接在IP处填写域名 M5.0-M7.0版本: https://IP/com/install.exe M7.1之后版本: https://IP/com/EasyConnectInstaller.exe 登录异常,请下载 SSL VPN 诊断修复工具 进行修复 http://download.sangfor.com.cn/download/product/sslvpn/SangforHelperToolInstaller.exe 作
2880 0
|
7月前
|
Unix C语言 C++
|
7月前
|
缓存 监控 安全
Enge问题解决教程
Enge问题解决教程
80 0
|
自然语言处理 JavaScript
jedate教程
jedate教程
74 5
|
运维 监控 Java
SpringBootAdmin极简教程
SpringBoot应用可以通过Actuator来暴露应用运行过程中的各项指标,Spring Boot Admin通过这些指标来监控SpringBoot应用,然后通过图形化界面呈现出来。
250 0
SpringBootAdmin极简教程
|
算法 应用服务中间件 数据库
这或许是我写的最全的BLAST教程
Basic local alignment search tool (BLAST) 包括:blastn, blastp, blastx, tblastn, tblastx等. 使用conda安装即可。
4309 0
|
存储 自然语言处理 搜索推荐
luncne 教程
Lucene是一套用于全文检索和搜寻的开源程序库,提供了一个简单却强大的应用程序接口(API),能够做全文索引和搜寻,在Java开发环境里Lucene是一个成熟的免费开放源代码工具
luncne 教程
|
Web App开发 缓存 网络协议
fildder教程
原文:fildder教程 转载地址:写得很不错的fildder教程   http://kb.cnblogs.com/page/130367/ Fiddler的基本介绍   Fiddler的官方网站:  www.fiddler2.com       Fiddler的官方帮助:http://docs.telerik.com/fiddler/knowledgebase/quickexec   Fiddler官方网站提供了大量的帮助文档和视频教程, 这是学习Fiddler的最好资料。
1537 0
|
Web App开发 缓存 网络协议

相关实验场景

更多