Zapis bazy z poziomu skryptu...

0

Witam,
Chciałbym zrobić skrypt php który po uruchomieniu zrobi zrzut danych z całej bazy do pliku (dane - coś
takiego jak phpmyadmin). Wie ktoś może jak to powinno wyglądać??

0

np w jportalu masz plik sql_dump.php

0

a masz może jakoś w skrócie to gdzieś opisane??:)

0

jak to w skrócie opisane ? łączysz się z bazą, listujesz tabele, wydłubujesz wszystkie dane i właściwości tabeli i wypluwasz w postaci którą przyjmie baza z powrotem

tu jest ten plik:

<?

/************************************************************************/
/*  modul jest modyfikacja modulu PHP-Nuke (modul na licencji GNU/GPL)  */
/************************************************************************/

// tutaj połącz się i wybierz bazę do zrzutu





		@set_time_limit(600);
		$crlf="\n";

		$strNoTablesFound = "Brak tabel w bazie danych.";
		$strHost = "Host";
		$strDatabase = "Baza danych ";
		$strTableStructure = "Struktura tabeli dla";
		$strDumpingData = "Zawartosc tabeli";
		$strError = "blad";
		$strSQLQuery = "SQL";
		$strMySQLSaid = "MySQL : ";
		$strBack = "Wstecz";
		$strFileName = "Kopia bazy";
		$strName = "Baza danych";
		$strDone = "Z dnia";
    	$strat = "";
		$strby = "by";
		$date_jour = date ("m-d-Y");		


		header("Content-disposition: filename=$strFileName $db_name $date_jour.sql");
		header("Content-type: application/octetstream");
		header("Pragma: no-cache");
		header("Expires: 0");
		
		$client = getenv("HTTP_USER_AGENT");
		if(ereg('[^(]*\((.*)\)[^)]*',$client,$regs)){
            $os = $regs[1];
            if (eregi("Win",$os)) 
		    $crlf="\r\n";
		}
	
		
		function my_handler($sql_insert){
		    global $crlf;
		    echo "$sql_insert;$crlf";
		}
		
		function get_table_content($db, $table, $handler)
		{
		    $result = mysql_db_query($db, "SELECT * FROM $table") or mysql_die();
		    $i = 0;
		    while($row = mysql_fetch_row($result))
		    {
		//        set_time_limit(60); // HaRa
		        $table_list = "(";
		
		        for($j=0; $j < mysql_num_fields($result); $j++)
		            $table_list .= mysql_field_name($result,$j).", ";
		
		        $table_list = substr($table_list,0,-2);
		        $table_list .= ")";
		
		        if(isset($GLOBALS["showcolumns"]))
		            $schema_insert = "INSERT INTO $table $table_list VALUES (";
		        else
		            $schema_insert = "INSERT INTO $table VALUES (";
		
		        for($j=0; $j<mysql_num_fields($result);$j++)
		        {
		            if(!isset($row[$j]))
		                $schema_insert .= " NULL,";
		            elseif($row[$j] != "")
		                $schema_insert .= " '".addslashes($row[$j])."',";
		            else
		                $schema_insert .= " '',";
		        }
		        $schema_insert = ereg_replace(",$", "", $schema_insert);
		        $schema_insert .= ")";
		        $handler(trim($schema_insert));
		        $i++;
		    }
		    return (true);
		}
		
		function get_table_def($db, $table, $crlf)
		{
		    $schema_create = "";
		    $schema_create .= "CREATE TABLE $table ($crlf";
		
		    $result = mysql_db_query($db, "SHOW FIELDS FROM $table") or mysql_die();
		    while($row = mysql_fetch_array($result))
		    {
		        $schema_create .= "   $row[Field] $row[Type]";
		
		        if(isset($row["Default"]) && (!empty($row["Default"]) || $row["Default"] == "0"))
		            $schema_create .= " DEFAULT '$row[Default]'";
		        if($row["Null"] != "YES")
		            $schema_create .= " NOT NULL";
		        if($row["Extra"] != "")
		            $schema_create .= " $row[Extra]";
		        $schema_create .= ",$crlf";
		    }
		    $schema_create = ereg_replace(",".$crlf."$", "", $schema_create);
		    $result = mysql_db_query($db, "SHOW KEYS FROM $table") or mysql_die();
		    while($row = mysql_fetch_array($result))
		    {
		        $kname=$row['Key_name'];
		        if(($kname != "PRIMARY") && ($row['Non_unique'] == 0))
		            $kname="UNIQUE|$kname";
		         if(!isset($index[$kname]))
		             $index[$kname] = array();
		         $index[$kname][] = $row['Column_name'];
		    }
		
		    while(list($x, $columns) = @each($index))
		    {
		         $schema_create .= ",$crlf";
		         if($x == "PRIMARY")
		             $schema_create .= "   PRIMARY KEY (" . implode($columns, ", ") . ")";
		         elseif (substr($x,0,6) == "UNIQUE")
		            $schema_create .= "   UNIQUE ".substr($x,7)." (" . implode($columns, ", ") . ")";
		         else
		            $schema_create .= "   KEY $x (" . implode($columns, ", ") . ")";
		    }
		
		    $schema_create .= "$crlf)";
		    return (stripslashes($schema_create));
		}
		
		function mysql_die($error = ""){
		    echo "<b> $strError </b><p>";
		    if(isset($sql_query) && !empty($sql_query))
		    {
		        echo "$strSQLQuery: <pre>$sql_query</pre><p>";
		    }
		    if(empty($error))
		        echo $strMySQLSaid.mysql_error();
		    else
		        echo $strMySQLSaid.$error;
		    echo "<br><a href=\"javascript:history.go(-1)\">$strBack</a>";
		    exit;
		}
		
		global $db_host, $db_name, $db_pass, $db_user, $site_name, $aadres;
				
		$tables = mysql_list_tables($db_name);
		
		$num_tables = @mysql_numrows($tables);
		if($num_tables == 0)
		{
		    echo $strNoTablesFound;
		}
		else
		{
		    $i = 0;
		    $heure_jour = date ("H:i");
		    print "# ========================================================$crlf";
		    print "#$crlf";
		    print "# $strName : $db_name$crlf";
		    print "# $strDone $date_jour $strat $heure_jour$crlf";
            print "# $site_name ($aadres)$crlf";
		    print "#$crlf";
		    print "# ========================================================$crlf";
		    print "$crlf";
		    
		    while($i < $num_tables)
		    { 
		        $table = mysql_tablename($tables, $i);
		
		        print $crlf;
		        print "# --------------------------------------------------------$crlf";
		        print "#$crlf";
		        print "# $strTableStructure '$table'$crlf";
		        print "#$crlf";
		        print $crlf;
		
		        echo get_table_def($db_name, $table, $crlf).";$crlf$crlf";
		        
			print "#$crlf";
			print "# $strDumpingData '$table'$crlf";
			print "#$crlf";
			print $crlf;
			
			get_table_content($db_name, $table, "my_handler");
		
		        $i++;
		    }
		}

