我正在尝试使用 phpmyadmin 将 CSV 上传到 mysql 数据库
当我尝试使用缩短版本的数据库时,该过程工作正常,但是当我尝试使用完整数据库时,出现错误:
#2006 - MySQL server has gone away
我的 CSV 中正在运行的部分是:
trans_id,price_paid,date,postcode,property_type,poperty_type_2,hold,add_num,add_flat,add_road,add_area,add_city,add_borough,add_county,add_rand
{33C588EE-BB09-4F6F-BA8C-000312C72B3B},159950,23/05/2014 00:00,SL6 9LX,F,N,L,2,,THE SHAW,COOKHAM,MAIDENHEAD,WINDSOR AND MAIDENHEAD,WINDSOR AND MAIDENHEAD,A
{2C650B8C-57C0-421C-A4A9-00037BDFDCFB},158000,30/05/2014 00:00,NN14 1RJ,T,N,F,4,,MIDLAND COTTAGES,RUSHTON,KETTERING,KETTERING,NORTHAMPTONSHIRE,A
{74FA45D0-CB64-40E1-94C4-00055AEBF72C},470000,30/05/2014 00:00,KT20 5SF,D,N,F,11,,CHAPEL ROAD,,TADWORTH,REIGATE AND BANSTEAD,SURREY,A
{054AB14B-0EED-48FD-B3CD-0005B154A5C3},135000,23/05/2014 00:00,NR27 9AZ,F,N,L,48,,ALBANY COURT,,CROMER,NORTH NORFOLK,NORFOLK,A
{86896E40-68BA-4BA2-8468-0006258B9C41},124995,09/05/2014 00:00,L24 9NA,S,Y,L,131,,ADDENBROOKE DRIVE,SPEKE,LIVERPOOL,LIVERPOOL,MERSEYSIDE,A
{A948BD6F-DD91-4DE9-82D1-0008226FC360},95000,13/06/2014 00:00,HU6 7XE,S,N,F,51,,DOWNFIELD AVENUE,,HULL,CITY OF KINGSTON UPON HULL,CITY OF KINGSTON UPON HULL,A
{7191F69F-7648-4603-9CE7-000882808E16},174000,19/05/2014 00:00,DT5 1HX,T,N,F,2,,LONG ACRE,,PORTLAND,WEYMOUTH AND PORTLAND,DORSET,A
{525BE511-1351-475F-9765-0009645D0B60},328000,11/06/2014 00:00,TW18 2EP,T,N,F,1,,EDGELL ROAD,,STAINES-UPON-THAMES,SPELTHORNE,SURREY,A
我已经尝试过:
将/etc/my.cnf 中的 max_packet=64M
增加到 64M,以及 wait_timeout= 1000
但没有成功。
我还对 php.ini 上的数据包大小限制进行了相同的更改,但没有成功。
如有任何帮助,我们将不胜感激
谢谢
莫
最佳答案
查看 MySQL error #2006 上的文档。我在下面列出了一些更可能的可能性:
- 您遇到了服务器端超时,并且客户端中的自动重新连接被禁用(MYSQL 结构中的重新连接标志等于 0)。
- 如果您向服务器发送的查询不正确或太大,也可能会收到这些错误。如果 mysqld 收到太大或无序的数据包,它会认为客户端出现问题并关闭连接。如果您需要大型查询(例如,如果您正在使用大型 BLOB 列),则可以通过设置服务器的 max_allowed_packet 变量来增加查询限制,该变量的默认值为 1MB。您可能还需要增加客户端的最大数据包大小。有关设置数据包大小的更多信息,请参见第 B.5.2.10 节“数据包太大”。 这可能不是问题,因为您已经完成了建议的解决方案。
- 如果您的客户端版本低于 4.0.8 并且您的服务器版本为 4.0.8 及更高版本(反之亦然),那么如果您发送 16MB 或更大的数据包,您也会丢失连接。
还有一个特定于 Windows 应用程序的错误,因此如果您使用的是 Windows,请检查一下:
- 您使用的是 Windows 客户端,并且服务器在发出命令之前已断开连接(可能是因为 wait_timeout 已过期)。 Windows 上的问题是,在某些情况下,MySQL 在写入到服务器的 TCP/IP 连接时不会从操作系统收到错误,而是在尝试从连接读取答案时收到错误。在MySQL 5.0.19之前,即使MYSQL结构中的重新连接标志等于1,MySQL也不会自动重新连接并重新发出查询,因为它不知道服务器是否收到了原始查询。解决这个问题的方法是,如果自上次查询以来已经过了很长时间(这就是 Connector/ODBC 所做的),则在连接上执行 mysql_ping() ,或者在 mysqld 服务器上设置 wait_timeout 太高,以至于实际上永远不会出现出去。
关于php - MySQL CSV 导入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25473013/