 dupliquer automatiquement une base de données mysql d un serveur distant sur un serveur local but de ce document ce document contient quelques programmes pour sauvegarder et dupliquer automatiquement une base de données mysql d un site internet sur un serveur local le but final étant de dupliquer un site sous spip ou un wikini ou tout autre programme en php mysql d un serveur distant sur un serveur local sans aucune intervention manuelle ce premier article donne une solution pour dupliquer la base de données l article suivant donnera une solution pour dupliquer tous les fichiers html php jpg du site distant sur le site local objectifs de cette sauvegarde la duplication de la base de données doit pouvoir se réaliser sans aucune intervention car le programmer sera placé dans une crontab d un poste sous linux et sera donc lancé automatiquement tous les jours à heure fixe de plus cette duplication doit fonctionner avec un simple accès ftp au serveur pas d accès total de type ssh  sauvegarde de la base de données pour sauvegarder la base de données de spip il est possible d utiliser la procédure manuelle en passant par l interface utilisateur sauvegarde dans un fichier xml mais il n est pas possible d automatiser cette procédure pour le wikini il n existe pas de procédure de sauvegarde et il faut obligatoirement passer par un autre programme comme phpmyadmin pour arriver à faire une sauvegarde de la base de données mais une nouvelle fois il n est pas possible d automatiser la procédure et celleci est relativement longue compliquée et dangereuse de plus l installation de phpmyadmin sur un serveur ouvre des failles de sécurité qui pourraient compromettre les données programme pour faire un dump d une table mysql sur un serveur sans accès ssh la seule solution à ma connaissance pour sauvegarder la base de données est de passer par un programme php qui va faire un dump de la table dans un fichier texte ensuite il faudra récupérer par ftp ce fichier texte pour l utiliser pour créer la table dans la base de données locale ce premier programme va permettre de sauvegarder dans un fichier texte le contenu d une table de mysql il serait possible de créer un script permettant de sauvegarder toutes les tables de la base de données mais ce script serait probablement trop long à s exécuter et le serveur web abandonnerait et enverrait une erreur avant d avoir terminé c est pour cela que j ai réalisé un script permettant de sauvegarder uniquement une table ce script sera ensuite appelé autant de fois que nécessaire pour sauvegarder toutes les tables pour faire fonctionner ce programme il faut que le serveur html puisse créer et accéder en écriture au fichier sqldumpsql si ce n est pas le cas il faut créer ce fichier manuellement et lui donner un accès complet ensuite il faut renseigner le nom du serveur l utilisateur le mot de passe et la base de données à utiliser pour effectuer la sauvegarde il est possible de préciser le nombre maximum de lignes à transférer 10000 par défaut pour finir il faut placer ce programme sur le serveur à sauvegarder voici le programme php nommé  savemysqldistantphp  php serveur wwwmonserveurcom serveur contenant la base de données utilisateur monutilisateur utilisateur de connexion à la base de données motdepasse monmotdepasse mot de passe base mabase nom de la base de données nbligmax 10000 nombre maximum d enregistrements à sauvegarder lefichier sqldumpsql nom du fichier contenant le dump de la table latable httpgetvars latable nom de la table passé en paramètre if latable echo le paramètre latable est obligatoire exit donnees mysqlstructure serveur utilisateur motdepasse base latable nbligmax fp fopen lefichier w if fp echo impossible d écrire dans le fichier lefichier exit nbcar fputs fp donnees fclose fp function mysqlstructure serveur utilisateur motdepasse base latable nbligmax ct 0 mysqlconnect serveur utilisateur motdepasse or die impossible de se connecter à serveur sous utilisateur n mysqlselectdb base resultat mysqlquery show create table latable if resultat insertions tableau mysqlfetcharray resultat tableau 1 dumpsql strreplace n tableau 1 reqtable mysqlquery select from latable nbrchamps mysqlnumfields reqtable nblig mysqlnumrows reqtable while ligne mysqlfetcharray reqtable and ct nbligmax insertions insert into latable values for i 0 i nbrchamps1 i insertions mysqlrealescapestring ligne i insertions substr insertions 0 2 insertions n ct if insertions dumpsql insertions if nbligmax nblig echo attention nbligmax nblig lignes transférées pour trim latable else echo latable nblig 1 lignes transférées dumpsql n return implode r dumpsql  sécuriser l accès au programme ce programme ouvre une faille de sécurité sur le serveur car il permet de sauvegarder n importe quelle table et ensuite de télécharger le fichier sqldumpsql il est donc fortement conseillé de placer ce programme dans un dossier sécurisé par un fichier htaccess la sécurisation d un dossier sur le serveur dépasse le cadre de ce mémo exécuter ce programme pour exécuter ce programme il suffit de saisir son adresse dans un navigateur sans oublier de mettre en paramètre le nom de la table à sauvegarder http wwwmonserveurcom save savemysqldistantphp latable matable pour exécuter ce programme en ligne de commande il faut utiliser un navigateur qui fonctionne en ligne de commande comme lynx si l accès au programme n est pas sécurisé la commande est la suivante lynx dump http wwwmonserveurcom save savemysqldistantphp latable matable si l accès au programme est sécurisé la commande est la suivante lynx dump http wwwmonserveurcom save savemysqldistantphp latable matable auth lelogin lemotdepasse  obtenir la liste des tables de la base de données le programme précédent permet uniquement de sauvegarder une table donc il est nécessaire de connaître la liste des tables pour pouvoir sauvegarder toute la base de données le programme suivant qu il faut placer également sur le serveur et de préférence dans un dossier sécurisé permet d obtenir la liste des tables il faut renseigner le nom du serveur l utilisateur le mot de passe et la base de données à interroger il est possible de préciser une liste de tables à exclure de la liste voici le programme php nommé  savemysqllistetablesphp  php serveur wwwmonserveurcom serveur contenant la base de données utilisateur monutilisateur utilisateur de connexion à la base de données motdepasse monmotdepasse mot de passe base mabase nom de la base de données liste des tables à exclure de la sauvegarde excluretable array spipvisitesarticles spipindexarticles mysqlconnect serveur utilisateur motdepasse or die impossible de se connecter à serveur sous utilisateur n mysqlselectdb base tables mysqllisttables base while donnees mysqlfetcharray tables table donnees 0 if inarray table excluretable false echo table ce programme peut également se lancer en ligne de commande avec lynx lynx dump http wwwmonserveurcom save savemysqllistetablesphp dupliquer la base de données distante sur un serveur locale ce programme va donc utiliser les deux programmes précédents pour obtenir la liste des tables et sauvegarder chaque table individuellement chaque table sauvegardée sera ensuite téléchargée en local via un accès ftp et sera intégrée dans la base de données du serveur local ce programme contrairement aux deux précédents sera lancé en local et non pas sur un serveur distant ce qui permet de le lancer directement en tant que script et non pas à travers un navigateur attention  ce programme commence par supprimer la table locale avant de la recréer à partir des données du serveur distant voici le programme php nommé  savemysqllocalphp  usr bin php php serveur wwwmonserveurcom serveur contenant la base de données et le serveur ftp utilisateur monutilisateur utilisateur de connexion à la base de données motdepasse monmotdepasse mot de passe base mabase nom de la base de données serveurdistant wwwmonserveurcom serveur distant contenant la base de données logindistant monutilisateur1 utilisateur de connexion à la base de données motdepassedistant monmotdepasse1 mot de passe serveurlocal localhost serveur local contenant la base de données loginlocal monutilisateur2 utilisateur de connexion à la base de données motdepasselocal monmotdepasse2 mot de passe baselocal mabase nom de la base de données motdepassesecurite monmotdepasse3 mot de passe pour l accès au site sécurisé chdir tmp dossier de téléchargement du fichier sqldumpsql récupération de la liste des tables en lancant un script distant lestables lynx dump http wwwcoagulorg savesite savemysqllistetablesphp auth logindistant motdepassesecurite tabtables explode n lestables echo count tabtables tables à transférer n tabtables vide permet de vider le fichier sqldumpsql for i 0 i lancement automatique du programme pour exécuter le programme précédent il suffit de le lancer en ligne de commande savemysqllocalphp pour exécuter ce programme automatiquement à heure fixe il faut le placer dans un fichier crontab pour modifier le fichier crontab d un utilisateur il faut saisir la commande suivante crontab e par exemple pour lancer le programme tous les jours à 2230 il faut écrire la ligne suivante dans le crontab 30 22 lecheminduprogramme savemysqllocalphp historique des modifications version date commentaire 01 040505 création par tony galmiche  ftp  