使用CSV导入MySQL RDS表仅部分记录成功的根因排查
排查MySQL RDS CSV导入不完整的步骤
1. 对比目标表结构与约束差异
- 检查两台RDS实例的目标表定义是否完全一致:包括字段类型、长度、非空约束、主键/唯一键规则,执行
SHOW CREATE TABLE your_table_name;对比输出结果。若失败实例的表存在更严格的约束(如字段长度更短、非空字段在CSV中有空值),会导致对应行导入失败被跳过。 - 确认失败实例的表是否存在自定义
INSERT触发器,部分触发器逻辑可能会过滤或拦截插入请求,导致数据未实际写入表中。
2. 查看导入相关的日志与警告
- 登录AWS控制台,在失败的RDS实例详情页的「日志」选项卡中下载或查看
error.log,导入向导显示“成功”仅代表无致命中断,但大量跳过的记录会在日志中留下具体原因(如数据类型不匹配、违反唯一性约束等)。 - 导入完成后立即在MySQL客户端执行
SHOW WARNINGS;,可获取最近的导入警告信息,定位具体的行或字段问题。
3. 验证CSV文件的完整性与格式
- 确认两台实例使用的是完全相同的CSV文件:对比文件大小、MD5哈希值,避免文件传输过程中损坏或部分缺失。
- 检查CSV第559行及后续内容:用
sed -n '559,565p' your_file.csv命令查看该段数据,确认是否存在未转义的换行符、特殊字符、分隔符不一致(如部分行用分号替代逗号)等格式问题。 - 检查CSV编码与数据库字符集是否兼容:若CSV是UTF-8带BOM格式,而失败实例的数据库字符集为
latin1,可能导致部分行解析失败。
4. 检查RDS实例的参数与资源限制
- 对比两台实例的参数组配置:
- 执行
SHOW VARIABLES LIKE 'max_allowed_packet';,若失败实例的该值过小,会导致包含大字段的行被截断或跳过。 - 执行
SHOW VARIABLES LIKE 'sql_mode';,严格模式(如STRICT_TRANS_TABLES)下,数据不匹配会直接拒绝行导入,而宽松模式可能仅警告。
- 执行
- 查看RDS监控指标:导入期间的CPU利用率、磁盘IOPS、连接数是否出现瓶颈,资源耗尽可能导致导入过程中断或部分行未处理。
5. 分段导入与手动命令测试
- 将CSV拆分为多个小文件(如每1000行一个文件),逐个导入失败实例,定位到具体哪一段开始出现问题,缩小排查范围。
- 手动执行
LOAD DATA INFILE命令导入CSV,观察返回的影响行数与错误信息:
执行后用LOAD DATA INFILE '/path/to/your/file.csv' INTO TABLE your_table_name FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS; -- 若CSV包含表头SHOW ERRORS;查看具体错误细节。
6. 核对导入向导的配置细节
- 确认两台实例使用的导入向导配置完全一致:是否勾选“忽略表头”、字段映射是否正确、分隔符/引号设置是否匹配、是否启用“跳过错误行”选项,避免因配置差异导致部分行被过滤。
内容的提问来源于stack exchange,提问作者eashwar natarajan
相关产品推荐
相关产品推荐

