iverycd/oracle_to_mysql

mysql 8.0 迁移求助

Closed this issue · 10 comments

mysql 8.0对主键约束会有判断,如果是在create建表语句中不提供主键指定的,则拒绝执行。

看到原先代码注释段有处理过建表时创建primary key的逻辑,后面改成走统一约束添加的方式了,这个逻辑还可以调整吗?感觉建表时候指定主键是无论5.7,8.0等版本都通用的做法哦。

如果采用当前版本的逻辑,mysql8.0数据库还必须关闭主键检查才能进行迁移,还是有一

1.设计之初是尽可能“原汁原味”的把Oracle表结构适配到MySQL,Oracle拥有的主键、唯一约束会如数在MySQL创建,源表不曾拥有的约束特性也不会在目标创建。
2.目前已在新的release v1.3.21版本增加了参数set session sql_require_primary_key=OFF,这使得即使没有主键也能在MySQL 8数据库内创建
https://github.com/iverycd/oracle_to_mysql/releases/tag/v1.3.21

v1.3.21版本已修复 kay @.***  

------------------ 原始邮件 ------------------ 发件人: "iverycd/oracle_to_mysql" @.>; 发送时间: 2023年3月20日(星期一) 中午1:15 @.>; @.>; 主题: [iverycd/oracle_to_mysql] mysql 8.0 迁移求助 (Issue #3) mysql 8.0对主键约束会有判断,如果是在create建表语句中不提供主键指定的,则拒绝执行。 看到原先代码注释段有处理过建表时创建primary key的逻辑,后面改成走统一约束添加的方式了,这个逻辑还可以调整吗?感觉建表时候指定主键是无论5.7,8.0等版本都通用的做法哦。 如果采用当前版本的逻辑,mysql8.0数据库还必须关闭主键检查才能进行迁移,还是有一 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.Message ID: @.>

感谢!我们最近拉取版本测试发现是可以越过主键检查导入,并且导入结束后,新的会话依然遵从基线可以检查是否由主键。现在遭遇的一个困境是似乎这个工具又恢复了单线程工作模式,这个模式下迁移速度非常缓慢,可以加入多线程并行执行的特性吗?

麻烦看下config文件里split_process是什么值 [oracle] host = 192.168.18.200 port = 1521 user = admin passwd = oracle service_name = orcl split_page_size = 10000 split_process = 1  -->看下这行值多少 kay @.***  

------------------ 原始邮件 ------------------ 发件人: "iverycd/oracle_to_mysql" @.>; 发送时间: 2023年4月7日(星期五) 上午9:37 @.>; @.>;"State @.>; 主题: Re: [iverycd/oracle_to_mysql] mysql 8.0 迁移求助 (Issue #3) v1.3.21版本已修复 kay @.***   … ------------------ 原始邮件 ------------------ 发件人: "iverycd/oracle_to_mysql" @.>; 发送时间: 2023年3月20日(星期一) 中午1:15 @.>; @.>; 主题: [iverycd/oracle_to_mysql] mysql 8.0 迁移求助 (Issue #3) mysql 8.0对主键约束会有判断,如果是在create建表语句中不提供主键指定的,则拒绝执行。 看到原先代码注释段有处理过建表时创建primary key的逻辑,后面改成走统一约束添加的方式了,这个逻辑还可以调整吗?感觉建表时候指定主键是无论5.7,8.0等版本都通用的做法哦。 如果采用当前版本的逻辑,mysql8.0数据库还必须关闭主键检查才能进行迁移,还是有一 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.Message ID: @.> 感谢!我们最近拉取版本测试发现是可以越过主键检查导入,并且导入结束后,新的会话依然遵从基线可以检查是否由主键。现在遭遇的一个困境是似乎这个工具又恢复了单线程工作模式,这个模式下迁移速度非常缓慢,可以加入多线程并行执行的特性吗? — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you modified the open/close state.Message ID: @.***>

看着是 16 啊,是不是算开启多线程了?是与迁移表类型有关吗?clob这类会比较慢?

看着是 16 啊,是不是算开启多线程了?是与迁移表类型有关吗?clob这类会比较慢?

你可以使用-c模式,单独测下某个表,表行数多点,5w行左右,设置下split_process=2,
看下有没有生成多线程id
image

看着是 16 啊,是不是算开启多线程了?是与迁移表类型有关吗?clob这类会比较慢?

你可以使用-c模式,单独测下某个表,表行数多点,5w行左右,设置下split_process=2, 看下有没有生成多线程id image

我们是看到了有不同线程号,那说明是多线程已经生效了?如果1个clob大表做迁移的话,程序内是不是只能1个线程处理,还是可以并行处理?

看着是 16 啊,是不是算开启多线程了?是与迁移表类型有关吗?clob这类会比较慢?

你可以使用-c模式,单独测下某个表,表行数多点,5w行左右,设置下split_process=2, 看下有没有生成多线程id image

我们是看到了有不同线程号,那说明是多线程已经生效了?如果1个clob大表做迁移的话,程序内是不是只能1个线程处理,还是可以并行处理?

是并行处理的,方便的话,麻烦提供下clob表结构的ddl语句

看着是 16 啊,是不是算开启多线程了?是与迁移表类型有关吗?clob这类会比较慢?

你可以使用-c模式,单独测下某个表,表行数多点,5w行左右,设置下split_process=2, 看下有没有生成多线程id image

我们是看到了有不同线程号,那说明是多线程已经生效了?如果1个clob大表做迁移的话,程序内是不是只能1个线程处理,还是可以并行处理?

你单独迁移这个大表,看下源库跟目标数据库的cpu,io,内存,是否达到数据库服务器性能瓶颈,
htop看cpu跟内存占用
iostat -xm 2 222看io性能

看着是 16 啊,是不是算开启多线程了?是与迁移表类型有关吗?clob这类会比较慢?

你可以使用-c模式,单独测下某个表,表行数多点,5w行左右,设置下split_process=2, 看下有没有生成多线程id image

我们是看到了有不同线程号,那说明是多线程已经生效了?如果1个clob大表做迁移的话,程序内是不是只能1个线程处理,还是可以并行处理?

你单独迁移这个大表,看下源库跟目标数据库的cpu,io,内存,是否达到数据库服务器性能瓶颈, htop看cpu跟内存占用 iostat -xm 2 222看io性能

我们后来测试了一下,感觉是oracle数据库内存那边有压力,换了内存比较大的数据库以后,速度就比较能接受了。