300M级mysql数据库跨版本迁移流程

还是公司要更换服务器,所以要把数据库迁移到新的服务器上,导出的sql文件大小在300M左右,说大不大说小不小,但是使用常规的迁移操作会出现各式各样的错误,最终经过种种试错,找到了完美的解决方案。

在继续下文前,对服务器进行统一标注,老的服务器为A(mysql版本5.6),本地服务器为B(mysql版本5.7),新的服务器为C(mysql版本8.0)

方案1:

从A导出数据库文件,然后将文件拷贝到本地服务器B,在B上远程连接到C的数据库,然后进行导入操作,在经过漫长的等待后,出现了报错,报错为:1041 Out of memory; check if mysqld or some other process uses all available和mysql报错,根据报错内容大概意思是mysql进程超过了可用内存,还有mysql插入语句的报错,这种方案基本可以pass

方案2:

把数据库文件打开,复制mysql语句,然后连接C的数据库进行新建查询,以手动执行的方式进行导入,发现经过一段时间等待后依然是报错:不过没有了1041报错,而是sql语句报错,为什么会报错呢,因为通过navicat新建查询,有mysql代码行数限制,虽然我们粘贴过去的是全部代码,但会直接被截取到指定行,这样就导致了报错,方案pass

方案3:

既然navivat有代码量限制,那么换个连接工具呢,在C服务器上安装phpmyadmin,重复方案2的内容,发现依然存在同样的问题,无法完全手动执行代码,尝试导入数据库压缩文件,发现最大只能为50M,放弃,方案pass

方案4:

导入文件报错,手动执行不能全部执行,那我们复制粘贴表呢,在B上同时连接到A和C,然后先全部选择A的数据库所有表,然后点击复制,再打开C的数据库,点击粘贴,等过很久很久,发现卡到5%上,直接给卡死,关闭navicat都关闭不掉(这里怀疑是mysql5.7失去链接的原因),当然还是一样走不通

最终方案:

和方案4内容一样,只不过是在A上操作,就是在A上使用navicat连接到C的数据库,然后执行复制粘贴操作,进度条一直在增加,并且最终执行100%,完成了数据库的迁移,但是发现执行完后,对比原来的数据库发现少了70多个表,应该复制的是384个,但是实际只有310多个,难道是复制粘贴也有数量限制吗,不管了,被这个搞得头晕脑大了,直接对比发现差异表,再次复制粘贴,妥妥的从1%到100%,到此把所有的数据表成功从A迁移到C。

总结:

在迁移300M的数据库文件时,我们要使用被迁移的数据库服务器去连接最终服务器,然后使用复制粘贴的方法进行迁移,这样才能达到最好的稳定性,而不至于出现不可思议的错误,这次的三个服务器数据库版本都不一样,如果B的版本和A的版本一致,那么是不是使用方案1就可以成功了呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值