【数据库迁移系列】从MySQL到openGauss的数据库对象迁移实践
在之前这一篇中我们分享过使用chameleon工具完成MySQL到openGauss的全量数据复制、实时在线复制。9.30新发布的openGauss 3.1.0版本 ,工具的全量迁移和增量迁移的性能不但有了全面提升,而且支持数据库对象视图、触发器、自定义函数、存储过程的迁移。
本篇就来分享一下使用chameleon工具进行从MySQL到openGauss的数据库对象迁移。
文章目录: 软件安装 数据库对象迁移测试 初始化迁移过程 视图迁移 触发器迁移 自定义函数迁移 存储过程迁移 Q&A
软件安装 由于我之前已经安装过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
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”说明安装成功。 4. 设置配置文件。这里继续使用之前已经配置好的 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表的字段说明。
工具执行视图迁移命令 chameleon start_view_replica --config default --source mysql --debug
3.在openGauss侧查询视图,迁移成功。注意查询的时候需要携带schema: mysql_db1_sch,视图名称和mysql 中定义的一致,都是test1_view。
触发器迁移 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
openGauss侧测试触发器 从测试结果来看,触发器是直接生效的,test2中已经成功插入了数据。
自定义函数迁移 在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
openGauss侧直接测试函数调用,也是OK的。注意携带schema。
存储过程迁移 在MySQL侧构造了一个简单的存储过程。 DELIMITER // CREATE PROCEDURE mysql_sp(IN x SMALLINT ,IN y SMALLINT ,OUT sum int) BEGIN SET sum = x + y; END // DELIMITER ;
2.工具侧执行迁移,提示总共一个,成功一个。
chameleon start_proc_replica --config default --source mysql --debug
3.openGauss直接测试调用,也是OK的。
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不支持这种变量名加@,因此,实际迁移前需要仔细查看工具使用约束。
🍒如果您觉得博主的文章还不错或者有帮助的话,请关注一下博主,如果三连点赞评论收藏就更好啦!谢谢各位大佬给予的支持!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
万字详解JVM,让你一文吃透
摘要:本文将带大家详细地了解关于JVM的一些知识点。 本文分享自华为云社区《【JVM】关于JVM,你需要掌握这些 | 一文彻底吃透JVM系列》,作者: 冰 河 。 JDK 是什么? JDK 是用于支持 Java 程序开发的最小环境。 Java 程序设计语言 Java 虚拟机 Java API类库 JRE 是什么? JRE 是支持 Java 程序运行的标准环境。 Java SE API 子集 Java 虚拟机 Java历史版本的特性? Java Version SE 5.0 引入泛型; 增强循环,可以使用迭代方式; 自动装箱与自动拆箱; 类型安全的枚举; 可变参数; 静态引入; 元数据(注解); 引入Instrumentation。 Java Version SE 6 支持脚本语言; 引入JDBC 4.0 API; 引入Java Compiler API; 可插拔注解; 增加对Native PKI(Public Key Infrastructure)、Java GSS(Generic Security Service)、Kerberos和LDAP(Lightweight Director...
- 下一篇
layui-vue 1.7.5 发布,一个 Vue 3 UI 框架
更新内容: [新增] button 按钮 active 效果。 [新增] input 组件 max 与 min 属性, 用于控制 number 类型下手动输入值的范围。 [修复] textarea 组件边框 hover 状态颜色和其它 form 系列组件不一样的问题。 [修复] tag-input 组件获取焦点与 hover 状态和其它 form 系列组件不一样的问题。 [修复] upload 组件多次上传同一文件时,除了第一次都无法正常触发到@before和@done 事件。 [修复] select 组件 slots 无法正常解决注释的问题。 [修复] tab 组件 slots 无法正常解决注释与 v-if 的问题。 [修复] select 单选模式和多选模式, 鼠标悬停时边框颜色不一样的问题。 [修复] textarea 双向绑定在拼字时触发更新的问题。 [修复] input-number 组件 disabled-input 属性开启时,点击减号无效。 [修复] input-number 的 min 和 max 属性在手动输入值的场景下无效。 [修复] button 组件 disa...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19