Saltar al contenido

Usando un archivo .php para generar un volcado de MySQL

Solución:

Puedes usar el exec() función para ejecutar un comando externo.

Nota: entre shell_exec() y exec(), Elegiría el segundo, que no devuelve la salida al script PHP; no es necesario que el script PHP obtenga todo el volcado SQL como una cadena: solo lo necesita escrito en un archivo, y esto puede ser hecho por el propio comando.

Ese comando externo:

  • ser una llamada a mysqldump, con los parámetros adecuados,
  • y redirigir la salida a un archivo.

Por ejemplo :

mysqldump --user=... --password=... --host=... DB_NAME > /path/to/output/file.sql

Lo que significa que su código PHP se vería así:

exec('mysqldump --user=... --password=... --host=... DB_NAME > /path/to/output/file.sql');

Por supuesto, depende de usted usar la información de conexión correcta, reemplazando el ... Con ésos.

Si desea crear una copia de seguridad para descargarla a través del navegador, también puede hacerlo sin usar un archivo.

La función php pasar a través de() redirigirá directamente la salida de mysqldump al navegador. En este ejemplo también estará comprimido.

Ventaja: no tienes que lidiar con archivos temporales.

Con: no funcionará en Windows. Puede tener límites con grandes conjuntos de datos.

<?php

$DBUSER="user";
$DBPASSWD="password";
$DATABASE="user_db";

$filename = "backup-" . date("d-m-Y") . ".sql.gz";
$mime = "application/x-gzip";

header( "Content-Type: " . $mime );
header( 'Content-Disposition: attachment; filename="' . $filename . '"' );

$cmd = "mysqldump -u $DBUSER --password=$DBPASSWD $DATABASE | gzip --best";   

passthru( $cmd );

exit(0);
?>

¡Eche un vistazo aquí: https://github.com/ifsnop/mysqldump-php! Es una solución nativa escrita en php.

Puede instalarlo usando Composer, y es tan fácil como hacerlo:

<?php

use IfsnopMysqldump as IMysqldump;

try {
    $dump = new IMysqldumpMysqldump('database', 'username', 'password');
    $dump->start('storage/work/dump.sql');
} catch (Exception $e) {
    echo 'mysqldump-php error: ' . $e->getMessage();
}

?>

Es compatible con usuarios avanzados, con muchas opciones copiadas del mysqldump original.

Todas las opciones se explican en la página de github, pero más o menos son autoexplicativas:

$dumpSettingsDefault = array(
    'include-tables' => array(),
    'exclude-tables' => array(),
    'compress' => 'None',
    'no-data' => false,
    'add-drop-database' => false,
    'add-drop-table' => false,
    'single-transaction' => true,
    'lock-tables' => false,
    'add-locks' => true,
    'extended-insert' => true,
    'disable-foreign-keys-check' => false,
    'where' => '',
    'no-create-info' => false
);
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *