Zapis bazy z poziomu skryptu...

Odpowiedz Nowy wątek
2006-08-07 22:52
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ć??

Pozostało 580 znaków

2006-08-08 00:03
0

np w jportalu masz plik sql_dump.php


Dwie zasady gwarantujące sukces:
1. Nigdy nie mów nikomu wszystkiego<span style="color: white">

Pozostało 580 znaków

2006-08-08 21:42
0

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

Pozostało 580 znaków

2006-08-09 20:56
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++;
            }
        }
 
?>

Dwie zasady gwarantujące sukces:
1. Nigdy nie mów nikomu wszystkiego<span style="color: white">

Pozostało 580 znaków

2006-08-10 00:27
0

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


Pozostało 580 znaków

2006-08-10 15:37
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


Pozostało 580 znaków

2006-08-10 16:04
0

tu chyba brakuje danych do połączenia ;)

tzn wywala:
BLAD wykonania skryptu

Blad: Brak tabel w bazie danych

Pozostało 580 znaków

2006-08-10 16:31
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" ? :/


Dwie zasady gwarantujące sukces:
1. Nigdy nie mów nikomu wszystkiego<span style="color: white">

Pozostało 580 znaków

2006-08-10 16:36
0

już działą ;)

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

Pozostało 580 znaków

2006-08-10 17:57
0

no chyba nie bardzo :D

excl to tak jakby skrot od exclude...


Pozostało 580 znaków

2006-08-10 18:03
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


Dwie zasady gwarantujące sukces:
1. Nigdy nie mów nikomu wszystkiego<span style="color: white">

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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