16. juli 2003 - 14:29
Der er
16 kommentarer og 1 løsning
mySQL dumb
Jeg har kigget lidt rundt her efter en måde at ta backup af en enkelt tabel, men kan kun finde en masse giga scripts til komplette backups. Kan det ik laves en del lettere til en enkelt tabel ?
Annonceindlæg tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Kan du ikke bruge phpMyAdmin til det ?
Jo, men det er ikke praktisk i den her situation.
Det ville efter min mening være lige så praktisk som så meget andet, ellers kan du jo bryge mysql prompten istedet hvis du er inde i det...
eller programmer mysqldump
Ja, hvis det ikke er fordi at folk med mindre udviklede computer evner bedst kan li et link hvor der står backup...
exp
Juniormester
16. juli 2003 - 14:35
#6
Har faktisk selv lidt samme ønske - et "Backup? Klik her!"-script der laver backup af en række foruddefinerede tabeller i en database... Det er ikke særlig smart at skulle ind i phpmyadmin som bruger af et cms-system...
Hvordan gør phpmyadmin det ? Er det også på den mest uoverskuelige måde ?
lav et LINK til sql.php og put det her i filen: <?php $dbhost = "database adresse"; $dbuname = "bruger"; $dbpass = "kodeord"; $dbname = "database navn"; @set_time_limit(600); $crlf="\n"; $strNoTablesFound = "Ingen databasetabeller fundet"; $strHost = "Host"; $strDatabase = "Database "; $strTableStructure = "Struktur for tabel"; $strDumpingData = "Indhold af tabel"; $strError = "Fejl"; $strSQLQuery = "SQL-query"; $strMySQLSaid = "MySQL: "; $strBack = "Tilbage"; $strName = "Backup af database"; $strtoday = date ("d-m-y"); header("Content-disposition: filename=$dbname.sql"); header("Content-type: application/ms-download"); 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)) { $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 .= "DROP TABLE IF EXISTS $table; 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=\"java script:history.go(-1)\">$strBack</a>"; exit; } global $bruger, $dbhost, $dbuname, $dbpass, $dbname; mysql_connect($dbhost, $dbuname, $dbpass); @mysql_select_db("$dbname") or die ("Kunne ikke forbinde til databasen"); $tables = mysql_list_tables($dbname); $num_tables = @mysql_numrows($tables); if($num_tables == 0) { echo $strNoTablesFound; } else { $i = 0; $hours = date ("H:i"); print "# ========================================================$crlf"; print "#$crlf"; print "# $strName : $dbname$crlf"; print "# Download d. $strtoday kl. $hours$crlf"; print "#$crlf"; print "# Denne fil er alene beregnet som ren backup af databasen.$crlf"; print "# Ét forkert komma eller id, kan ødelægge en hel del...$crlf"; print "# UNDGÅ derfor at redigere i teksten.$crlf"; print "#$crlf"; print "# ========================================================$crlf"; print "$crlf"; while($i < $num_tables) { $table = mysql_tablename($tables, $i); print "#$crlf"; print "# $strTableStructure '$table'$crlf"; print "#$crlf"; print $crlf; echo get_table_def($dbname, $table, $crlf).";$crlf$crlf"; print "#$crlf"; print "# $strDumpingData '$table'$crlf"; print "#$crlf"; print $crlf; get_table_content($dbname, $table, "my_handler"); $i++; } } ?>
Og det var så netop et af de utallige giga scripts, som jeg ville væk fra.
16. juli 2003 - 14:38
#10
et ældre script jeg næsten ikke har rørt.. men det virker upåklageligt.
16. juli 2003 - 14:39
#11
der er da ikke meget "giga" over det.
exp
Juniormester
16. juli 2003 - 14:39
#12
ohmish >> Laver den ikke bare et dump af HELE databasen?
16. juli 2003 - 14:40
#13
Der burde være en funktion som den her: DUMB * FROM tabel
16. juli 2003 - 14:44
#14
ja du har ret.. det mangler der. men hvad forskel gør det at scriptet fylder lidt? scriptet er til hele databasen ja.. men det kan nemt barberes ned
exp
Juniormester
16. juli 2003 - 14:48
#15
ohmish >> Hvordan? Hvis man nu gerne vil dumpe fx disse tabeller: brugere, links hvordan gør man så?
16. juli 2003 - 14:51
#16
Kan du så ik fjerne det overflødige, og så den kun tar dumb af en tabel og sender til brugeren ?
08. september 2003 - 14:55
#17
Lukker...
Vi tilbyder markedets bedste kurser inden for webudvikling