MySQL数据加载命令执行后未保存数据问题求助
问题排查与解决方法
核心现象
脚本执行无报错,执行时select能查询到数据,但退出MySQL会话后目标数据库为空,说明会话内的数据未持久化到磁盘。
可能原因及解决步骤
1. LOAD DATA LOCAL的路径与权限问题
- 替换
LOAD DATA LOCAL INFILE为LOAD DATA INFILE:/var/lib/mysql-files/是MySQL默认的secure_file_priv授权目录,服务器端可直接读取该目录下的文件,无需客户端传输。修改后的SQL语句:load data infile '$CSV_FILENAME' into table BagEvent fields terminated by ','; - 确认建表脚本
sql_csv_test.sql中,BagEvent表是创建在csv_test库下:要么在use $NEW_DB_NAME;之后执行建表语句,要么建表时显式指定csv_test.BagEvent。
2. 事务未提交
- 检查
sql_csv_test.sql是否包含START TRANSACTION;或BEGIN;但未执行COMMIT;。如果有,在脚本的load data语句后添加提交命令:commit; - 若不确定事务状态,可显式控制自动提交:
set autocommit=0; source $SCHEMA_FILENAME; load data infile '$CSV_FILENAME' into table BagEvent fields terminated by ','; commit; set autocommit=1;
3. 数据库上下文切换异常
- 确保
sql_csv_test.sql中没有切换到其他数据库的语句(如use other_db;)。若无法修改该脚本,可在load data语句中显式指定数据库前缀:load data infile '$CSV_FILENAME' into table $NEW_DB_NAME.BagEvent fields terminated by ',';
4. 排查隐藏错误
- 在脚本中添加当前数据库检查语句,确认操作上下文正确:
select database(); -- 输出应为csv_test - 将脚本执行日志保存到文件,查看是否有未察觉的警告或错误:
修改脚本的MySQL执行部分:
查看mysql -u root -v << QUERY > load_data.log 2>&1load_data.log文件,分析细节输出。
内容的提问来源于stack exchange,提问作者elaner
相关产品推荐
相关产品推荐

