[英]Perl and MySQL Inserting an XML string causes error 2006 “server gone away”
我試圖將XML字符串插入此表中:
創建表
producto_xml
(Id
int(11)unsigned NOT NULLFechaDescarga
',FechaDescarga
datetime NOT NULL,XML
FechaDescarga
,
主鍵(Id
),約束producto_xml_ibfk_1
刪除級聯上的外鍵(Id
)參考producto
(Id
)ENGINE = InnoDB DEFAULT CHARSET = utf8 ROW_FORMAT = COMPRESSED
這是我的腳本:
#!/usr/bin/perl
use strict;
use DBI;
use XML::LibXML;
my $xmlfilename = 'E:/localhost/erp/XMLs/TPT/BigFile.xml';
my $MyDB = 'XXXXX';
my $MyHOST = 'localhost';
my $MyUSR = 'XXXXX';
my $MyPASS = 'XXXXX';
my $dbh = DBI->connect("DBI:mysql:$MyDB:$MyHOST",$MyUSR,$MyPASS, { AutoCommit => 1, RaiseError => 0, PrintError => 0 } ) or &ErrHandle('MySQL: connecting to DB.');
$dbh->do('SET NAMES utf8');
my $max_allowed_packet = ((1024*1024)*15);#15 mb
$dbh ->do('SET @max_allowed_packet='.$max_allowed_packet);
my $parser = XML::LibXML->new();
my $doc;
eval { $doc = $parser->parse_file($xmlfilename);};
if ($@){ &ErrHandle('XML Parser: Incorrect XML File');}
print 'File length: ' . length($doc->toString(0)) . "\n";
my $St = 'INSERT INTO producto_xml (XML, FechaDescarga, Id) VALUES (?,NOW(), ?) ON DUPLICATE KEY UPDATE XML=VALUES(XML), FechaDescarga=NOW()';
my $Sth =$dbh->prepare($St);
$Sth->execute(
$doc->toString(0)
,1780
);
if ($dbh->{'mysql_errno'} > 0) { &ErrHandle('MySQL: ' . $dbh->{'mysql_errno'} . ': ' . $dbh->{'mysql_error'}); }
print $dbh->{'mysql_insertid'} ."\n";
print $Sth->rows;
exit;
sub ErrHandle {
my $Err = shift;
print 'ERROR: ' . $Err;
exit;
}
文件“ BigFile.xml”約為1.2 Mb,無論我嘗試什么,我都會遇到此錯誤:
File length: 1207951
ERROR: MySQL: 2006: MySQL server has gone away
我嘗試過:
我使用相同的腳本從大約300 Kb中插入文件。 沒有問題。
我將不勝感激。
恩里克
正如AKHolland所暗示的,應在服務器端設置max_allowed_packet
。 此外,如果我沒有記錯的話,更改此參數需要重新啟動mysqld
。
有關如何更改max_allowed_packet
更改my.ini/my.cnf
文件。 在文件的[mysqld]
下包含單行
max_allowed_packet=500M
現在,一旦完成,請重新啟動MySQL
服務。 您可以在mysql中看到它的當前值,如下所示:
SHOW VARIABLES LIKE 'max_allowed_packet'
您可以在這里閱讀有關它的信息http://dev.mysql.com/doc/refman/5.1/en/packet-too-large.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.