网易首页 > 网易号 > 正文 申请入驻

MySQL数据库使用pg_chameleon迁移至openGauss

0
分享至

pg_chameleon介绍

pg_chameleon是一个用Python 3编写的实时复制工具,经过内部适配,目前支持MySQL迁移到openGauss。工具使用mysql-replication库从MySQL中提取row images,这些row images将以jsonb格式被存储到openGauss中。在openGauss中会执行一个pl/pgsql函数,解码jsonb并将更改重演到openGauss。同时,工具通过一次初始化配置,使用只读模式,将MySQL的全量数据拉取到openGauss,使得该工具提供了初始全量数据的复制以及后续增量数据的实时在线复制功能。pg_chameleon的特色包括:

  • 通过读取MySQL的binlog,提供实时在线复制的功能。
  • 支持从多个MySQL schema读取数据,并将其恢复到目标openGauss数据库中。源schema和目标schema可以使用不同的名称。
  • 通过守护进程实现实时复制,包含两个子进程,一个负责读取MySQL侧的日志,一个负责在openGauss侧重演变更。

使用pg_chameleon将MySQL数据库迁移至openGauss,通过pg_chameleon的实时复制能力,可以大大降低系统切换数据库时的停服时间。

pg_chameleon在openGauss上的使用注意事项

  1. pg_chameleon依赖psycopg2,psycopg2内部通过pg_config检查PostgreSQL版本号,限制低版本PostgreSQL使用该驱动。而openGauss的pg_config返回的是openGauss的版本号(当前是 openGauss 2.0.0),会导致该驱动报版本错误,“Psycopg requires PostgreSQL client library (libpq) >= 9.1”。解决方案为通过源码编译使用psycopg2,并去掉源码头文件 psycopg/psycopg.h 中的相关限制。
  2. pg_chameleon通过设置LOCK_TIMEOUT GUC参数限制在PostgreSQL中的等锁的超时时间。openGauss不支持该参数(openGauss支持类似的GUC参数lockwait_timeout,但是需要管理员权限设置)。需要将pg_chameleon源码中的相关设置去掉。
  3. pg_chameleon用到了upsert语法,用来指定发生违反约束时的替换动作。openGauss支持的upsert功能语法与PostgreSQL的语法不同。openGauss的语法是 ON DUPLICATE KEY UPDATE { column_name = { expression | DEFAULT } } [, ...]。PostgreSQL的语法是 ON CONFLICT [ conflict_target ] DO UPDATE SET { column_name = { expression | DEFAULT } }。两者在功能和语法上略有差异。需要修改pg_chameleon源码中相关的upsert语句。
  4. pg_chameleon用到了CREATE SCHEMA IF NOT EXISTS、CREATE INDEX IF NOT EXISTS语法。openGauss不支持SCHEMA和INDEX的IF NOT EXISTS选项。需要修改成先判断SCHEMA和INDEX是否存在,然后再创建的逻辑。
  5. openGauss对于数组的范围选择,使用的是 column_name[start, end] 的方式。而PostgreSQL使用的是 column_name[start : end] 的方式。需要修改pg_chameleon源码中关于数组的范围选择方式。
  6. pg_chameleon使用了继承表(INHERITS)功能,而当前openGauss不支持继承表。需要改写使用到继承表的SQL语句和表。

接下来我们将演示如何使用pg_chameleon迁移MySQL数据库至openGauss。

配置pg_chameleon

pg_chameleon通过~/.pg_chameleon/configuration下的配置文件config-example.yaml定义迁移过程中的各项配置。整个配置文件大约分成四个部分,分别是全局设置、类型重载、目标数据库连接设置、源数据库设置。全局设置主要定义log文件路径、log等级等。类型重载让用户可以自定义类型转换规则,允许用户覆盖已有的默认转换规则。目标数据库连接设置用于配置连接至openGauss的连接参数。源数据库设置定义连接至MySQL的连接参数以及其他复制过程中的可配置项目。

详细的配置项解读,可查看官网的说明:

https://pgchameleon.org/documents_v2/configuration_file.html

下面是一份配置文件示例:

# global settings

pid_dir: '~/.pg_chameleon/pid/'

log_dir: '~/.pg_chameleon/logs/'

log_dest: file

log_level: info

log_days_keep: 10

rollbar_key: ''

rollbar_env: ''

# type_override allows the user to override the default type conversion

# into a different one.

type_override:

"tinyint(1)":

override_to: boolean

override_tables:

- "*"

# postgres destination connection

pg_conn:

host: "1.1.1.1"

port: "5432"

user: "opengauss_test"

password: "password_123"

database: "opengauss_database"

charset: "utf8"

sources:

mysql:

db_conn:

host: "1.1.1.1"

port: "3306"

user: "mysql_test"

