首页 > 数据库 >数据库迁移系列】从MySQL到openGauss的数据库对象迁移实践

数据库迁移系列】从MySQL到openGauss的数据库对象迁移实践

时间:2023-08-05 15:32:21浏览次数:46  
标签:chameleon -- 数据库 MySQL replica mysql 迁移 openGauss

数据库迁移系列】从MySQL到openGauss的数据库对象迁移实践

原创 酷哥 [openGauss](javascript:void(0);) 2022-11-07 18:03 发表于广东

9月30日新发布的openGauss 3.1.0版本 ,工具的全量迁移和增量迁移的性能不但有了全面提升,而且支持数据库对象视图、触发器、自定义函数、存储过程的迁移。

  • 工具链:MySQL全量迁移支持并行迁移,提升全量迁移性能
    通过支持表级并行迁移,提升MySQL全量迁移性能,基于sysbench测试模型,在Kunpeng-920 2p服务器上,10张表(单表容量三百万以上)使用10并发迁移,可达到大于300M/s的迁移性能。
  • 工具链:MySQL增量迁移支持十五级并行消费,提升增量迁移性能
    基于开源三方件mysql-binlog-connector-java解析mysql的binlog, 并根据mysql主备进行复制的原理,对可并行的事务在openGauss端采用多线程进行并行回放,以实现MySQL到openGauss的在线迁移。
    利用sysbench对MySQL压测,在10张表30个线程并发情况下,IUD混合场景下,在Kunpeng-920 2p服务器上测试整体增量迁移性能可达3w tps.
  • 工具链:支持基于默克尔树的数据校
    实现基于默克尔树的数据实时校验工具,支持MySQL数据迁移到openGauss时,源端与目的端数据全量和增量校验。

本篇就来分享一下使用chameleon工具进行从MySQL到openGauss的数据库对象迁移实践。

软件安装

  1. 由于我之前已经安装过3.0版本的工具了,需要先卸载一下。
