Votre site web est en production, mais vous détectez une anomalie sur la production, mais impossible de la reproduire en local. L'anomalie est généralement liée au jeu de données et donc, vous décidez de:
Ces 5 étapes, sur la vie d'une application vous allez les exécuter des dizaines de fois.
Entre en jeu un mini script qui va effectuer ces 5 étapes pour vous, en une seule ligne.
Prennez le code ci-dessous et sauvez le dans une fichier "copy_prod_db.sh".
Le script s'utilise ainsi:
./copy_prod_db.sh user@host host_db_name host_db_user host_db_password [local_db_name] [local_db_user] [local_db_password]
Le premier paramètre correspond au login et à l'adresse du serveur distant.
Le second paramètre est le nom de la base de données sur le serveur distant.
Le troisième paramètre est le nom de l'utilisateur de la base de données sur le serveur distant.
Le quatrième paramètre est le mot de passe de la base de données sur le serveur distant.
Les 3 derniers paramètres sont optionnels. Il s'agit des nom/login/password de la base de données locale. Si ils ne sont pas spécifiés, le script tentera de créer une base de données avec le même nom, en utilisant l'utilisateur root, sans mot de passe.
#!/bin/sh if [ $# -le 3 ] then echo "copy_prod_db.sh expects at least 4 parameters: " echo "copy_prod_db.sh host host_db_name host_db_user host_db_password [local_db_name] [local_db_user] [local_db_password]" echo "Note:" echo "- if no local database name is given, the host_db_name will be used" echo "- if no local db user is given, root will be used" echo "- if no local db password is given, an empty password will be used" exit 1 fi SSH_HOST=$1 HOST_DB_NAME=$2 HOST_DB_USER=$3 HOST_DB_PASSWORD=$4 if [ $# -ge 5 ] then LOCAL_DB_NAME=$5 else LOCAL_DB_NAME=$HOST_DB_NAME fi if [ $# -ge 6 ] then LOCAL_DB_USER=$6 else LOCAL_DB_USER=root fi if [ $# -ge 7 ] then LOCAL_DB_PASSWORD=-p$7 else LOCAL_DB_PASSWORD= fi echo "DROP DATABASE IF EXISTS $LOCAL_DB_NAME" | mysql -u$LOCAL_DB_USER $LOCAL_DB_PASSWORD echo "CREATE DATABASE $LOCAL_DB_NAME DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci" | mysql -u$LOCAL_DB_USER $LOCAL_DB_PASSWORD ssh $SSH_HOST "mysqldump -u$HOST_DB_USER -p'$HOST_DB_PASSWORD' $HOST_DB_NAME" | mysql -u$LOCAL_DB_USER $LOCAL_DB_PASSWORD $LOCAL_DB_NAME
Vous remarquerez qu'une fois tous les paramètres spécifiés, le dump et le chargement sont effectués en une seule ligne, le dump étant "pipé" directement dans la commande de chargement.
Une dernière note: il s'agit bien évidemment d'un script "sh", donc exécutable sous Linux, mais aussi sous Windows si vous utilisez Cygwin.