136 votes

Utiliser un fichier .php pour générer un dump MySQL

Voici les informations que j'ai:

Je travaille avec un système Linux utilisant MySQL et PHP5. Je dois pouvoir générer un mysqldump partir d'un fichier .php, puis faire en sorte que ce cliché soit stocké dans un fichier sur le serveur, à un emplacement que je spécifierais.

Comme je suis un noblet PHP, j'aimerais que quelqu'un me donne de l'aide, des conseils ou du code, qui ferait ce dont j'ai besoin. Cela devrait être exécuté à distance à partir d'Internet.

174voto

Pascal MARTIN Points 195780

Vous pouvez utiliser l' exec() la fonction à exécuter une commande externe.

Remarque: entre shell_exec() et exec(),, je choisirais la seconde, qui n'a pas de retour de la sortie du script PHP -- pas besoin pour le script PHP, pour obtenir le dump SQL comme une chaîne de caractères : vous avez seulement besoin d'-il écrit dans un fichier, et cela peut être fait par la commande elle-même.


Qui commande externe :

  • être un appel à l' mysqldump, avec les bons paramètres,
  • et rediriger la sortie vers un fichier.

Par exemple :

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


Ce qui signifie que votre PHP code devrait ressembler à ceci :

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


Bien sûr, à vous d'utiliser la bonne connexion de l'information, en remplacement de l' ... avec ceux-ci.

95voto

MajorLeo Points 141

Si vous souhaitez créer une sauvegarde pour la télécharger via le navigateur, vous pouvez également le faire sans utiliser de fichier.

La fonction php passthru () redirigera directement la sortie de mysqldump vers le navigateur. Dans cet exemple, il sera également compressé.

Pro: Vous n'avez pas à traiter de fichiers temporaires.

Con: Ne fonctionnera pas sur Windows. Peut avoir des limites avec d'énormes jeux de données.

 <?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);
?>
 

35voto

diego Points 33

Jetez un coup d'oeil ici ! C'est une solution native écrite en php.

Vous pouvez l'installer en utilisant composer, et c'est aussi simple que faire:

 <?php

use Ifsnop\Mysqldump as IMysqldump;

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

?>
 

Il supporte les utilisateurs avancés, avec de nombreuses options copiées à partir du mysqldump original.

Toutes les options sont expliquées sur la page github, mais plus ou moins sont auto-explicatives:

 $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
);
 

9voto

André Puel Points 3222

Veuillez vous reporter au lien suivant qui contient un scriptlet qui vous aidera: http://davidwalsh.name/backup-mysql-database-php

Remarque: Ce script peut contenir des bogues avec des types de données NULL.

3voto

charliefortune Points 543

Tant que vous êtes autorisé à utiliser exec () , vous pouvez exécuter des commandes shell via votre code PHP.

Donc, en supposant que vous sachiez écrire le mysqldump en ligne de commande, c'est-à-dire

 mysqldump -u [username] -p [database] > [database].sql
 

alors vous pouvez l'utiliser comme paramètre pour la fonction exec ().

 exec("mysqldump -u mysqluser -p my_database > my_database_dump.sql");
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X