una importar grande exportar error datos crear consola como php mysql export load-data-infile

exportar - importar base de datos phpmyadmin grande



Una forma fácil de exportar una tabla SQL sin acceso al servidor o phpMyADMIN (8)

Necesito una forma de exportar fácilmente y luego importar datos en una tabla MySQL desde un servidor remoto a mi servidor doméstico. No tengo acceso directo al servidor y no hay instaladas utilidades como phpMyAdmin. Sí, tengo la capacidad de poner scripts PHP en el servidor.

¿Cómo obtengo los datos?

Formulo esta pregunta simplemente para registrar mi manera de hacerlo


Aquí hay un script PHP que hice que hará una copia de seguridad de todas las tablas en su base de datos. Se basa en este http://davidwalsh.name/backup-mysql-database-php con algunas mejoras. En primer lugar, configurará correctamente foreign key restrictions .

En mi configuración, el script se ejecutará un cierto día de la semana, digamos el lunes. En caso de que no se ejecute el lunes, aún se ejecutará el martes (por ejemplo), creando el archivo .sql con la fecha del lunes anterior, cuando se suponía que se debía ejecutar. .sql archivo .sql de hace 4 semanas, por lo que siempre conserva las últimas 4 copias de seguridad. Aquí está el código:

<?php backup_tables(); // backup all tables in db function backup_tables() { $day_of_backup = ''Monday''; //possible values: `Monday` `Tuesday` `Wednesday` `Thursday` `Friday` `Saturday` `Sunday` $backup_path = ''databases/''; //make sure it ends with "/" $db_host = ''localhost''; $db_user = ''root''; $db_pass = ''''; $db_name = ''movies_database_1''; //set the correct date for filename if (date(''l'') == $day_of_backup) { $date = date("Y-m-d"); } else { //set $date to the date when last backup had to occur $datetime1 = date_create($day_of_backup); $date = date("Y-m-d", strtotime($day_of_backup.'' -7 days'')); } if (!file_exists($backup_path.$date.''-backup''.''.sql'')) { //connect to db $link = mysqli_connect($db_host,$db_user,$db_pass); mysqli_set_charset($link,''utf8''); mysqli_select_db($link,$db_name); //get all of the tables $tables = array(); $result = mysqli_query($link, ''SHOW TABLES''); while($row = mysqli_fetch_row($result)) { $tables[] = $row[0]; } //disable foreign keys (to avoid errors) $return = ''SET FOREIGN_KEY_CHECKS=0;'' . "/r/n"; $return.= ''SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";'' . "/r/n"; $return.= ''SET AUTOCOMMIT=0;'' . "/r/n"; $return.= ''START TRANSACTION;'' . "/r/n"; //cycle through foreach($tables as $table) { $result = mysqli_query($link, ''SELECT * FROM ''.$table); $num_fields = mysqli_num_fields($result); $num_rows = mysqli_num_rows($result); $i_row = 0; //$return.= ''DROP TABLE ''.$table.'';''; $row2 = mysqli_fetch_row(mysqli_query($link,''SHOW CREATE TABLE ''.$table)); $return.= "/n/n".$row2[1].";/n/n"; if ($num_rows !== 0) { $row3 = mysqli_fetch_fields($result); $return.= ''INSERT INTO ''.$table.''( ''; foreach ($row3 as $th) { $return.= ''`''.$th->name.''`, ''; } $return = substr($return, 0, -2); $return.= '' ) VALUES''; for ($i = 0; $i < $num_fields; $i++) { while($row = mysqli_fetch_row($result)) { $return.="/n("; for($j=0; $j<$num_fields; $j++) { $row[$j] = addslashes($row[$j]); $row[$j] = preg_replace("#/n#","//n",$row[$j]); if (isset($row[$j])) { $return.= ''"''.$row[$j].''"'' ; } else { $return.= ''""''; } if ($j<($num_fields-1)) { $return.= '',''; } } if (++$i_row == $num_rows) { $return.= ");"; // last row } else { $return.= "),"; // not last row } } } } $return.="/n/n/n"; } // enable foreign keys $return .= ''SET FOREIGN_KEY_CHECKS=1;'' . "/r/n"; $return.= ''COMMIT;''; //set file path if (!is_dir($backup_path)) { mkdir($backup_path, 0755, true); } //delete old file $old_date = date("Y-m-d", strtotime(''-4 weeks'', strtotime($date))); $old_file = $backup_path.$old_date.''-backup''.''.sql''; if (file_exists($old_file)) unlink($old_file); //save file $handle = fopen($backup_path.$date.''-backup''.''.sql'',''w+''); fwrite($handle,$return); fclose($handle); } } ?>


Lo hice exportando a CSV, y luego importando con cualquier utilidad disponible. Me gusta bastante el uso de la secuencia de salida php: //.

