Script bash pour transférer une base de donnée MySQL d’un serveur à l’autre
Je travaillait sur un mandat récemment pour transférer plusieurs dizaines de sites web vers une nouvelle infrastructure. Dans ce billet j’expliquerai le processus que j’ai utilisé pour en finir par produire un script bash qui pourrait vous être utile.
A propos du projet
Considérant que certains sites avaient plus d’une base de donnée il était hors de question de faire a bras les lignes mysqldump, ssh (en fait le transfert se fait en compressant le fichier et le copiant via une redirection gzip avec cat), mysql pour, en ordre, dumper la base de donnée, la transférer, et la restaurer…. sans oublier les create users pour chaque.
Je me suis dit: faisons-en un script!
Les prérequis
Nous voulions…
- Faciliter le travail car on savait qu’il faudrait souvent re-re-transférer chacune des bases de données;
Car nous devions faire fonctionner le site sur le nouveau serveur avant de transférer les DNS. - Entrer une commande minimale et en conserver les configurations;
- Que le nouveau serveur réalise la tâche a lui-seul, sans prérequis sur le serveur distant;
- Utiliser les commandes minimales et pouvoir réutiliser le scripts dans ma propre librairie de script bash;
- Éviter de répéter, parceque c’est «con»
Ce que le script fait
1. Transférer la base de donnée
1 | $ migratemysql transfer |
- Lire le fichier de configuration migratemysql.conf dans le dossier courrant (ou en créer un)
- Se connecter en SSH
- Lancer mysqldump en conservant le tmp paramétrable (éviter de remplir le disque)
- Compresser le .sql en gzip (.sql.gz)
- Transférer via scp
2. Importer dans le serveur local
1 | $ migratemysql import |
- Lire le fichier de configuration migratemysql.conf dans le dossier courrant
- Véfirier si le .sql.gz existe…
- oui: le décompresser
- si le .sql existe déja, écrire par dessus? (attente d’une réponse a l’usager)
- oui: overwrite, continuer…
- non: DIE!
- si le .sql existe déja, écrire par dessus? (attente d’une réponse a l’usager)
- non: continuer
- oui: le décompresser
- Véfirier si le .sql existe…
- oui: continuer
- non: DIE!
- Se connecter au serveur précisé, si erreur… DIE!
- Véfirier si la database existe sur le serveur
- oui…
- Retenir de ne pas effacer le compte de base de donnée (PRIVILEGES) (variable “OVERRIDEUSERCREATION“)
- Effacer pour ré-insérer? (attente d’une réponse a l’usager)
- Créer les drop statements? (oui ou non… une switch “ALT_PURGE” dans le fichier de config)
- oui: générer le script, puis continuer
- non: continuer (utile si le fichier SQL a les DROP statements)
- non: continuer…
- oui…
- (si “OVERRIDEUSERCREATION” existe, ne pas faire) Créer les PRIVILEGES spécifique pour la table a créer
- Exécuter le .sql
- Afficher a l’écran un snippet de code PHP pour le fichier de config (format WordPress)
Le script
Pour le télécharger
Installer
- Télécharger
1
renoirb@ubuntu:~$ wget http://renoirboulanger.com/wp-content/uploads/scripts/migratemysql.gz
- Extraire
1
renoirb@ubuntu:~$ gunzip migratemysql.gz
- Déplacer dans un dossier du PATH
1 2
renoirb@ubuntu:~$ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/games:/home/renoirb/scripts:/home/renoirb/scripts
Note Personnellement, j’ai mon propre dossier scripts dans mon home, mais c’est à vous de voir
Sources
Le script a été fait en collaboration avec Etienne Lachance qui est nettement plus rapide que moi dans le scripting BASH