[root@pekphisprb70593 chameleon]# pip3 uninstall chameleon
Uninstalling chameleon-3.0.0:
Would remove:
/usr/local/python3/bin/chameleon
/usr/local/python3/bin/chameleon.py
/usr/local/python3/lib/python3.6/site-packages/chameleon-3.0.0.dist-info/*
/usr/local/python3/lib/python3.6/site-packages/pg_chameleon/*
Proceed (y/n)? y
Successfully uninstalled chameleon-3.0.0
[root@pekphisprb70593 chameleon]# rm -rf chameleon-3.0.0-py3-none-any.whl

2.从官网https://opengauss.org/zh/supporttools.html 获取获取工具包:chameleon-3.1.0-py3-none-any.whl

数据库迁移系列】从MySQL到openGauss的数据库对象迁移实践_MySQL

3.将新的3.1.0工具上传到openGauss数据库所在节点的chameleon文件夹下。

[root@pekphisprb70593 chameleon]# python3 -m venv venv
[root@pekphisprb70593 chameleon]# source venv/bin/activate
(venv) [root@pekphisprb70593 chameleon]# pip3 install ./chameleon-3.1.0-py3-none-any.whl

最后提示“Successfully installed chameleon-3.1.0”说明安装成功。

  1. 设置配置文件。这里继续使用之前已经配置好的 default.yml.

切换到omm 用户进行操作。

(venv) [root@pekphisprb70593 chameleon]# su - omm
Last login: Tue Oct 25 16:24:30 CST 2022 on pts/0
[omm@pekphisprb70593 ~]$ cd /opt/software/chameleon/
[omm@pekphisprb70593 chameleon]$ python3 -m venv venv
[omm@pekphisprb70593 chameleon]$ source venv/bin/activate
(venv) [omm@pekphisprb70593 chameleon]$  chameleon set_configuration_files
updating configuration example with /home/omm/.pg_chameleon/configuration//config-example.yml

数据库对象迁移测试

初始化迁移过程

(venv) [omm@pekphisprb70593 chameleon]$ chameleon create_replica_schema --config default
(venv) [omm@pekphisprb70593 chameleon]$ chameleon add_source --config default --source mysql

除了基础数据同步,chameleon还支持将视图、触发器、自定义函数、存储过程从MySQL迁移到openGauss。以下四个命令无先后之分。若不想日志输出到控制台,可去掉--debug参数。

复制视图:

chameleon start_view_replica --config default --source mysql --debug

复制触发器:

chameleon start_trigger_replica --config default --source mysql --debug

复制自定义函数:

chameleon start_func_replica --config default --source mysql --debug

复制存储过程:

chameleon start_proc_replica --config default --source mysql --debug

此外,工具还提供了可以在对象迁移信息表sch_chameleon.t_replica_object中查看迁移对象的记录能力。下表展示了t_replica_object表的字段说明。

字段

类型

描述

i_id_object

bigint

id

i_id_source

bigint

与sch_schema.t_sources的id相对应

en_object_type

枚举类型

迁移对象所属类型(VIEW/TRIGGER/FUNC/PROC)

ts_created

timestamp with time zone

迁移时间

b_status

boolean

迁移状态。true表示迁移成功,false表示迁移失败

t_src_object_sql

text

原始sql语句

t_dst_object_sql

text

翻译后的语句。若无法翻译或者翻译出现error的情况为空;openGauss不支持的字段被注释

视图迁移

  1. mysql 构造视图数据。
mysql> create view test1_view as
-> select * from test1 where id=1;
Query OK, 0 rows affected (0.01 sec)
mysql> select * from test1_view;

数据库迁移系列】从MySQL到openGauss的数据库对象迁移实践_python_02

  1. 工具执行视图迁移命令

chameleon start_view_replica --config default --source mysql --debug

数据库迁移系列】从MySQL到openGauss的数据库对象迁移实践_python_03

3.在openGauss侧查询视图,迁移成功。注意查询的时候需要携带schema:mysql_db1_sch,视图名称和mysql 中定义的一致,都是test1_view。

数据库迁移系列】从MySQL到openGauss的数据库对象迁移实践_MySQL_04

触发器迁移

1.mysql 构造如下触发器:每删除一条test1中的数据,就向test2表中插入一条记录。

DELIMITER //
CREATE TRIGGER del_log
AFTER DELETE
ON test1
FOR EACH ROW
BEGIN
INSERT INTO test2(id,name) VALUES (old.id,concat("delete record:",old.name));
END; //

2.工具执行命令,成功

chameleon start_trigger_replica --config default --source mysql --debug

数据库迁移系列】从MySQL到openGauss的数据库对象迁移实践_python_05

3.openGauss侧测试触发器

从测试结果来看,触发器是直接生效的,test2中已经成功插入了数据。

数据库迁移系列】从MySQL到openGauss的数据库对象迁移实践_mysql_06

数据库迁移系列】从MySQL到openGauss的数据库对象迁移实践_MySQL_07

自定义函数迁移

  1. 在MySQL侧构造了两个简单的函数。
DELIMITER // 
create function mysql_func2(x smallint unsigned, y smallint unsigned) returns smallint deterministic 
BEGIN 
DECLARE a, b SMALLINT UNSIGNED DEFAULT 10; 
SET  a = x, b = y; 
RETURN a+b; 
END; // 
 
create function mysql_func1(s char(20)) 
returns char(50) deterministic 
return concat('mysql_func1, ',s,'!')//
  1. 启动迁移操作,如下图所示,总共两个,成功两个。

chameleon start_func_replica --config default --source mysql --debug

数据库迁移系列】从MySQL到openGauss的数据库对象迁移实践_python_08

  1. openGauss侧直接测试函数调用,也是OK的。注意携带schema。

数据库迁移系列】从MySQL到openGauss的数据库对象迁移实践_MySQL_09

存储过程迁移

  1. 在MySQL侧构造了一个简单的存储过程。
DELIMITER //
CREATE PROCEDURE mysql_sp(IN x SMALLINT ,IN y SMALLINT ,OUT sum int)
BEGIN
SET  sum = x + y;
END //
DELIMITER ;
  1. 工具侧执行迁移,提示总共一个,成功一个。

chameleon start_proc_replica --config default --source mysql --debug

数据库迁移系列】从MySQL到openGauss的数据库对象迁移实践_python_10

3.openGauss直接测试调用,也是OK的。

数据库迁移系列】从MySQL到openGauss的数据库对象迁移实践_MySQL_11

Q&A

1、迁移数据库对象过程中报类似错误“‘replica_engine’ object has no attribute ”

(venv) [omm@pekphisprb70593 configuration]$ chameleon start_func_replica --config default --source mysql --debug
Traceback (most recent call last):
File "/opt/software/chameleon/venv/bin/chameleon", line 5, in <module>
exec(compile(open(__file__).read(), __file__, 'exec'))
File "/opt/software/chameleon/venv/bin/chameleon.py", line 58, in <module>
getattr(replica, args.command)()
AttributeError: 'replica_engine' object has no attribute 'start_func_replica'

这个错误的话是工具3.0.0之前版本还不支持 ,请确认工具版本是3.1.0。

2、迁移触发器限制

create table test1_log(id int not null auto_increment,operation varchar(200) ,oper_time date, primary key (id));
DELIMITER //
CREATE TRIGGER del_write_log
AFTER DELETE
ON test1
FOR EACH ROW
BEGIN
set @t_name = old.name;
INSERT INTO test1_log(operation,oper_time) VALUES (concat("delete record:",@t_name),NOW());
END; //

工具执行迁移命令 ,结果失败了。

2022-10-26 14:37:56 MainProcess ERROR mysql_lib.py (1845): 2022-10-26 02:37:56.294 [main] ERROR org.opengauss.sqltranslator.dialect.mysql.MySqlToOpenGaussOutputVisitor - openGauss does not support set @T_NAME,trigger name is del_write_log
2022-10-26 14:37:56 MainProcess ERROR mysql_lib.py (1845): 2022-10-26 02:37:56.295 [main] ERROR org.opengauss.sqltranslator.dialect.mysql.MySqlToOpenGaussOutputVisitor - openGauss does not support variable started with @,trigger name is del_write_log

openGauss不支持这种变量名加@,因此,实际迁移前需要仔细查看工具使用约束。

标签:chameleon,--,数据库,MySQL,replica,mysql,迁移,openGauss
From: https://blog.51cto.com/u_16191492/6975990

相关文章

  • Docker-Compose 一键部署mysql及初始化sql脚本
    1.部署前提:服务器具备docker和docker-compose环境2.镜像准备:-mysql:DockerFile文件:FROMmysql:5.7.41COPY*.sql/docker-entrypoint-initdb.d/初始化sql脚本xxx.sql放在DockerFile文件同级目录下执行指令:dockerbuild-fdockerfile_mysql-tmysql:1.0.0.......
  • MySql之锁
    MySql之锁一、全局锁对整个数据库加锁应用:数据库所有表备份二、表级锁1.表锁分为两类:表共享读锁readlock表独占写锁writelock2.元数据锁避免DML语句和DDL语句的冲突问题3.意向锁:作用:针对行锁和表锁,当表中有行锁时,会同时加一把意向锁,表锁不用去逐行遍历是否加了行锁,......
  • 最简单的Qt连接MYSQL的方法
    最简单的Qt连接MYSQL的方法⭐当我试图在项目中连接本地的mysql时,反复出现:QMYSQLdrivernotloaded,显示没有成功加载mysql的驱动,在网上查询了很多教程和视频,大多为互相转载且老旧,耗费了大半天还是没有构建成功,通常的解决方法是在本地构建mysql驱动(通过安装qt时勾选的src选项里......
  • MySQL之InnoDB存储结构 转载 https://juejin.cn/post/7253816086679846972
    1InnoDB存储引擎InnoDB存储引擎最早由InnobaseOy公司开发(属第三方存储引擎)。从MySQL5.5版本开始作为表的默认存储引擎。该存储引擎是第一个完整支持ACID事务的MySQL存储引擎,特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读,非常适合OLTP场景的应用使用。目前也是应用......
  • MySQL查询排序和分页
    连接数据库mysql-hlocalhost-uroot-proot排序查询语法:select字段列表from表名orderby字段1排序方式1,字段3排序方式2,字段3排序方式3,....;ASC:升序(默认值)DESC降序注意:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。根据年龄对公司......
  • MySQL内存使用排查
    MySQL使用内存上升90%!在运维过程中50%的几率,会碰到这样的问题。算是比较普遍的现象。MySQL内存使用率过高,有诸多原因。普遍原因是使用不当,还有MySQL本身缺陷导致的。到底是哪方面的问题,那就需要一个一个进行排查。下面介绍排查思路:1.参数配置需要确认,内存是否设置合理MySQL内......
  • C#数据库连接配置文件存放至App.Config
    目录使用VisualStudio使用Rider 安装Nuget包获取配置连接数据库使用VisualStudio在需要添加配置文件的类右键-添加-新建项 选择应用配置文件,注意名称有格式要求 使用vs生成的话初始化代码是有的,然后输入的时候是有提示的使用Rider右键需要添加配置文件的项目,Add-File 使用Ri......
  • mysql 命令安装
    1.  mysql 下载安装好压缩文件,下面我们进入正题,少废话。09:39:112023-08-05先到mysql官方网站下载:https://dev.mysql.com/downloads/mysql/ 解压后为这样 执行这个代码mysqld--initialize--console后面出现密码自己保存一下  然后继续安装m......
  • SQL SERVER数据库日志清理
    新建查询,选择master数据库USE[master]GOALTERDATABASEblogSETRECOVERYSIMPLEWITHNO_WAIT----blog为需要清除日志的数据库名称GOALTERDATABASEblogSETRECOVERYSIMPLE--简单模式----blog为需要清除日志的数据库名称GOUSEblo......
  • CentOS7 systemctl 管理MySQL服务
    #在/usr/lib/systemd/system/路径下创建mysql.service]#vim/usr/lib/systemd/system/mysql.service[Unit]Description=MySQLserverAfter=syslog.targetnetwork.target[Service]User=mysqlGroup=mysqlType=forkingTimeoutSec=0#PermissionsStartOnly=trueExecStar......