关于mysql数据库导入备份数据报错问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
关于Mysql导入数据报错问题解决方案及问题描述
导入报错问题描述
[Err] 1005 - Can't create table 'jeecg-boot.qrtz_blob_triggers' (errno: 150) [Err] 1146 - Table 'jeecg-boot.sys_announcement' doesn't exist
Error occured at:2019-10-09 10:44:07
Line no.:1033
Error Code: 2006 - MySQL server has gone away
工具:
mysql客户端(Sqlyang),linux服务器的数据库,本地windows 10本地数据库。
问题排查:
1 . 导致sql无法正常导入:因为表中数据类型为(datetime)时间字段的默认值为‘CURRENT_TIMESTAMP’,由于线上和线下数据库版本不同,线上数据不报错,线下数据报错。解决方案:a 去掉默认值(因为线上在表中直接添加数据过程中,依然会报错) b 线上线下统一数据库版本(需要线下自己重新安装高版本数据库)
2 . 导致sql无法正常导入:因为表在创建索引的过程中索引类型引起的。也是由于线上和线下数据库版本不同,线上数据不报错,线下数据报错。解决方案:
a 修改索引类型重新导出源数据(比较可行)
b 线上线下统一数据库版本(需要线下自己重新安装高版本数据库)
3 . 导致sql无法正常导入:因为在库中存在数据类型为text类型的字段,比如文章。因为文章能容长,在导出的数据中是批量插入的语句,所以造成这样的原因一种可能是发送的SQL语句太长,
以致超过了max_allowed_packet的大小,解决方案:如果是这种原因,你只要修改f,加大max_allowed_packet的值即可。还有一种可能是因为某些原因导致超时,比如说程序中获取数据库连接时采用了Singleton的做法,虽然多次连接数据库,但其实使用的都是同一个连接,而且程序中某两次操作数据库的间隔时间超过了wait_timeout(SHOW STATUS能看到此设置),那么就可能出现问题。解决方案:最简单的处理方式就是把wait_timeout改大,当然你也可以在程序里时不时顺手mysql_ping()一下,这样MySQL就知道它不是一个人在战斗。
针对上面的两种解决方案:还可以有一种简单的解决方式,在导出数据过程中,选择取消创建批量插入语句
这样导出来的语句就是每条数据都是单独的一条数据,而非多条数据插入只用一个insert语句。
综上分析即可解决本次项目中出现的数据无法导入问题。