1 pg_chameleon 介绍
pgchameleon 是一款MySQL 到 PostgreSQL/openGuass 的复制工具。


pg_chameleon 使用场景:
1)分析
2)迁移
3)对多个MySQL 数据库进行数据聚合 


操作系统信息
(myenv) root@u24-pg-60:~# cat /etc/issue
Ubuntu 24.04.2 LTS \n \l

2 主机列表
192.168.254.50   #mysql源库
192.168.254.60   #Postgresql 目标数据库
192.168.254.61   #安装pg_chameleon


3 mysql 数据库环境准备(192.168.254.50)
vi /etc/my.cnf
binlog_format = ROW         
binlog_rows_query_log_events = on
binlog_row_image = full
binlog_row_metadata = full
binlog_row_image = full
autocommit = on


使用pg_chameleon创建用于配置复制的用户,并使用以下步骤为用户提供适当的权限.
$ mysql -uroot -p123456
create user 'repuser'@'%' identified by 'repuser123';
GRANT ALL ON *.* TO 'repuser'@'%';
GRANT RELOAD,REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'repuser'@'%';
FLUSH PRIVILEGES;

#源数据准备
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| itpux              |
| itpux01            |
| itpux02            |
| itpux03            |
| mydb               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+


4 Postgresql 环境准备(192.168.254.60)
在PostgreSQL中创建一个用户,pg_Chameleon可以使用该用户将更改的数据写入PostgreSQL.还要创建目标数据库.
$psql -U postgres 
CREATE USER repuser WITH ENCRYPTED PASSWORD 'repuser123';
CREATE DATABASE mydb WITH OWNER repuser;


5 安装pg_chameleon(192.168.254.61)
#apt install python3-pip -y

#root 用户无法启动pg_chameleon
su - postgres    
python3 -m venv myenv
source myenv/bin/activate
pip install --upgrade setuptools
pip install pg_chameleon

将示例配置文件复制到另一个文件,例如default.yml
cd .pg_chameleon/configuration
cp config-example.yml default.yml

修改default.yml

# postgres  destination connection
pg_conn:
  host: "192.168.254.60"  
  port: "5432"
  user: "repuser"
  password: "repuser123"
  database: "mydb"
  charset: "utf8"

sources:
  mysql:
    db_conn:
      host: "192.168.254.50"
      port: "3306"
      user: "repuser"
      password: "repuser123"
      charset: 'utf8'
      connect_timeout: 10
    schema_mappings:
      itpux: public
      itpux01: itpux01
      itpux02: itpux02
      itpux03: itpux03
    limit_tables:
      - delphis_mediterranea.foo
    skip_tables:
      - delphis_mediterranea.bar
    grant_select_to:
      - usr_readonly
    lock_timeout: "120s"
    my_server_id: 100
    replica_batch_size: 10000
    replay_max_rows: 10000
    batch_retention: '1 day'
    copy_max_memory: "300M"
    copy_mode: 'file'
    out_dir: /tmp
    sleep_loop: 1
    on_error_replay: continue
    on_error_read: continue
    auto_maintenance: "disabled"
    gtid_enable: false
    type: mysql
    skip_events:
      insert:
        - delphis_mediterranea.foo  # skips inserts on delphis_mediterranea.foo
      delete:
        - delphis_mediterranea  # skips deletes on schema delphis_mediterranea
      update:
    keep_existing_schema: No
    net_read_timeout: 600


参数说明:

#目标Postgresql数据库配置(192.168.254.61)
pg_conn:
  host: "192.168.254.60"   #主机
  port: "5432"             #端口
  user: "repuser"           #用户
  password: "repuser123"   #密码
  database: "mydb"           #数据库
  charset: "utf8"           #编码


#源数MySQL据库(192.168.254.50)