password: "password123"

charset: 'utf8'

connect_timeout: 10

schema_mappings:

mysql_database:sch_mysql_database

limit_tables:

skip_tables:

grant_select_to:

- usr_migration

lock_timeout: "120s"

my_server_id: 1

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

keep_existing_schema: No

以上配置文件的含义是,迁移数据时,MySQL侧使用的用户名密码分别是 mysql_test 和 password123。MySQL服务器的IP和port分别是1.1.1.1和3306,待迁移的数据库是mysql_database。

openGauss侧使用的用户名密码分别是 opengauss_test 和 password_123。openGauss服务器的IP和port分别是1.1.1.1和5432,目标数据库是opengauss_database,同时会在opengauss_database下创建sch_mysql_database schema,迁移的表都将位于该schema下。

需要注意的是,这里使用的用户需要有远程连接MySQL和openGauss的权限,以及对应数据库的读写权限。同时对于openGauss,运行pg_chameleon所在的机器需要在openGauss的远程访问白名单中。对于MySQL,用户还需要有RELOAD、REPLICATION CLIENT、REPLICATION SLAVE的权限。

下面开始介绍整个迁移的步骤。

创建用户及database

在openGauss侧创建迁移时需要用到的用户以及database。

在MySQL侧创建迁移时需要用到的用户并赋予相关权限。

开启MySQL的复制功能

修改MySQL的配置文件,一般是/etc/my.cnf或者是 etc/my.cnf.d/ 文件夹下的cnf配置文件。在[mysqld] 配置块下修改如下配置(若没有mysqld配置块,新增即可):

[mysqld]

binlog_format= ROW

log_bin = mysql-bin

server_id = 1

binlog_row_image=FULL

expire_logs_days = 10

修改完毕后需要重启MySQL使配置生效。

运行pg_chameleon进行数据迁移

1. 创建python虚拟环境并激活

python3 -m venv venv

source venv/bin/activate

2. 下载安装psycopg2和pg_chameleon

更新pip:pip install pip --upgrade

将openGauss的 pg_config 工具所在文件夹加入到 $PATH 环境变量中。例如:

export PATH={openGauss-server}/dest/bin:$PATH

