今天我使用一个简单的Java应用程序将大型数据加载到MySQL DB中,并在下面出现错误:
java.sql.SQLException:来自服务器的语法错误或访问冲突消息:“内存耗尽''Q1',2.34652631E10,'000','000',5.0519608E9,5.8128358E9,'000','000 ',8.2756818E9,2'在第5332行“
我试图修改my.ini文件以增加一些点,但它根本不起作用,实际上文件的大小不是那么大,它只是一个14mb xls文件,几乎耗尽了想法等待任何建议。感谢您的帮助!
答案 0 :(得分:1)
(没有你的代码的相关部分,我只能猜测,但在这里我们去...)
从错误消息中,我将在黑暗中拍摄并猜测您正在尝试在单个查询中加载所有300,000行,这可能是通过连接一大堆INSERT
语句产生的。单个字符串。当翻译成SQL语句并且您的服务器内存试图解析查询时,14MB XLS文件可能变得很多。
要解决此问题(按优先顺序排列):
将您的文件转换为CSV并使用mysqlimport。
将您的文件转换为CSV并使用LOAD DATA INFILE
。
使用中等大小的多个事务,每个事务只有几千INSERT
个语句。如果您不能简单地导入文件,则建议使用此选项。
使用单个事务 - InnoDB MySQL数据库should handle transaction sizes in this size range。