Voici un script shell bash, mysqlrename.sh, qui permet de renommer correctement une base de données MySQL.
En supposant que le nom actuel de la base soit CURRENT_NAME et que le nouveau nom devra être NEW_NAME, le script procède ainsi:
- il crée une base vierge NEW_NAME ; s'il échoue, il s'arrête ;
- il fait un dump de la base CURRENT_NAME en redirigeant la sortie standard dans un nouveau processus MySQL qui exécute les instructions du dump en utilisant la base NEW_NAME (utilisation de l'option -D) ; s'il échoue, il s'arrête encore immédiatement ;
- enfin, si tout c'est correctement déroulé, il supprime la base CURRENT_NAME.
Le script admet les options -u et -p de MySQL qui permettent de définir respectivement l'utilisateur et le mot de passe et il attend évidement deux arguments: le CURRENT_NAME et le NEW_NAME, dans cet ordre.
Cela peut donc donner mysqlrename.sh -uUtilisateur -pMotDePasse CURRENT_BASE NEW_BASE ou encore
mysqlrename.sh -uUtilisateur CURRENT_BASE NEW_BASE ou simplement
mysqlrename.sh CURRENT_BASE NEW_BASE
Le script est tellement simple qu'il donne l'occasion de se rafraîchir la mémoire sur le traitement des options et des paramètres par l'utilisation conjointe de getopts et shift.
#!/bin/bash # mysqlrename.sh: rename MySQL database # Copyright (C) 2009 Philippe Ivaldi http://www.piprime.fr/ # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. function help() { printf "Usage: %s: [-uValue] [-pValue] CURRENT_NAME NEW_NAME\n" $self echo "Rename the MySQL database CURRENT_NAME to NEW_NAME" exit 1 } function abort { error=$? echo 'Process aborted !' exit $error } USER='' PASS='' self=$(basename $0) while getopts u:p:h option do case $option in u) USER=" -u${OPTARG}" ;; p) PASS="${OPTARG}" ;; h) help ;; *) echo -e "Try ${self} -h" exit 1 ;; esac done shift $(($OPTIND-1)) # On passe aux arguments # Il faut exactement deux arguments [ $# -ne 2 ] && help OPTIONS="-p${PASS}${USER}" mysql $OPTIONS -e"CREATE DATABASE \`$2\`;" || abort mysqldump $OPTIONS "$1" | mysql $OPTIONS -D "$2" || abort mysql $OPTIONS -e"DROP DATABASE \`$1\`;"







