TiDB实时同步数据到PostgreSQL(三) ---- 使用pgloader迁移数据

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 使用PostgreSQL数据迁移神器pgloader从TiDB迁移数据到PostgreSQL,同时说明如何在最新的Rocky Linux 9(CentOS 9 stream也适用)上通过源码编译安装pgloader。

pgloader是一款为PostgreSQL开发的数据迁移神器,支持从sqlite、MySQL、SQL Server等数据库往PostgreSQL迁移数据,也支持PostgreSQL到PostgreSQL、PostgreSQL到Citus。可自定义迁移规则,非常方便灵活。表结构、索引等都可以完整的迁移过来。

pgloader采用Lisp开发,ubuntu下可使用apt install pgloader安装,CentOS默认安装源里没有pgloader,这里以Rocky Linux 9为例,介绍如何通过源码安装。


安装Lisp

# 下载并安装最新的sbclwget https://sourceforge.net/projects/sbcl/files/sbcl/2.3.9/sbcl-2.3.9-x86-64-linux-binary.tar.bz2
tar jxvf sbcl-2.3.9-x86-64-linux-binary.tar.bz2
cd sbcl-2.3.9-x86-64-linux-binary
./install.sh
# sbcl默认会安装到/usr/local目录

编译pgloader

# dnf install freetds-develgit clone https://github.com/dimitri/pgloader.git
cd pgloader
make save
make pgloader
# 检查是否编译成功build/bin/pgloader --help# 如果编译成功,会显示以下内容pgloader [ option ... ] command-file ...
pgloader [ option ... ] SOURCE TARGET
--help-h                       boolean  Show usage and exit.
--version-V                    boolean  Displays pgloader version and exit.
--quiet-q                      boolean  Be quiet
--verbose-v                    boolean  Be verbose
--debug-d                      boolean  Display debug level information.
--client-min-messages           string   Filter logs seen at the console (default: "warning")
--log-min-messages              string   Filter logs seen in the logfile (default: "notice")
--summary-S                    string   Filename where to copy the summary
--root-dir-D                   string   Output root directory. (default: #P"/tmp/pgloader/")--upgrade-config-U             boolean  Output the command(s) corresponding to .conf file for                                           v2.x
--list-encodings-E             boolean  List pgloader known encodings and exit.
--logfile-L                    string   Filename where to send the logs.
--load-lisp-file-l             string   Read user code from files
--dry-run                       boolean  Only check database connections, don't load anything.  --on-error-stop                 boolean  Refrain from handling errors properly.  --no-ssl-cert-verification      boolean  Instruct OpenSSL to bypass verifying certificates.  --context -C                    string   Command Context Variables  --with                          string   Load options  --set                           string   PostgreSQL options  --field                         string   Source file fields specification  --cast                          string   Specific cast rules  --type                          string   Force input source type  --encoding                      string   Source expected encoding  --before                        string   SQL script to run before loading the data  --after                         string   SQL script to run after loading the data  --self-upgrade                  string   Path to pgloader newer sources  --regress                       boolean  Drive regression testing

迁移TiDB数据到PostgreSQL

如果数据量比较小,可以直接命令行,但本次迁移数据量比较大,还有几张数据量过亿的大表,接命令行做全库迁移,遇到大表,TiDB就挂了,迁移无法正常完成。无奈之下,只好对每张大表单独处理,这就需要定义load文件,load文件里设置线程数量、每次迁移数据的数量,数据类型转换等。

以下是命令行一次性迁移的例子:

pgloader --cast"type date to date drop not null drop default using zero-dates-to-null"--cast"type datetime to timestamp drop not null drop default using zero-dates-to-null"--cast"type tinyint to smallint drop typemod"--with"prefetch rows=50000"--with"workers=8"--with"concurrency=1"--with"multiple readers per thread"--with"rows per range = 50000"-v mysql://test:111111@192.168.0.1:4000/test postgresql://test:123456@192.168.0.2/test

此命令把mysql的test库迁移到postgresql中

--cast 类型转换设定,用于将mysql的某种类型转换为指定的pg类型(pgloader对MySQL的0日期处理的很好)

--with 用于指定一些迁移中的参数,比如每次迁移多少行、多少并发、多少迁移工人线程等,还可以排除一些不想迁移的表,比如本例就排除了表名中带有_log的表。

由于本次迁移生产环境的数据库,数据量较大,一次性迁移,生产库会不堪重负,因为采用了分批迁移的方式,对记录超过1000万条的表逐张迁移,其余表根据表名一部分一部分的迁移,因此需要采用编写.load文件的方式。load文件跟直接命令行相比可支持更多的指令,举例如下:

LOAD DATABASE
    FROM mysql://root@tidb_server:4000/dbname
    INTO postgresql://user:password@pg_server/dbname
WITH include drop, create tables, create indexes, reset sequences,
    workers =8, concurrency =4,
    multiple readers per thread, rows per range =50000,
    prefetch rows=50000,
    batch rows =50000, batch concurrency =1, batch size = 4GB
SET MySQL PARAMETERS
    net_read_timeout  ='14400',
    net_write_timeout ='14400',
    MAX_EXECUTION_TIME ='0'CAST type date to date drop not null drop default using zero-dates-to-null,
     type datetime to timestamp drop not null drop default using zero-dates-to-null,
     type tinyint to smallint drop typemod
INCLUDING ONLY TABLE NAMES MATCHING 'big_table1'; --仅迁移big_table1

批量迁移的例子

LOAD DATABASE
    FROM mysql://user@tidb_server:4000/dbname
    INTO postgresql://user:password@pg_server/dbname
WITH include drop, create tables, create indexes, reset sequences,
    workers =4, concurrency =2,
    multiple readers per thread, rows per range =20000,
    prefetch rows=20000,
    batch rows =20000, batch concurrency =4SET MySQL PARAMETERS
    net_read_timeout  ='14400',
    net_write_timeout ='14400',
    MAX_EXECUTION_TIME ='0'CAST type date to date drop not null drop default using zero-dates-to-null,
     type datetime to timestamp drop not null drop default using zero-dates-to-null,
     type tinyint to smallint drop typemod
INCLUDING ONLY TABLE NAMES MATCHING ~/aa_log*/; --只迁移匹配名字的表
-- 排除表的写法,排除符合条件的表
-- EXCLUDING TABLE NAMES MATCHING ~/aa_log*/,'big_table1','big_table';

写好load文件后,用如下的方法执行:

pgloader -v xxxx.load # -v参数可省略,加上可以看到执行的进度

以上就是基本的用法,掌握以上用法也基本够用了!

更详细的用法可参考pgloader官文文档

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
1天前
|
分布式计算 DataWorks 关系型数据库
DataWorks产品使用合集之在使用 DataWorks 数据集成同步 PostgreSQL 数据库中的 Geometry 类型数据如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
7 0
|
14天前
|
SQL 关系型数据库 MySQL
关系型数据库插入数据的语句
使用SQL的`INSERT INTO`语句向关系型数据库的`students`表插入数据。例如,插入一个`id`为1,`name`为'张三',`age`为20的记录:`INSERT INTO students (id, name, age) VALUES (1, '张三', 20)。如果`id`自增,则可简化为`INSERT INTO students (name, age) VALUES ('张三', 20)`。
21 2
|
14天前
|
SQL 存储 Oracle
关系型数据库查询数据的语句
本文介绍了关系型数据库中的基本SQL查询语句,包括选择所有或特定列、带条件查询、排序、分组、过滤分组、表连接、限制记录数及子查询。SQL还支持窗口函数、存储过程等高级功能,是高效管理数据库的关键。建议深入学习SQL及相应数据库系统文档。
9 2
|
20天前
|
人工智能 Cloud Native 算法
数据之势丨AI时代,云原生数据库的最新发展趋势与进展
AI与云数据库的深度结合是数据库发展的必然趋势,基于AI能力的加持,云数据库未来可以实现更快速的查询和决策,帮助企业更好地利用海量数据进行业务创新和决策优化。
数据之势丨AI时代,云原生数据库的最新发展趋势与进展
|
2月前
|
关系型数据库 MySQL OLAP
PolarDB +AnalyticDB Zero-ETL :免费同步数据到ADB,享受数据流通新体验
Zero-ETL是阿里云瑶池数据库提供的服务,旨在简化传统ETL流程的复杂性和成本,提高数据实时性。降低数据同步成本,允许用户快速在AnalyticDB中对PolarDB数据进行分析,降低了30%的数据接入成本,提升了60%的建仓效率。 Zero-ETL特性包括免费的PolarDB MySQL联邦分析和PolarDB-X元数据自动同步,提供一体化的事务处理和数据分析,并能整合多个数据源。用户只需简单配置即可实现数据同步和实时分析。
|
2月前
|
关系型数据库 分布式数据库 数据库
成都晨云信息技术完成阿里云PolarDB数据库产品生态集成认证
近日,成都晨云信息技术有限责任公司(以下简称晨云信息)与阿里云PolarDB PostgreSQL版数据库产品展开产品集成认证。测试结果表明,晨云信息旗下晨云-站群管理系统(V1.0)与阿里云以下产品:开源云原生数据库PolarDB PostgreSQL版(V11),完全满足产品兼容认证要求,兼容性良好,系统运行稳定。
|
2月前
|
关系型数据库 分布式数据库 数据库
PolarDB常见问题之数据库不能自己减少节点如何解决
PolarDB是阿里云推出的下一代关系型数据库,具有高性能、高可用性和弹性伸缩能力,适用于大规模数据处理场景。本汇总囊括了PolarDB使用中用户可能遭遇的一系列常见问题及解答,旨在为数据库管理员和开发者提供全面的问题指导,确保数据库平稳运行和优化使用体验。
|
2月前
|
缓存 关系型数据库 分布式数据库
PolarDB常见问题之数据库cpu突然飙高如何解决
PolarDB是阿里云推出的下一代关系型数据库,具有高性能、高可用性和弹性伸缩能力,适用于大规模数据处理场景。本汇总囊括了PolarDB使用中用户可能遭遇的一系列常见问题及解答,旨在为数据库管理员和开发者提供全面的问题指导,确保数据库平稳运行和优化使用体验。
|
3月前
|
关系型数据库 分布式数据库 数据库
阿里云PolarDB登顶2024中国数据库流行榜:技术实力与开发者影响力
近日,阿里云旗下的自研云原生数据库PolarDB在2024年中国数据库流行度排行榜中夺冠,并刷新了榜单总分纪录,这一成就引起了技术圈的广泛关注。这一成就源于PolarDB在数据库技术上的突破与创新,以及对开发者和用户的实际需求的深入了解体会。那么本文就来分享一下关于数据库流行度排行榜的影响力以及对数据库选型的影响,讨论PolarDB登顶的关键因素,以及PolarDB“三层分离”新版本对开发者使用数据库的影响。
83 3
阿里云PolarDB登顶2024中国数据库流行榜:技术实力与开发者影响力
|
2月前
|
关系型数据库 分布式数据库 数据库
PolarDB PostgreSQL版:Oracle兼容的高性能数据库
PolarDB PostgreSQL版是一款高性能的数据库,具有与Oracle兼容的特性。它采用了分布式架构,可以轻松处理大量的数据,同时还支持多种数据类型和函数,具有高可用性和可扩展性。它还提供了丰富的管理工具和性能优化功能,为企业提供了可靠的数据存储和处理解决方案。PolarDB PostgreSQL版在数据库领域具有很高的竞争力,可以满足各种企业的需求。