sources:
  mysql:
    db_conn:
      host: "192.168.254.50"   #主机
      port: "3306"               #端口
      user: "repuser"           #用户
      password: "repuser123"   #密码
      charset: 'utf8'           #编码        
      connect_timeout: 10      #连接超时
    schema_mappings:           
      itpux: public            #mysql的itpux库 对应Postgresql的mydb库public schema
      itpux01: itpux01           #mysql的itpux01库 对应Postgresql的mydb库itpux01 schema
      itpux02: itpux02           #mysql的itpux02库 对应Postgresql的mydb库itpux02 schema
      itpux03: itpux03           #mysql的itpux03库 对应Postgresql的mydb库itpux03 schema

#开始数据库迁移操作步骤
1 初始化副本(在192.168.254.61   #安装pg_chameleon)
命令:
chameleon create_replica_schema --debug


在Postgresql目标库查看(192.168.254.60)
上面的命令在.pg_chameleon/configuration/default.yml文件中指定的PostgreSQL数据库中创建一个模式和13个表,
需要这些表来管理从源到目标的复制.在以下日志中可以观察到相同的情况.

$psql
\dt sch_chameleon.t_*
mydb=# \dt sch_chameleon.*
                    List of relations
    Schema     |         Name          | Type  |  Owner  
---------------+-----------------------+-------+---------
 sch_chameleon | t_batch_events        | table | repuser
 sch_chameleon | t_discarded_rows      | table | repuser
 sch_chameleon | t_error_log           | table | repuser
 sch_chameleon | t_fkeys               | table | repuser
 sch_chameleon | t_indexes             | table | repuser
 sch_chameleon | t_last_received       | table | repuser
 sch_chameleon | t_last_replayed       | table | repuser
 sch_chameleon | t_log_replica         | table | repuser
 sch_chameleon | t_log_replica_mysql_1 | table | repuser
 sch_chameleon | t_log_replica_mysql_2 | table | repuser
 sch_chameleon | t_pkeys               | table | repuser
 sch_chameleon | t_replica_batch       | table | repuser
 sch_chameleon | t_replica_tables      | table | repuser
 sch_chameleon | t_sources             | table | repuser
 sch_chameleon | t_ukeys               | table | repuser
(15 rows)


2 指定源详细信息(在192.168.254.61   #安装pg_chameleon)
使用以下命令将源详细信息添加到pg_chameleon.提供配置文件中指定的源名称。
在此示例中,源名称为mysql,目标是在pg_conn下定义的postgreSQL数据库.
命令:
chameleon add_source --config default --source mysql --debug
chameleon show_status --config default


在Postgresql目标库查看(192.168.254.60)
运行完上述命令后,查看表t_sources即可看到源详细信息已添加到表t_sources中.
\x
select * from sch_chameleon.t_sources;
mydb=# select * from sch_chameleon.t_sources;
-[ RECORD 1 ]-------+--------------------------------------------------------------------------------------
i_id_source         | 1
t_source            | mysql
jsb_schema_mappings | {"itpux": "public", "itpux01": "itpux01", "itpux02": "itpux02", "itpux03": "itpux03"}
enm_status          | initialised
t_binlog_name       | mysql-bin.000008
i_binlog_position   | 14868456
b_consistent        | f
b_paused            | f
b_maintenance       | f
ts_last_maintenance | 
enm_source_type     | mysql
v_log_table         | {t_log_replica_mysql_2,t_log_replica_mysql_1}


3 初始化目标库
命令:
chameleon init_replica --config default --source mysql --debug

#一下日志表示完成迁移
2025-05-28 20:39:27 MainProcess INFO pg_lib.py (3464): Set high watermark for source: mysql
2025-05-28 20:39:27 MainProcess INFO mysql_lib.py (1590): init replica for source mysql is complete

在Postgresql目标库查看(192.168.254.60)
检查数据是否已经迁移
mydb=# \dn
     List of schemas
     Name      |  Owner  
---------------+---------
 itpux01       | repuser
 itpux02       | repuser
 itpux03       | repuser
 public        | repuser
 sch_chameleon | repuser
(5 rows)


mydb=# \dt public.*
         List of relations
 Schema |  Name   | Type  |  Owner  
--------+---------+-------+---------
 public | itpux01 | table | repuser
 public | itpux02 | table | repuser
 public | itpux03 | table | repuser
 public | test    | table | repuser

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/82812.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/82812.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/82812.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spark 中,map和foreach的区别

在 Spark 中,map和foreach是两种不同用途的转换操作,主要区别在于: 1. 操作类型与返回值 map:是转换操作(Transformation),返回一个新的 RDD。foreach:是行动操作(Acti…

More SQL(Focus Subqueries、Join)

目录 Subqueries Subqueries That Return One Tuple Subqueries and Self Connection The IN Operator The Exists Operator The Operator ANY The Operator ALL Union, Intersection, and Difference(交并差) Bag Semantics Controlling Dupl…

OpenGL Chan视频学习-4 Vertex Buffers and Drawing a Triangle in OpenGL

一、视频链接 【最好的OpenGL教程之一】https://www.bilibili.com/video/BV1MJ411u7Bc?p5&vd_source44b77bde056381262ee55e448b9b1973 二、相关网站 docs.gl 三、代码整理 c #include <GL/glew.h> #include <GLFW/glfw3.h>#include<iostream>int…

WSL中ubuntu通过Windows带代理访问github

WSL中ubuntu通过Windows带代理访问github 前言: WSL是Windows下的ubuntu访问工具&#xff0c;目前无法访问外网&#xff0c;因此需要配置一下。 步骤一 代理中进行如下设置: 步骤二 ubuntu22.04中修改配置 使用如下命令获取IP地址&#xff1a; ip route | grep default | aw…

为(FramePack)的视频生成添加首尾帧功能

文章目录 &#xff08;一&#xff09;前言&#xff08;二&#xff09;可选的尾帧&#xff08;三&#xff09;测试&#xff08;四&#xff09;例子 &#xff08;一&#xff09;前言 前提是这个&#xff1a;《笔记本6GB本地可跑的图生视频项目&#xff08;FramePack&#xff09;…

C语言中:递归问题的深入研究

C语言中&#xff1a;递归问题的深入研究 函数的递归有两个限制条件&#xff1a; 1.递归存在限制条件&#xff0c;当满⾜这个限制条件的时候&#xff0c;递归便不再继续。 2.每次递归调⽤之后越来越接近这个限制条件。 例子&#xff1a; #include <stdio.h> int main…

《C++20新特性全解析:模块、协程与概念(Concepts)》

引言&#xff1a;C20——现代C的里程碑 C20是继C11之后最具革命性的版本&#xff0c;它通过模块&#xff08;Modules&#xff09;、协程&#xff08;Coroutines&#xff09;和概念&#xff08;Concepts&#xff09;三大核心特性&#xff0c;彻底改变了C的代码组织方式、并发模…

xcode卡死问题,无论打开什么程序xcode总是在转菊花,重启电脑,卸载重装都不行

很可能是因为我们上次没有正常关闭Xcode&#xff0c;而Xcode保留了上次错误的一些记录&#xff0c;而这次打开Xcode依然去加载错误的记录&#xff0c;所以必须完全删除这些记录Xcode才能加载正常的项目。 那么也就是说&#xff0c;我们是不是只需要删除这部分错误记录文件就可以…

华为云Flexus+DeepSeek征文|华为云Flexus云服务器X实例上部署Dify:打造高效的开源大语言模型应用开发平台

目录 前言 1 Dify与华为云部署概述 1.1 什么是 Dify 1.2 华为云与 Flexus 云服务器的优势 2 云服务器部署 Dify 的步骤详解 2.1 模板选择 2.2 参数配置 2.3 资源栈设置 2.4 确认部署信息并执行 3 部署成功后的操作与平台使用指南 3.1 访问平台 3.2 设置管理员账号 …

物流项目第九期(MongoDB的应用之作业范围)

本项目专栏&#xff1a; 物流项目_Auc23的博客-CSDN博客 建议先看这期&#xff1a; MongoDB入门之Java的使用-CSDN博客 需求分析 在项目中&#xff0c;会有两个作业范围&#xff0c;分别是机构作业范围和快递员作业范围&#xff0c;这两个作业范围的逻辑是一致的&#xf…

网络拓扑如何跨网段访问

最近领导让研究下跟甲方合同里的&#xff0c;跨网段访问怎么实现&#xff0c;之前不都是运维网工干的活么&#xff0c;看来裁员裁到动脉上了碰到用人的时候找不到人了&#xff0c; 只能赶鸭子上架让我来搞 IP 网络中&#xff0c;不同网段之间的通信需要通过路由器&#xff0c;…

【前端】PWA

目录 概述实战vue项目问题汇总 PWA&#xff08;渐进式 Web 应用&#xff0c;Progressive Web App&#xff09; 2015提出 概述 PWA 是一种提升 Web 应用体验的技术&#xff0c;使其具备与原生应用相似的功能和性能。PWA不仅能够在网页上运行&#xff0c;还能在手机或桌面上像传…

湖北理元理律师事务所:从法律合规到心灵契合的服务升维

债务优化不仅是数字游戏&#xff0c;更是信任重建的过程。湖北理元理律师事务所在实践中发现&#xff1a;68%的债务纠纷中存在沟通断裂。为此&#xff0c;机构构建了“三维信任修复机制”。 维度一&#xff1a;信息透明的技术实现 区块链存证舱&#xff1a;客户手机实时查看律…

香橙派3B学习笔记2:Vscode远程SSH登录香橙派_权限问题连接失败解决

Vscode下载插件&#xff0c;ssh远程登录香橙派。 ssh &#xff1a; orangepi本地ip 密码 &#xff1a; orangepi 安装 Remote - SSH 扩展SSH插件&#xff1a; SSH远程连接&#xff1a; ssh usernameremote_host ssh -p port_number usernameremote_host默认22端口号就用第一行…

VMware安装Ubuntu实战分享大纲

深入解析快速排序 一、分治策略分解 分解阶段&#xff1a; 选择基准元素 $pivot$将数组划分为三个子集&#xff1a; $$ left {x | x < pivot} $$ $$ equal {x | x pivot} $$ $$ right {x | x > pivot} $$ 递归排序&#xff1a; 对 left 和 right 子集递归调用快速排…

AI 让无人机跟踪更精准——从视觉感知到智能预测

AI 让无人机跟踪更精准——从视觉感知到智能预测 无人机跟踪技术正在经历一场前所未有的变革。曾经,我们只能依靠 GPS 或简单的视觉识别来跟踪无人机,但如今,人工智能(AI)结合深度学习和高级视觉算法,正让无人机的跟踪变得更加智能化、精准化。 尤其是在自动驾驶、安防监…

GATED DELTA NETWORKS : IMPROVING MAMBA 2 WITH DELTA RULE

TL;DR 2024 年 Nvidia MIT 提出的线性Transformer 方法 Gated DeltaNet&#xff0c;融合了自适应内存控制的门控机制&#xff08;gating&#xff09;和用于精确内存修改的delta更新规则&#xff08;delta update rule&#xff09;&#xff0c;在多个基准测试中始终超越了现有…

Laravel单元测试使用示例

Date: 2025-05-28 17:35:46 author: lijianzhan 在 Laravel 框架中&#xff0c;单元测试是一种常用的测试方法&#xff0c;它是允许你测试应用程序中的最小可测试单元&#xff0c;通常是方法或函数。Laravel 提供了内置的测试工具PHPUnit&#xff0c;实践中进行单元测试是保障代…

【FastAPI】--3.进阶教程(二)

【FastAPI】--进阶教程1-CSDN博客 【FastAPI】--基础教程-CSDN博客 目录 1.FastAPI - CORS ​2.FastAPI - CRUD 操作 2.1.Create 2.2.Read 2.3.Update 2.4.Delete 3.FastAPI - 使用 GraphQL 4.FastAPI - Websockets 5.FastAPI - 事件处理程序 6.FastAPI - 安装 Fla…

FEMFAT许可的更新与升级流程

随着工程仿真技术的不断发展&#xff0c;FEMFAT作为一款领先的疲劳分析软件&#xff0c;持续为用户提供卓越的性能和创新的功能。为了保持软件的最新性和高效性&#xff0c;了解FEMFAT许可的更新与升级流程至关重要。本文将为您详细介绍FEMFAT许可的更新与升级流程&#xff0c;…