目前想到两种方法:
1,直接将正常数据导出,mysqldump可以有-w (--where)参数
举个例子:
mysqldump --default-character-set=utf8 -hloclahost -uroot -p dbname ewan_test -w "id<=1024" > xxx.sql
-- 将1024改为最后一条正常的数据的id
然后再将这些数据导入。
方法2
(1)只将这个表结构导出(--no-data)
(2)将这个表的数据导出(--no-create-info)
(3)将数据文件分割(split),每次分割一小部分,打开分割后的文件开头看看是否还需要继续分割,就这么依次分割,直到数据正常为止,最后需要改改文件,否则不会不能导入。
这两种方法都需要先将表完整的备份。。
这两个方法都是直接去掉了整部分的数据。如果非法数据和正常的数据是参合在一起的,并且任然想保留参合在里面的正常数据,只能慢慢的过滤删除了。不知道方法一中的where里写正则可以不,我没用过,你可以试试,如果可以的话,条件里加一个判断email的正则,就会把所有email合法的数据导出了。