Portál AbcLinuxu, 26. dubna 2024 18:42


Dotaz: mysql a velke data

29.11.2007 14:14 peter
mysql a velke data
Přečteno: 835×
Odpovědět | Admin
Ahoj, mam nasledujuci problem, ked chcem ulozit cca 25M do databazy vypise mi mysql hlasku "ERROR 1153 (08S01) at line 1: Got a packet bigger than 'max_allowed_packet' bytes". nevie niekto ako by som nacital data z suboru po kuskoch a ulozil do db ? Dik.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

29.11.2007 15:47 hates | skóre: 30 | blog: Jak_jsem_se_dostal_k_linuxu
Rozbalit Rozbalit vše Re: mysql a velke data
Odpovědět | | Sbalit | Link | Blokovat | Admin
jaky typ bunky na to pouzivate ??? takovehle velke soubory je ale etrosku prasaarna rvat do MySQL. radsi bych je valil nekde na disk a pokud je k nim potreba pristupovat tak jejich jmeno bych ulozil do DB a nacital jinak primo z disku. bude to i rychlejsi.
osladil avatar 29.11.2007 16:04 osladil | skóre: 12
Rozbalit Rozbalit vše Re: mysql a velke data
Odpovědět | | Sbalit | Link | Blokovat | Admin
Videl bych to na nasledujici vychozi nastaveni /etc/mysql/my.conf

[mysql]

max_allowed_packet = 16M
osladil avatar 29.11.2007 16:04 osladil | skóre: 12
Rozbalit Rozbalit vše Re: mysql a velke data
ups, resp. [mysqld] :-)
29.11.2007 16:18 Jirka Chráska
Rozbalit Rozbalit vše Re: mysql a velke data
Odpovědět | | Sbalit | Link | Blokovat | Admin
Dobrý den,
v /etc/mysql/my.cnf v sekci [mysql] dejte max_allowed_packet=32M a restartuje mysql.
Načítání souborů po kouskách a ukládání do blobů je samozřejmě lepší. Ideální velikost kousku je 65535 bytů.
Při ukládání fotek do mysql jsem to řešil takto: Tabulka pro popis fotek
create table foto ( 
id integer not null auto_increment primary key, 
datatype varchar(60), 
name varchar(120), 
size bigint unsigned not null default 0, 
filedate datetime, 
width integer not null default 0, 
height integer not null default 0, 
popis varchar(255), 
blblabla...
);
Tabulka pro vlastni data
create table fotodata (
id integer not null default 0 auto_increment primary_key,
id_foto integer not null,
filedata blob
);
id_foto odkazuje na id v tabulce foto. Potom jsem ukládal v PHP asi takto:
function save_image($filename,$id_foto)
{
GLOBAL $dblink;
$err = '0';

    if( file_exists($filename) ) {
	// zjisteni velikosti
	list( $width, $height, $type, $attr) = getimagesize($filename);
	$size = filesize($filename);
	$update_file = "UPDATE foto SET size=$size, width=$width, height=$height WHERE id=$id_foto";
	if( ! mysql_query($update_file,$dblink) ) {
	    $err = "Chyba update_file_info";
	    return $err;
	    }
	$delete_filedata = "DELETE FROM fotodata WHERE id_foto=$id_foto";
	if( ! mysql_query($delete_filedata,$dblink) ) {
	    $err = "Chyba delete_file_data";
	    return $err;
	    }
	    
	$fp = fopen($filename, "rb");
	while( !feof($fp) ) {
	    $bindata = addslashes(fread($fp,65535));
	    $insert_data = "INSERT INTO fotodata (id_foto,filedata) VALUES ($id_foto,'$bindata')";
	    if( !mysql_query($insert_data,$dblink) ) {
		$err = "Chyba pri vkladani dat souboru.";
		return $err;
		}
	    }
	fclose($fp);
	}
    else {
	$err = "Soubor $filename neexistuje";
	}
return $err;
}
29.11.2007 19:35 tomas
Rozbalit Rozbalit vše Re: mysql a velke data
Odpovědět | | Sbalit | Link | Blokovat | Admin
no skor som myslel nieco ako LOAD DATA INFILE, nepojde to cez toto bez toho aby som zvysoval max_allowed_packet, pretoze k tomu nemam pristup!.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.