下载psycopg2源码(https://github.com/psycopg/psycopg2 ),去掉检查PostgreSQL版本的限制,使用 python setup.py install编译安装。

下载pg_chameleon源码(https://github.com/the4thdoctor/pg_chameleon ),修改前面提到的在openGauss上的问题,使用 python setup.py install编译安装。

3. 创建pg_chameleon配置文件目录

chameleon set_configuration_files

4. 修改pg_chameleon配置文件

cd ~/.pg_chameleon/configuration

cp config-example.yml default.yml

根据实际情况修改 default.yml 文件中的内容。重点修改pg_conn和mysql中的连接配置信息,用户信息,数据库信息,schema映射关系。前面已给出一份配置文件示例供参考。

5. 初始化复制流

chameleon create_replica_schema --config default

chameleon add_source --config default --source mysql

此步骤将在openGauss侧创建用于复制过程的辅助schema和表。

6. 复制基础数据

chameleon init_replica --config default --source mysql

做完此步骤后,将把MySQL当前的全量数据复制到openGauss。

可以在openGauss侧查看全量数据复制后的情况。

7. 开启在线实时复制

chameleon start_replica --config default --source mysql

开启实时复制后,在MySQL侧插入一条数据:

在openGauss侧查看 test_decimal 表的数据:

可以看到新插入的数据在openGauss侧成功被复制过来了。

8. 停止在线复制

chameleon stop_replica --config default --source mysql

chameleon detach_replica --config default --source mysql

chameleon drop_replica_schema --config default

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
危机升级!中国经济保卫战打响!存款大流失?去了不该去的地方?

危机升级!中国经济保卫战打响!存款大流失?去了不该去的地方?

财说得明白
2024-07-01 18:10:08
卢沙野大使的话,为何会让蔡正元破防?失败的人生经历是主因

卢沙野大使的话,为何会让蔡正元破防?失败的人生经历是主因

蓝色海边
2024-07-02 04:38:51
长江武汉段近四年首次达到警戒水位

长江武汉段近四年首次达到警戒水位

财联社
2024-07-02 08:38:21
AI恐怖体操视频腿脚乱飞,LeCun:视频生成模型根本不懂物理

AI恐怖体操视频腿脚乱飞,LeCun:视频生成模型根本不懂物理

量子位
2024-07-01 14:59:02
事发上海虹桥站!知名博主爆料:短途被出租车拒载,直接锁车门加速走了?官方回应:处置

事发上海虹桥站!知名博主爆料:短途被出租车拒载,直接锁车门加速走了?官方回应:处置

上观新闻
2024-07-01 21:58:49
又暴雷!比恒大还多1.14万亿,15万投资者血本无归,进入破产清算

又暴雷!比恒大还多1.14万亿,15万投资者血本无归,进入破产清算

青橘罐头
2024-06-30 13:25:09
跟进张志杰事件:当地医院未明确死因 印羽协甩锅 张姐姐发声质疑

跟进张志杰事件:当地医院未明确死因 印羽协甩锅 张姐姐发声质疑

林小湜体育频道
2024-07-01 12:06:03
Chloe Faye,一张截图火爆全网,无数网友的心中女神

Chloe Faye,一张截图火爆全网,无数网友的心中女神

吃瓜党二号头目
2024-07-01 11:39:11
国外疯传!39岁C罗炸裂了:教科书式过人+颠球摆脱,对手上手拦截

国外疯传!39岁C罗炸裂了:教科书式过人+颠球摆脱,对手上手拦截

侧身凌空斩
2024-07-02 03:40:11
原来这些工作干了是可能会坐牢的!网友分享傻眼,找工作需谨慎啊

原来这些工作干了是可能会坐牢的!网友分享傻眼,找工作需谨慎啊

热闹的河马
2024-06-29 15:06:14
终于明白为什么买车不要发朋友圈了!网友真实分享,果然人心难测

终于明白为什么买车不要发朋友圈了!网友真实分享,果然人心难测

热闹的河马
2024-06-29 16:53:24
停播13年后,《曲苑杂坛》仍被热议:主持人汪文华到底得罪了谁?

停播13年后,《曲苑杂坛》仍被热议:主持人汪文华到底得罪了谁?

青眼财经
2024-06-30 14:53:05
克莱总结:勇士库汤追时代落幕没有对错 分手是尊重彼此更好选择

克莱总结:勇士库汤追时代落幕没有对错 分手是尊重彼此更好选择

醉卧浮生
2024-07-02 08:51:01
红星美凯龙财务负责人杨映武:厦门国资建发股份与红星美凯龙的协同效应正在显现

红星美凯龙财务负责人杨映武:厦门国资建发股份与红星美凯龙的协同效应正在显现

金融界
2024-07-01 14:45:36
组建三巨头!Woj:乔治四年2.12亿顶薪加盟76人!!

组建三巨头!Woj:乔治四年2.12亿顶薪加盟76人!!

直播吧
2024-07-01 15:38:10
中国女排够狠!完全不给蔡斌任何展示机会,宣布最新名单!

中国女排够狠!完全不给蔡斌任何展示机会,宣布最新名单!

娱妮啵啵啊
2024-07-01 23:00:02
Windhorst:我认为德罗赞也在詹姆斯的降薪列表中 还有另外一人

Windhorst:我认为德罗赞也在詹姆斯的降薪列表中 还有另外一人

直播吧
2024-07-02 07:49:12
点球大战3-0!门神3连扑 葡萄牙晋级8强 C罗错失绝杀+加时丢点

点球大战3-0!门神3连扑 葡萄牙晋级8强 C罗错失绝杀+加时丢点

狍子歪解体坛
2024-07-02 05:43:25
人气爆棚!贝林厄姆获多位女网红青睐 英国网红:愿为其做任何事

人气爆棚!贝林厄姆获多位女网红青睐 英国网红:愿为其做任何事

Emily说个球
2024-07-01 17:29:13
眼里只有钱?归化国脚无故缺席中超,年底或离队,球迷:忘恩负义

眼里只有钱?归化国脚无故缺席中超,年底或离队,球迷:忘恩负义

尘语者
2024-07-01 23:27:31
2024-07-02 09:10:45
终南山居
终南山居
分享IT学习知识。
12文章数 0关注度
往期回顾 全部

科技要闻

“5年0息”!特斯拉变相降价

头条要闻

勒庞:法国人民毫不含糊 第二轮投票将是决定性的

头条要闻

勒庞:法国人民毫不含糊 第二轮投票将是决定性的

体育要闻

葡萄牙的神!他拯救C罗拯救葡萄牙

娱乐要闻

今年内娱最大的闹剧,该收场了

财经要闻

酒鬼酒甜蜜素风波后再迎人事变动

汽车要闻

奥迪Q6 e-tron Sportback官图曝光

态度原创

本地
亲子
旅游
数码
公开课

本地新闻

冷知识:东北雪糕才是最早的网红雪糕

亲子要闻

小孩哥总是回头看后面的美女姐姐,看完后又害羞地转过头

旅游要闻

一大巴翻覆致两名中国游客身亡 马来西亚将对涉事旅行社启动调查程序

数码要闻

首发249元!玄派玄熊猫鼠标P1星闪版开售:125μs近乎0延迟

公开课

连中三元是哪三元?

无障碍浏览 进入关怀版