mysql到postgresql的复制和迁移
pg_chameleon的Python项目详细描述
pg_chameleon是用python 3编写的mysql到postgresql的复制系统。 系统使用mysql复制库从mysql中提取行镜像,作为jsonb存储到postgresql中。 pl/pgsql函数解码jsonb值并根据postgresql数据库重放更改。
变色龙2.0is available on pypi
文档is available on pgchameleon.org
请提交您的bug reports on GitHub。
要求
副本主机
操作系统:Linux、FreeBSD、OpenBSD python:cpython 3.3+
建筑文档的选项
原始数据库
MySQL:5.5以上
目的地数据库
PostgreSQL:9.5+
示例场景
- 分析
- 迁移
- 来自多个MySQL数据库的数据聚合
功能
- 从多个MySQL模式中读取并将其还原到目标PostgreSQL数据库中源架构名称和目标架构名称可以不同。
- 设置PostgreSQL作为MySQL从机
- 支持枚举和二进制数据类型。
- 基本DDL支持(创建/删除/更改表、删除主键/截断、重命名)。
- 丢弃来自副本的垃圾数据
- 复制品的保守方法。生成错误的表将自动从副本中排除。
- 可以刷新单个表或单个架构
- 基本副本监视。
- 从MySQL分离副本以支持迁移
- 数据类型覆盖(例如tinyint(1)到boolean)
- 守护初始化副本进程
- 具有两个独立子进程的守护副本进程,一个用于读取,另一个用于重播
- 滚动条集成
注意事项
复制副本要求表具有主键或唯一键不带主键/唯一键的表在init_复制过程中初始化,但不复制
拷贝最大内存只是一个估计值。平均行大小是从mysql的informations模式中提取的,可能已经过时。 如果内存错误导致复制过程失败,请检查失败表的行长度和每个切片的行数。
根据mysql复制的需要,Python 3仅在3.3版中受支持
延迟是使用上次接收的事件时间戳和PostgreSQL时间戳确定的。如果mysql是只读的,则延迟将增加,因为 没有副本事件进入
分离副本进程重置postgres中的序列以使数据库独立工作。从源MySQL模式提取外键,并在初始时创建为无效创建外键时不使用ON DELETE或ON UPDATE子句。 第二次运行尝试验证外键。如果发生错误,它将根据源配置注销。
设置
- 创建虚拟环境(例如python3-m venv venv)
- 激活虚拟环境(例如,source venv/bin/Activate)
- 使用pip install pip升级pip–升级
- 用pip安装pg廑chameleon。
- 在mysql上为副本创建一个用户(例如usr_副本)
- 在复制的数据库上授予对usr的访问权限(例如,在sakila上授予ALL.*到“usr_replica”;)
- 向用户授予重新加载权限(例如,将*.*上的重新加载授予“usr_replica”;)
- 向用户授予复制客户端权限(例如,将*.*上的复制客户端授予“usr_replica”;)
- 授予向用户授予复制从机权限(例如,将*.*上的复制从机授予“usr_replica”;)
配置目录
现在正确支持系统范围的安装。
配置是用命令chameleon set_configuration_files在$HOME/.pg_chameleon中设置的。 目录中有三个子目录。
- 配置是存储配置文件的位置
- pid是创建副本pid文件的位置。它可以在配置文件中更改
- 如果log_dest是文件,则logs是保存副本日志的位置。它可以在配置文件中更改
您应该使用config-example.yaml作为其他配置文件的模板。 查看configuration file reference以获得概述。