文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-08-17 12:07

关注

之前这一篇中我们分享过使用chameleon工具完成MySQL到openGauss的全量数据复制、实时在线复制。9.30新发布的openGauss 3.1.0版本 ,工具的全量迁移和增量迁移的性能不但有了全面提升,而且支持数据库对象视图、触发器、自定义函数、存储过程的迁移。
在这里插入图片描述

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

软件安装

  1. 由于我之前已经安装过3.0版本的工具了,需要先卸载一下。
[root@pekphisprb70593 chameleon]# pip3 uninstall chameleonUninstalling 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)? ySuccessfully uninstalled chameleon-3.0.0[root@pekphisprb70593 chameleon]# rm -rf chameleon-3.0.0-py3-none-any.whl

从官网https://opengauss.org/zh/supporttools.html 获取获取工具包,chameleon-3.1.0-py3-none-any.whl
在这里插入图片描述

将新的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”说明安装成功。
4. 设置配置文件。这里继续使用之前已经配置好的 default.yml ,不清楚的小伙伴移步上一篇
切换到omm 用户进行操作。

(venv) [root@pekphisprb70593 chameleon]# su - ommLast 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_filesupdating 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_objectbigintid
i_id_sourcebigint与sch_schema.t_sources的id相对应
en_object_type枚举类型迁移对象所属类型(VIEW/TRIGGER/FUNC/PROC)
ts_createdtimestamp with time zone迁移时间
b_statusboolean迁移状态。true表示迁移成功,false表示迁移失败
t_src_object_sqltext原始sql语句
t_dst_object_sqltext翻译后的语句。若无法翻译或者翻译出现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;

在这里插入图片描述

  1. 工具执行视图迁移命令
    chameleon start_view_replica --config default --source mysql --debug
    在这里插入图片描述

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

触发器迁移

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

DELIMITER //CREATE TRIGGER del_logAFTER DELETEON test1FOR EACH ROWBEGININSERT INTO test2(id,name) VALUES (old.id,concat("delete record:",old.name));END; //

工具执行命令,成功
chameleon start_trigger_replica --config default --source mysql --debug
在这里插入图片描述

  1. openGauss侧测试触发器
    从测试结果来看,触发器是直接生效的,test2中已经成功插入了数据。
    在这里插入图片描述
    在这里插入图片描述

自定义函数迁移

  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,'!')//

启动迁移操作,如下图所示,总共两个,成功两个。
chameleon start_func_replica --config default --source mysql --debug
在这里插入图片描述

  1. openGauss侧直接测试函数调用,也是OK的。注意携带schema。
    在这里插入图片描述

存储过程迁移

  1. 在MySQL侧构造了一个简单的存储过程。
DELIMITER //CREATE PROCEDURE mysql_sp(IN x SMALLINT ,IN y SMALLINT ,OUT sum int)BEGINSET  sum = x + y;END //DELIMITER ;

工具侧执行迁移,提示总共一个,成功一个。

chameleon start_proc_replica --config default --source mysql --debug
在这里插入图片描述

openGauss直接测试调用,也是OK的。
在这里插入图片描述

Q&A

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

(venv) [omm@pekphisprb70593 configuration]$ chameleon start_func_replica --config default --source mysql --debugTraceback (most recent call last):File "/opt/software/chameleon/venv/bin/chameleon", line 5, in exec(compile(open(__file__).read(), __file__, 'exec'))File "/opt/software/chameleon/venv/bin/chameleon.py", line 58, in 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_logAFTER DELETEON test1FOR EACH ROWBEGINset @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_log2022-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不支持这种变量名加@,因此,实际迁移前需要仔细查看工具使用约束。

🍒如果您觉得博主的文章还不错或者有帮助的话,请关注一下博主,如果三连点赞评论收藏就更好啦!谢谢各位大佬给予的支持!

来源地址:https://blog.csdn.net/GaussDB/article/details/127564902

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