- Home
- Categorie
- Coding e Sistemistica
- MYSQL e altri Database
- Dump database MySql
-
Dump database MySql
ciao ragazzi,
ho da porvi un problema che non riesco a risolvere...:bho:devo fare un backup di struttura+dati di un database, però senza poter accedere a PhpMyAdmin, quindi devo fare tutto con delle funzioni apposite da php.
ho trovato alcune classi online, ma provandole ho riscontrato un problema comune: se una tabella ha due chiavi primarie viene presa solo la seconda e questo comporta degli inserimenti errati nel momento del ripristino del dump.
questa è la tabella:
CREATE TABLE IF NOT EXISTS `agenda_concerne` ( `aco_age_id` int(10) unsigned NOT NULL default '0', `aco_util_id` smallint(5) unsigned NOT NULL default '0', `aco_rappel_ok` tinyint(3) unsigned NOT NULL default '0', `aco_termine` tinyint(3) unsigned NOT NULL default '0', PRIMARY KEY (`aco_age_id`,`aco_util_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
ci sono anche altri problemi nelle strutture, ad esempio non esportano in modo corretto la sintassi:
`Colonna` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
ora mi trovo in una situazione molto critica...le tabelle non sono statiche, quindi possono cambiare e da qui la necessità d'avere il dump anche della struttura. Per quanto riguarda i dati posso trovare il modo di gestire i vari problemi di apici, slash e simile...ma con la struttura come posso fare?
Ho cercato di capire come PhpMyAdmin crei il file SQL di esportazione, ma non sono riuscito a ricavarlo, infatti penso utilizzi al suo interno la funzione mysql_dump....oppure non so proprio!!!:(:(:(:(
Ogni consiglio è molto gradito:D:D
grazie a tutti
Gio
-
Ciao giopeco
senza l'uso di PhpMyAdmin non saprei aiutarti molto, forse puoi dare un'occhio a questo post, magari ti torna utile
-
mysqldumper
scaricati questo script... con questo puoi fare un dump del vecchio database e importarlo sul nuovo server senza problemi
-
@Thedarkita said:
mysqldumper
scaricati questo script... con questo puoi fare un dump del vecchio database e importarlo sul nuovo server senza problemi
l'ho scaricato....è una valida alternativa a PhpMyAdmin, ma io dovrei integrare una specie di "pulsante" per creare un backup e con questo tipo di script non è possibile...
In poche parole, io devo creare un file SQL con un click, senza tanti giri/accessi/impostazioni, deve essere una cosa molto immediata...dite che dovrei andare a spulciare all'interno dei file php di mysqldumper per capire che funzioni utilizza per creare il file sql!?!??!?!o
-
@Samyorn said:
Ciao giopego
senza l'uso di PhpMyAdmin non saprei aiutarti molto, forse puoi dare un'occhio a questo post, magari ti torna utile
Grazie a Samyorn e al link sono riuscito a risolvere il problema!!!!
sostanzialmente il programma che si trova indicato in quella discussione "MyBackup" scritto in Python ma con del codice php per creare il dump del database è stato la mia salvezza!Avendo la necessità di esportare il database con un click e poterlo poi reimportare tramite phpMyAdmin, ho apportato delle piccole modifiche al codice originale e sono giunto ad una definizione del file sql perfettamente compatibile con l'importazione in PMA.
se può esservi utile vi inserisco il codice qui sotto.
Ciao
GIo[php]
<?
/*
Questo script è preso dal sito planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=772&lngWId=8
a questo indirizzo trovate anche un tutorial e lo stesso codice per utilizzare lo script.
Sono state apportate piccolissime modifiche al file per renderlo un po più semplice
e sicuro.
Changelog
5 Nov 2007 : risolto bug caratteri accentati, fixed bug sui tag html
3 Nov 2007 : modificato il metodo get_table_def() per compatibilità mysql5 (Giuseppe Piraino)*/
//Sintassi per richiamare il file back.php?password=1
//questo file (backup.php) può essere rinominato in questo caso la sintassi diventa ad esempio
//nuovonome.php?password=tuapasswordif(!isset($_GET['password']) || $_GET['password']!=1)exit("For open this page you must digit a password!");
$target="file"; if($target=="file") { header('Content-Type: application/octetstream'); header('Content-Disposition: filename="backup.sql"'); $asfile="download"; } $crlf="\r\n"; $localhost="localhost"; $dbuser='root'; $dbpass=''; $dbname='db_name'; $link = mysql_connect($localhost, $dbuser, $dbpass); $database = mysql_select_db($dbname); //$dbname = "newobs"; $dump_buffer=""; $tables = mysql_query("show tables from $dbname"); $num_tables = mysql_num_rows($tables); if($num_tables == 0) { echo "# No Tables Found"; exit; } //MODIFICATI ALCUNI COMMENTI $dump_buffer.= "# DatabaseBackup $crlf"; $dump_buffer.= "# Backup made:$crlf"; $dump_buffer.= "# ".date("F j, Y, g:i a")."$crlf"; $dump_buffer.= "# Database: $dbname$crlf"; $dump_buffer.= "# Backed up tables : $dbname $crlf"; $dump_buffer.= "$crlf#$crlf"; $i = 0; while($i < $num_tables) { $table = mysql_tablename($tables, $i); //echo $table . "<br>"; $dump_buffer.= "#--------------------------------------------------------$crlf"; $dump_buffer.= "$crlf#$crlf"; $dump_buffer.= "# Table structure for table '$table'$crlf"; $dump_buffer.= "#$crlf$crlf"; $db = $table; $dump_buffer.= get_table_def($table, $crlf,$dbname).";$crlf"; $dump_buffer.= "$crlf#$crlf"; $dump_buffer.= "# Dumping data for table '$table'$crlf"; $dump_buffer.= "#$crlf$crlf"; $tmp_buffer=""; get_table_content($dbname, $table, 0, 0, 'my_handler', $dbname); $dump_buffer.=$tmp_buffer; $i++; $dump_buffer.= "$crlf"; } echo $dump_buffer; exit; //fixed bug/optimized for mysql>=5.0 (Giuseppe Piraino) ; function get_table_def($table, $crlf,$dbname) { if($table=mysql_query("SHOW CREATE TABLE `$table`")){ list($table_name, $create_table)=mysql_fetch_row($table); return $create_table; } return False; } function get_table_content($db, $table, $limit_from = 0, $limit_to = 0,$handler) { // Defines the offsets to use if ($limit_from > 0) { $limit_from--; } else { $limit_from = 0; } if ($limit_to > 0 && $limit_from >= 0) { $add_query = " LIMIT $limit_from, $limit_to"; } else { $add_query = ''; } get_table_content_fast($db, $table, $add_query,$handler); } function get_table_content_fast($db, $table, $add_query = '',$handler) { $result = mysql_query('SELECT * FROM ' . $db . '.' . $table . $add_query) or die(); if ($result != false) { @set_time_limit(1200); // 20 Minutes // Checks whether the field is an integer or not for ($j = 0; $j < mysql_num_fields($result); $j++) { $field_set[$j] = mysql_field_name($result, $j); $type = mysql_field_type($result, $j); if ($type == 'tinyint' || $type == 'smallint' || $type == 'mediumint' || $type == 'int' || $type == 'bigint' ||$type == 'timestamp') { $field_num[$j] = true; } else { $field_num[$j] = false; } } // end for // Get the scheme if (isset($GLOBALS['showcolumns'])) { $fields = implode(', ', $field_set); $schema_insert = "INSERT INTO `$table` ($fields) VALUES ("; } else { $schema_insert = "INSERT INTO `$table` VALUES ("; } $field_count = mysql_num_fields($result); $search = array("\x0a","\x0d","\x1a","è","é","à","ì","í","ò","ù","'"); //MODIFICATO IL REPLACE SEARCH $replace = array("\\n","\\r","\Z","è","é","à","ì","í","ò","ù","''"); while ($row = mysql_fetch_row($result)) { for ($j = 0; $j < $field_count; $j++) { if (!isset($row[$j])) { $values[] = 'NULL'; } else if (!empty($row[$j])) { // a number if ($field_num[$j]) { $values[] = "'" . $row[$j]. "'"; //fixed mysql5 - insert of number need quote! (Giuseppe Piraino); } // a string else { //$values[] = "'" . str_replace($search, $replace, addslashes($row[$j])) . "'"; MODIFICA DI QUESTA RIGA PER OVVIARE AGLI SLASH $values[] = "'" . str_replace($search, $replace, $row[$j]) . "'"; } } else { $values[] = "''"; } // end if } // end for $insert_line = $schema_insert . implode(',', $values) . ')'; unset($values); // Call the handler $handler($insert_line); } // end while } // end if ($result != false) return true; } function my_handler($sql_insert) { global $crlf, $asfile; global $tmp_buffer; //Giuseppe Piraino - 5 Nov 2007 - This code is inconsistent //uncomment only if you have mysql<=4.1 //if(empty($asfile)) // $tmp_buffer.= htmlspecialchars("$sql_insert;$crlf"); //else $tmp_buffer.= "$sql_insert;$crlf"; } /* Giuseppe Piraino - this functions are unused function faqe_db_error() { return mysql_error(); } function faqe_db_insert_id($result) { return mysql_insert_id($result); } */
?>
[/php]
-
Mille grazie per questo codice utilissimo e soprattutto funzionante