Migration de MySQL 4.1 vers MySQL 5.0 avec mysql_upgrade

Introduction

Un bref article sur la méthodologie pour migrer un serveur MySQL 4.0/4.1 vers MySQL 5.0 avec le binaire mysql_upgrade introduit avec MySQL 5.0.

A partir de MySQL 5.0, l'exécution du script mysql_fix_privilege_tables ne suffit plus et toutes les opérations de migration d'un serveur MySQL sont désormais encapsulées dans le binaire mysql_upgrade fourni pour toutes les plateformes à partir de la version 5.0.25 et qui prend en charge la migration de la base système mysql et la migration éventuelle des tables dans les bases utilisateur.

Généralités sur mysql_upgrade avec MySQL 5.0

mysql_upgrade est désormais fourni à partir de la version 5.0 de MySQL pour migrer un serveur MySQL vers la version courante.

Le binaire mysql_upgrade vérifie (check) dans toutes les tables de toutes les bases de données toute éventuelle incompatibilité avec la version courante de MySQL. Si une table possède une éventuelle incompatibilité, elle est vérifiée et si un problème est détecté, la table est réparée.

mysql_upgrade prend en charge également la migration des tables systèmes de la base mysql afin de bénéficier des nouveaux privilèges et nouvelles fonctionnalités éventuellement ajoutées avec la nouvelle version (par exemple la table proc pour les procédures stockées et triggers introduits avec la version 5.0).

Toutes les tables vérifiées et réparées sont marquées avec la version courante de MySQL. Ceci permet d'éviter de vérifier et réparer à nouveau la table si mysql_upgrade est à nouveau exécuté avec la même version de serveur.

mysql_upgrade sauvegarde également le numéro de version de MySQL dans un fichier appelé mysql_upgrade.info dans le répertoire des données (datadir) du serveur MySQL. Ce fichier est utilisé pour vérifier rapidement si les tables ont déjà été analysées pour la version en cours, auquel cas cette étape de vérification/réparation est écartée lors d'un nouvel appel de mysql_upgrade. Pour ignorer le fichier mysql_upgrade.info, l'option --force doit être invoquée dans l'appel du binaire mysql_upgrade.

Mode opératoire de mysql_upgrade (mysqlcheck et mysql_fix_privilege_tables)

Pour vérifier/réparer les tables et migrer les tables systèmes, mysql_upgrade exécute les commandes ci-dessous :

shell > mysqlcheck --check-upgrade --all-databases --auto-repair
shell > mysql_fix_privilege_tables 

L'option --check-upgrade est une nouveauté de la version 5.0 (5.0.19 plus exactement) du binaire mysqlcheck, option qui permet de déclencher les commandes SQL CHECK TABLE avec la nouvelle option FOR UPGRADE :

CHECK TABLE <tblname> FOR UPGRADE 

Outre le fait qu'avec la version 5.0 la commande CHECK TABLE permet également de détecter les vues invalides (référencement à des tables inexistantes ou altérées etc...), l'option FOR UPGRADE de la commande CHECK TABLE vérifie que la table est compatible avec la version courante de MySQL (types de données, types d'indexes etc...).

Options du binaire mysql_upgrade

Pour utiliser mysql_upgrade, le serveur MySQL doit être démarré avec la nouvelle version MySQL et le binaire mysql_upgrade est lancé avec les options adéquates :

shell > mysql_upgrade [options] 

Les options du binaire mysql_upgrade sont les suivantes :

--help (-?) affiche le message d'aide sur les options de mysql_upgrade.
--basedir=path (-b) chemin du répertoire d'installation de MySQL (/Software/mysql/mysql-5.0)
--datadir=path (-d) chemin du répertoire des données (/dba/mysql/AXA_P1_MYS/data) et contenant notamment la base de données mysql.
--force (-f) force l'exécution du binaire mysqlcheck même si mysql_upgrade a déjà été exécuté pour la version courante de MySQL (le fichier mysql_upgrade.info est ignoré).
--user (-u) user MySQL pour se connecter au serveur.
--verbose (-v) applique un mode plus verbeux pour une meilleure visibilité des opérations lancées par la programme mysql_upgrade.

D'autres options indispensables peuvent être passées à mysqlcheck et mysql_fix_privilege_tables. Aussi il peut être nécessaire de passer les autres options ci-dessous avec mysql_upgrade :

--password (-p) mot de passe du user MySQL pour se connecter au serveur.
--port (-P) port du serveur MySQL.
--socket (-S) socket du serveur MySQL.

Exemple concret - migration du serveur QFX_P1_MYS

Voici un exemple concret d'une migration avec mysql_upgrade sur le serveur MySQL QFX_P1_MYS installé selon la norme décrite dans le document