?>
0

Na tej stronce masz skrypt phpMyDump http://www.webinside.pl/skrypty/9

0

spodobal mi sie ten skrypcik z phpnuke i go zmodyfikowalem, zeby sie nadawal do wrzucenia w crona i dodalem pare innych usprawnien :)

http://pastebin.4programmers.net/655

mam nadzieje, ze komus sie przyda ;)

EDIT: nowa wersja

http://tinyurl.com/g6vtb

cos pastebin nie dziala :/ ucina mi na 160-ktorejs linijce

0

tu chyba brakuje danych do połączenia ;)

tzn wywala:
BLAD wykonania skryptu

Blad: Brak tabel w bazie danych

0
Northwest napisał(a)

tu chyba brakuje danych do połączenia ;)

tzn wywala:
BLAD wykonania skryptu

Blad: Brak tabel w bazie danych

a co w/g ciebie znaczy komentarz "// tutaj połącz się i wybierz bazę do zrzutu" ? :/

0

już działą ;)

ps. co to jest: $excl = array('phpbb_read_history', 'phpbb_search_wordlist', 'phpbb_search_wordmatch'); ??
To są nazwy tabel do zrzutu??

0

no chyba nie bardzo :D

excl to tak jakby skrot od exclude...

0

czyli po polskiemu - lista tabel do nie zrzutu
ale to tak nastawiłeś na phpBB, mógłbyś napisać co jeszcze zmieniłeś ? bo nie chce mi się śledzić ... oczywiście oprócz uporządkowania kodu

ale chyba powinieneś zostawić komentarz o pierwotnym autorze skryptu

0

zmiany:

  • mozliwosc wyboru tabel nie do zrzutu (tzn zrzuca sie sama struktura, bez danych)
  • zapis dumpa do pliku na serwerze, zamiast wywalania na stdout
  • wywalanie na stdout "kropek", zeby nie zerwalo polaczenia
  • zamiana " na '
  • zapis X najnowszych kopii (gdy limit sie wyczerpuje, najstarsza jest usuwana)
  • wywalenie zmiennych jezykowych
  • przywrocenie zmiennej $nagl ([i]INSERT INTO table ([b]blabla[/b]) VALUES (blabla)[/i])
  • uporzadkowanie wywalanego kodu (zamiana spacji na \t - oszczednosc miejsca, skrocenie komentarzy)
  • "wyskakiwanie" z frameworku - jezeli ktos odpala jako modul w CMSie (jak ja), to i tak zobaczy tylko treść modułu (chyba ze cms jakos inaczej niz moj wywoluje moduly - ob_start() :P)

co do info n/t autora to rzeczywiscie - najpierw mial byc to skrypt tylko na moje potrzeby, a potem wpadlo mi do glowy Wam wyslac i jakos wylecialo z glowy [wstyd]

1 użytkowników online, w tym zalogowanych: 0, gości: 1