Que ce soit pour changer de version majeure de Mysql, changer de système ou de serveur physique, il y a différentes raisons de vouloir migrer un serveur Mysql.
La procédure ci-dessous propose de migrer toutes les bases, utilisateurs et droits d’accès d’un serveur Mysql vers un autre.
Nous nous concentrerons ici sur cette tache (et non sur l’installation/tunning de Mysql).
Version Mémo
En root, sous Debian ou Ubuntu
Sur l’ancien serveur
USER="--defaults-extra-file=/etc/mysql/debian.cnf" for BASE in $(mysql ${USER} -Bse 'show databases') ; do echo "sauvegarde de ${BASE}" mysqldump ${USER} -f ${BASE} --routines --triggers > ${BASE}.sql done rm information_schema.sql mysql.sql mysqldump ${USER} --no-create-info --complete-insert --replace mysql user > mysql_user.sql mysqldump ${USER} --no-create-info --complete-insert --replace mysql db > mysql_db.sql
Sur le nouveau serveur
USER="--defaults-extra-file=/etc/mysql/debian.cnf" for FIC in *.sql ; do BASE=`echo ${FIC} | sed -e "s/\.sql//g"` echo "import de ${BASE}" mysql ${USER} -Bse "CREATE DATABASE \`${BASE}\`" mysql ${USER} -f ${BASE} < ${FIC} done mysql -f ${USER} mysql < mysql_user.sql mysql -f ${USER} mysql < mysql_db.sql
Version Longue, avec explication de texte
En root, sous Debian ou Ubuntu, dans un répertoire vide de préférence.
Etape 1, Sur l’ancien serveur
USER="--defaults-extra-file=/etc/mysql/debian.cnf"
Nous utiliserons le compte « debian-sys-maint » créé à l’installation par Debian / Ubuntu pour éviter de passer un login/pass en paramètre.
for BASE in $(mysql ${USER} -Bse 'show databases') ; do echo "sauvegarde de ${BASE}" mysqldump ${USER} -f ${BASE} --routines --triggers > ${BASE}.sql done
On itère sur toutes les bases pour les dumper.
Des erreurs pourrons éventuellement être affichés pendant le dump des bases « information_schema » et « mysql », ce n’est pas grave, nous n’en avons pas besoins sous cette forme.
Nous allons d’ailleurs supprimer les dumps de ces bases:
rm information_schema.sql mysql.sql
Nous allons maintenant dumper les comptes mysql & droits :
mysqldump ${USER} --no-create-info --complete-insert --replace mysql user > mysql_user.sql mysqldump ${USER} --no-create-info --complete-insert --replace mysql db > mysql_db.sql
Pour ce dump, on crée un fichier non intrusif, qui ne supprime pas les tables existantes au préalable et qui utilise une syntaxe sql « complète », permettant d’éviter le piège de la table user, dont l’ordre & les colonnes diffèrent souvent d’une version à l’autre.
Etape 2, Transfert des fichiers & installation Mysql sur le nouveau serveur
Tout les dumps ont été générés dans le répertoire courant sur l’ancien serveur.
Utilisez votre mode de transfert favori (scp, ftp, nfs ou autre) pour les déplacer vers le nouveau.
Lancez l’installation de Mysql sur le nouveau serveur, et procédez à la config et/ou tunning selon votre besoin.
Etape 3, Sur le nouveau serveur
Allez dans le répertoire où vous avez rapatrié les fichiers.
USER="--defaults-extra-file=/etc/mysql/debian.cnf"
Même technique que précédent pour se connecter.
for FIC in *.sql ; do BASE=`echo ${FIC} | sed -e "s/\.sql//g"` echo "import de ${BASE}" mysql ${USER} -Bse "CREATE DATABASE \`${BASE}\`" mysql ${USER} -f ${BASE} < ${FIC} done
On itère sur tout les fichier pour créer les bases et les importer.
mysql -f ${USER} mysql < mysql_user.sql mysql -f ${USER} mysql < mysql_db.sql
On importe des comptes utilisateurs, ainsi que les droits.
!Attention! Suite à cette import, le mot de passe du compte root du nouveau serveur est maintenant celui de l’ancien serveur.