Articles contenant le tag mysql-server

Migrer les bases de données d’un serveur Mysql

Attention, cet article est ancien de 9 ans. Les versions systèmes / de logiciels / sites évoqués ont forcément évolués depuis. Merci de garder cette ancienneté en tête pendant votre lecture.

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.

, , , , ,

Pas de commentaire