解决:MySQL Load Data数据丢失问题

MySQL 5.7
MacOS10.12.1
前言
很简单,我得文件里面20w数据,导入MySQL后只剩下16w条数据,无无
排查方法
既然数据丢失了,那把成表后的数据全部导出,然后和原始的数据进行对比验证
select * from db.tableINTO OUTFILE '/usr/local/mysql-5.7.18-macos10.12-x86_64/output/all'
如果无法导出 denly ,这里有一组解决方案
检查 mysqlmysql 是否为None,如果为none,则需要改写配置文件
mysql> SELECT @@secure_file_priv;+---------------------------------------------------+| @@secure_file_priv|+---------------------------------------------------+| None|+---------------------------------------------------+1 row in set (0.00 sec)
停止mysql服务修改f文件,追加-file-priv="/usr/local/mysql/",当然最后的是我自己创建的文件夹,如果没有f文件,请看下面排查问题这里重启mysql服务,进入sql环境
mysql> SELECT @@secure_file_priv;+---------------------------------------------------+| @@secure_file_priv|+---------------------------------------------------+| /usr/local/mysql-5.7.18-macos10.12-x86_64/output/ |+---------------------------------------------------+1 row in set (0.00 sec)# 测试#select xx from xxINTO OUTFILE '/usr/local/mysql-5.7.18-macos10.12-x86_64/output/xx.csv'
如果还是出现问题
Can’t /write to file ‘’ (: 13 -)
解决方案:给自己的路径增加权限: sudo chmod 777
参考:Can’t /write to file ‘/tmp/#.MYI’ (: 13)
如过还是遇到问题:
The MySQLiswith the –-file-privso itthis
参考:MYSQL导出数据出现The MySQLiswith the –-file-privso itthis
排查原因 可能是单个数据太大,导致导入失败
因为MySQL对单个是有限制的,所以如果大于默认值的文件导入会失败,但是我这并没有报错,抱着试一试的心态,,,,果然没有效果呢
解决方案请看
max_allowed_packet=500M
可能是字段内特殊符号
37388xxx|8|在哪裡跌倒,就坐在哪裡玩!"|北京市|东城区|None|None|60|81|40|http://music.163.com/user/fans?id=373xxx
LOAD DATA LOCAL INFILE 'xxxxfile' INTO TABLE db.tableFIELDS TERMINATED BY '|'//行内文本分隔符OPTIONALLY ENCLOSED BY '"'LINES TERMINATED BY '\n';//行结束符
BY “” //字段闭合标签,例如 BY ’ ” ‘,则字段以双引号”“闭合,在双引号内部的字段分隔符都会被忽略
【解决:MySQL Load Data数据丢失问题】简直了!!!这是何等的我曹,这么说来,如果我的其中一个字段中只有一个” ,那我特么以后的分隔符都没用啦!要等到下一个 ” 才能进行分,中间全部被包裹!
多谢→_→LOAD DATA 语句导入数据进入MySQL的一些注意事项
最后
差不多花了半天才找到问题所在,刚开始以为是超出限制了,所以没有导入成功,之后导出数据的时候由是一堆错误,心塞,还好一一解决,这次遇到了数据清洗的问题了,上游数据如果不经过清洗直接导入数据库,这会对下游数据产生很大的影响,切记切记,最后还是要耐心,善用搜索引擎!
致谢
LOAD DATA 语句导入数据进入MySQL的一些注意事项
解决:Mac下mysql配置文件没有f,无法配置f
修改MySQL导入数据文件大小限制的方案