Voici les informations dont je dispose:
Je travaille avec un système basé sur Linux utilisant MySQL et PHP5. Je dois être en mesure de générer un mysqldump
fichier à partir d'un fichier .php, puis de stocker ce vidage dans un fichier sur le serveur à un emplacement que je spécifierais.
Comme je suis un nooblet 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 depuis Internet.
mysqldump
parsystem()
.Réponses:
Vous pouvez utiliser le
exec()
fonction pour exécuter une commande externe.Remarque: entre
shell_exec()
etexec()
, je choisirais le second, qui ne renvoie pas la sortie au script PHP - pas besoin du script PHP pour obtenir le vidage SQL complet sous forme de chaîne: vous n'avez besoin que de l'écrire dans un fichier, et cela peut être fait par la commande elle-même.Cette commande externe:
mysqldump
, avec les bons paramètres,Par exemple :
Ce qui signifie que votre code PHP ressemblerait à ceci:
Bien sûr, à vous d'utiliser les bonnes informations de connexion, en les remplaçant
...
par celles-ci.la source
exec()
ne reviendra pas tant que la commande ne sera pas terminée; donc, il suffit d'en mettreecho "dump complete"
après avoir appeléexec()
/usr/local/mysql/bin/mysqldump
exec("C:/pathto/mysql/bin/mysqldump.exe <options as above>");
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 à gérer les fichiers temporaires.
Con: ne fonctionnera pas sous Windows. Peut avoir des limites avec d'énormes ensembles de données.
la source
Jetez un œil ici: https://github.com/ifsnop/mysqldump-php ! C'est une solution native écrite en php.
Vous pouvez l'installer à l'aide de composer, et c'est aussi simple que de le faire:
Il prend en charge les utilisateurs avancés, avec de nombreuses options copiées à partir du mysqldump d'origine.
Toutes les options sont expliquées sur la page github, mais plus ou moins sont auto-explicatives:
la source
exec
et / ou sontshell_exec
désactivés par la sécurité, mysqldump-php fonctionne très bien! Je viens de l'essayer maintenant sur les serveurs d' Umbler et j'ai réussi le vidage. Merci beaucoup pour le tuyau!Veuillez vous référer 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
la source
Pour des raisons de sécurité, il est recommandé de spécifier le mot de passe dans un fichier de configuration et non dans la commande (un utilisateur peut exécuter un
ps aux | grep mysqldump
et voir le mot de passe).la source
Ici vous pouvez trouver une solution complète pour vider la structure et les données mysql comme dans PMA (et sans utiliser exec, passthru, etc.):
https://github.com/antarasi/MySQL-Dump-with-Foreign-keys
C'est une fourchette du projet dszymczuk avec mes améliorations.
L'utilisation est simple
fonctionne comme un charme :-)
la source
Tant que vous êtes autorisé à utiliser exec () , vous pouvez exécuter des commandes shell via votre code PHP.
Donc, en supposant que vous sachiez comment écrire le mysqldump dans la ligne de commande, ie
alors vous pouvez l'utiliser comme paramètre de la fonction exec ().
la source
La réponse de MajorLeo m'a orienté dans la bonne direction, mais cela n'a pas fonctionné pour moi. J'ai trouvé ce site qui suit la même approche et qui a fonctionné.
J'espère que cela aide quelqu'un d'autre!
la source
Eh bien, vous pouvez toujours utiliser l'appel de fonction système de PHP.
http://php.net/manual/en/function.system.php
http://www.php.net/manual/en/function.exec.php
Cela exécute n'importe quel programme de ligne de commande de PHP.
la source
<?php exec('mysqldump --all-databases > /your/path/to/test.sql'); ?>
Vous pouvez étendre la commande avec toutes les options que mysqldump prend bien sûr. Utilisez
man mysqldump
pour plus d'options (mais je suppose que vous le saviez;))la source
Voici une autre option native basée sur PHP: https://github.com/2createStudio/shuttle-export
la source
la source
Aucun des codes ci-dessus n'a fonctionné pour moi. J'utilise Windows. Le code ci-dessous a fonctionné pour moi ...
Cela enregistrera le fichier dans votre dossier de projet en fonction de votre requête, quelles que soient les données souhaitées.
la source
Pour vider la base de données en utilisant shell_exec (), voici la méthode:
la source
la source