$result = $db_con->query(''SELECT * FROM `some_table`''); $fp = fopen(''php://output'', ''w''); if ($fp && $result) { header(''Content-Type: text/csv''); header(''Content-Disposition: attachment; filename="export.csv"''); while ($row = $result->fetch_array(MYSQLI_NUM)) { fputcsv($fp, array_values($row)); } die; }


Puede considerar mirar: http://www.webyog.com Esta es una gran herramienta de administración de GUI, y tienen una función de tunelización HTTP muy buena (no estoy seguro si esto es solo en una empresa que cuesta unos cuantos dólares )

Básicamente, usted carga un script que proporcionan en su espacio web (script php) y le apunta el administrador de sqlyog y puede acceder a la (s) base (s) de datos. Utiliza esta secuencia de comandos para tunelizar / proxy las solicitudes / consultas entre su cliente doméstico y el servidor.

Sé que al menos 1 persona utiliza este método con excelentes resultados.


Puede usar SQL para esto:

$file = ''backups/mytable.sql''; $result = mysql_query("SELECT * INTO OUTFILE ''$file'' FROM `##table##`");

Luego, simplemente señale un navegador o cliente FTP en el directorio / archivo (backups / mytable.sql). Esta es también una buena forma de realizar copias de seguridad incrementales, dado el nombre de archivo, una marca de tiempo, por ejemplo.

Para volver a acceder a su base de datos desde ese archivo, puede usar:

$file = ''backups/mytable.sql''; $result = mysql_query("LOAD DATA INFILE ''$file'' INTO TABLE `##table##`");

La otra opción es usar PHP para invocar un comando del sistema en el servidor y ejecutar ''mysqldump'':

$file = ''backups/mytable.sql''; system("mysqldump --opt -h ##databaseserver## -u ##username## -p ##password## ##database | gzip > ".$file);


Si tiene acceso FTP / SFTP, puede continuar y cargar phpMyAdmin usted mismo.

Estoy usando este pequeño paquete para hacer copias de seguridad automáticas de mysql desde un servidor al que solo tengo acceso FTP:
http://www.taw24.de/download/pafiledb.php?PHPSESSID=b48001ea004aacd86f5643a72feb2829&action=viewfile&fid=43&id=1
El sitio está en alemán, pero la descarga también contiene documentación en inglés.

Un google rápido también aparece esto, pero yo no lo he usado:
http://snipplr.com/view/173/mysql-dump/


También debería considerar phpMinAdmin que es solo un archivo, por lo que es fácil de cargar y configurar.


Yo uso mysqldump a través de la línea de comando:

exec("mysqldump sourceDatabase -uUsername -p''password'' > outputFilename.sql");

Luego, simplemente descarga el archivo resultante y listo.


SOLUCIÓN DE TRABAJO (última versión en: Export.php + Import.php )

EXPORT_TABLES("localhost","user","pass","db_name");

CÓDIGO:

//https://github.com/tazotodua/useful-php-scripts function EXPORT_TABLES($host,$user,$pass,$name, $tables=false, $backup_name=false ){ $mysqli = new mysqli($host,$user,$pass,$name); $mysqli->select_db($name); $mysqli->query("SET NAMES ''utf8''"); $queryTables = $mysqli->query(''SHOW TABLES''); while($row = $queryTables->fetch_row()) { $target_tables[] = $row[0]; } if($tables !== false) { $target_tables = array_intersect( $target_tables, $tables); } foreach($target_tables as $table){ $result = $mysqli->query(''SELECT * FROM ''.$table); $fields_amount=$result->field_count; $rows_num=$mysqli->affected_rows; $res = $mysqli->query(''SHOW CREATE TABLE ''.$table); $TableMLine=$res->fetch_row(); $content = (!isset($content) ? '''' : $content) . "/n/n".$TableMLine[1].";/n/n"; for ($i = 0, $st_counter = 0; $i < $fields_amount; $i++, $st_counter=0) { while($row = $result->fetch_row()) { //when started (and every after 100 command cycle): if ($st_counter%100 == 0 || $st_counter == 0 ) {$content .= "/nINSERT INTO ".$table." VALUES";} $content .= "/n("; for($j=0; $j<$fields_amount; $j++) { $row[$j] = str_replace("/n","//n", addslashes($row[$j]) ); if (isset($row[$j])){$content .= ''"''.$row[$j].''"'' ; }else {$content .= ''""'';} if ($j<($fields_amount-1)){$content.= '','';} } $content .=")"; //every after 100 command cycle [or at last line] ....p.s. but should be inserted 1 cycle eariler if ( (($st_counter+1)%100==0 && $st_counter!=0) || $st_counter+1==$rows_num) {$content .= ";";} else {$content .= ",";} $st_counter=$st_counter+1; } } $content .="/n/n/n"; } $backup_name = $backup_name ? $backup_name : $name."___(".date(''H-i-s'')."_".date(''d-m-Y'').")__rand".rand(1,11111111).".sql"; header(''Content-Type: application/octet-stream''); header("Content-Transfer-Encoding: Binary"); header("Content-disposition: attachment; filename=/"".$backup_name."/""); echo $content; exit; }