Kom ihåg mig?
Home Menu

Menu


Problem med stor MySQL-fil

 
Ämnesverktyg Visningsalternativ
Oläst 2009-05-02, 17:46 #11
Althalos Althalos är inte uppkopplad
Medlem
 
Reg.datum: Jan 2006
Inlägg: 282
Althalos Althalos är inte uppkopplad
Medlem
 
Reg.datum: Jan 2006
Inlägg: 282
Okej, jag har nu fixat i PHPs inställningar så den accepterar större filer och större posts, för säkerhetsskull. Lyckas med vissa backupfiler men inte med andra. Felmeddelandet är MySQL server gone away, exempel:

Citat:
INSERT INTO `cache_menu` VALUES ('router:', 0x613A3739303A7B733A343A226E6F6465223B613A32363A7B 733A353A227469746C65223B733A373A22436F6E74656E7422 3B733A31333A22706167652063616C6C6261636B223B733A31 373A226E6F64655F706167655F64656661756C74223B733A31 363A2261636365737320617267756D656E7473223B613A313A 7B693A303B733A31343A2261636365737320636F6E74656E74 223B7D733A343A2274797065223B693A343B733A363A226D6F 64756C65223B733A343A226E6F6465223B733A31343A226C6F 61645F66756E6374696F6E73223B733A303A22223B733A3136 3A22746F5F6172675F66756E6374696F6E73223B733A303A22 223B733A363A22776569676874223B693A303B733A31333A22 5F6E756D6265725F7061727473223B693A313B733A363A225F 7061727473223B613A313A7B693A303B733A343A226E6F6465 223B7D733A343A225F666974223B693A313B733A383A225F76 697369626C65223B623A313B733A343A225F746162223B623A 303B733A31303A227461625F706172656E74223B733A303A22 223B733A383A227461625F726F6F74223B733A343A226E6F64 65223B733A31353A226163636573732063616C6C6261636B22 3B733A31313A22757365725F616363657373223B733A31343A 2270[...]

MySQL sa: Dokumentation
#2006 - MySQL server has gone away
Althalos är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-05-02, 18:46 #12
Jake.Nu Jake.Nu är inte uppkopplad
Medlem
 
Reg.datum: Oct 2006
Inlägg: 224
Jake.Nu Jake.Nu är inte uppkopplad
Medlem
 
Reg.datum: Oct 2006
Inlägg: 224
Här är ett gammal fult script som jag gjort och använt en del.
Kanske strular det lite beroende på charsets och likn.

1. Lägg sql-filen och scriptet i samma katalog på webbservern.
2. Sätt namnet på sql-filen i $filename
3. Sätt $max_per_request till så många _byte_ som du vill köra per request.
4. Surfa in på sidan

Kod:
<?php

$filename = "mysqldump.sql";
$max_per_request	= 52428800; // 5 MB

function get_data(&$offset, $max = 8192, $filename)
{
	$rows = array();
	
	if ($fp = fopen($filename, "r"))
	{
 *$is_row	= false;
 *$buf *= "";
 *$tot_len	= 0;
 *
 *if ($offset)
 *{
 *	fseek($fp, $offset, SEEK_SET);
 *}
 *
 *while ($row = fgets($fp))
 *{
 *	if (!$is_row)
 *	{
 * *if (strpos($row, "CREATE") !== 0 && strpos($row, "INSERT") !== 0)
 * *{
 * *	continue;
 * *}
 * *
 * *$is_row	= true;
 * *$buf *= "";
 *	}
 *	
 *	$buf .= $row;
 *	$row_len = strlen($row);
 *	$tot_len += $row_len;
 *	
 *	if (strpos($row, ";\n") === $row_len - 2)
 *	{
 * *$is_row = false;
 * *
 * *$rows[] = $buf;
 * *
 * *if ($tot_len >= $max)
 * *{
 * *	break;
 * *}
 *	}
 *}
 *
 *$offset = ftell($fp);
 *
 *fclose($fp);
	}
	
	return $rows;
}

$start_offset = isset($_GET["offset"]) ? intval($_GET["offset"]) : 0;

$sqlData *= get_data($start_offset, $max_per_request, $filename);

if (empty($sqlData))
{
	echo "Import klar<br/>";
	
	exit();
}
	
mysql_connect("..", "..", "..")or die(mysql_error());
mysql_select_db("..")or die(mysql_error());

foreach ($sqlData as $query)
{
	mysql_query($query)or die($query . " => " . mysql_error());
}

header("Refresh: 2;URL=http://" . $_SERVER["HTTP_HOST"] . "/" . $_SERVER["SCRIPT_NAME"] . "?offset=" . $start_offset);
exit();
?>
Fungerar bra med dumpar från mysqldump och phpmyadmin.


edit: alla tabbar försvann i koden..
edit: konstruerat för Linux (a.k.a. nyrad = \n)
Jake.Nu är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-05-03, 20:58 #13
Althalos Althalos är inte uppkopplad
Medlem
 
Reg.datum: Jan 2006
Inlägg: 282
Althalos Althalos är inte uppkopplad
Medlem
 
Reg.datum: Jan 2006
Inlägg: 282
För mig säger den bara Import klar direkt.. hm..
Althalos är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-05-03, 21:10 #14
Jake.Nu Jake.Nu är inte uppkopplad
Medlem
 
Reg.datum: Oct 2006
Inlägg: 224
Jake.Nu Jake.Nu är inte uppkopplad
Medlem
 
Reg.datum: Oct 2006
Inlägg: 224
Den kanske inte hittar filen.

Lägg till
Kod:
if (!file_exists($filename))
{
  die("Hittade inte filen");
}
först i funktionen
Jake.Nu är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 09:05.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017