====== Installer mysql 4 en plus de mysql 3 ======
Drôle d'idée direz-vous...
C'est en fait pour être sûr que tout se passe bien sous mysql 4, mais surtout pour faire son install du 4 tranquille pendant que le 3 tourne toujours, et basculer de 3 à 4 en ne coupant mysql que qq secondes. Si on s'est planté quelque part dans la config de mysql4, on peut repasser au 3 en qq secondes aussi.
Je me suis servi de http://dev.mysql.com/doc/mysql/fr/multiple-unix-servers.html, qui vous sera aussi sûrement utile.
Si l'on veut remplacer le 3 par le 4, c'est pareil, mais en plus simple car on peut garder les mêmes chemins (et une install via le gestionnaire de paquets de votre distrib fera ça tout seul).
===== Récupération des bases mysql3 =====
Pour dupliquer les bases mysql3 pour mysql4, il va falloir arrêter mysql le temps de la copie. Si c'est vraiment gênant (ça peut l'être sur un serveur de prod avec plusieurs Go de data), il faut soit utiliser mysqlhotcopy, (il faut avoir perl et DBD::mysql) soit faire un dump de toutes les bases avec mysql3, et les récupérer avec mysql4 (dans ce cas, on démarrera mysql4 avec la base mysql fournie par défaut).
Une autre solution de copie à chaud peut être de lancer la commande mysql 'FLUSH TABLES WITH READ LOCK' sur une base, copier le répertoire de cette base puis lancer la commande mysql 'UNLOCK TABLES'.
Si vous avez beaucoup de tables, un petit script qui boucle sur les bases peut aider.
# correspond souvent à /var/lib/mysql mais cela peut varier suivant votre distrib / config
/etc/init.d/mysql stop && cp -a && /etc/init.d/mysql start
#on met de coté les bases fournies par défaut et on crée un lien du rep data de mysql vers ce nouveaux rep
cd
mv data data.ini
ln -s //data
===== Installation mysql 4 =====
* Récup de la distrib standard en binaire
# mon rep de source, ça peut être n'importe où
cd /home/src
wget http://dev.mysql.com/get/Downloads/MySQL-4.0/mysql-standard-4.0.25-pc-linux-gnu-i686.tar.gz/from/ftp://mir1.ovh.net/ftp.mysql.com/
tar xvzf mysql-standard-4.0.25-pc-linux-gnu-i686.tar.gz
mv mysql-standard-4.0.25-pc-linux-gnu-i686 /usr/local/
# un lien pour se simplifier le chemin
ln -s /usr/local/mysql-standard-4.0.25-pc-linux-gnu-i686 /usr/local/mysql4
Tout ça est arbitraire, personnellement, je préfère mettre mon rep mysql-standard-4.0.25-pc-linux-gnu-i686 dans /urs/local et faire un lien symbolique mysql4 dessus, mais chacun fait comme il veut.
===== Configuration mysql4 =====
Il faut mettre le fichier de config dans le répertoire des bases de données de mysql4 pour qu'il écrase le /etc/my.cnf de mysql3. Vérifier ce que contient /etc/my.cnf et remettez toutes les valeurs qu'il contient dans votre /my.cnf, pour qu'une future modif de mysql3 ne change rien à mysql4.
cd /usr/local/mysql4
#On met de côté la base mysql fournie par défaut pour récupérer nos bases qui viennent de mysql3
mv data data.ini
ln -s data
# on prend exemple sur les fichiers de config fourni dans support-files/ (j'ai choisi my-large, regardez les autres pour voir celui qui est le plus adapté à votre config)
cp support-files/my-large.cnf data/my.cnf
Il faut changer quelques valeurs de /my.cnf, pour indiquer les chemins des bases de donnees, des logs, etc... et le port 3307 (par exemple) si l'on a déjà mysql3 sur le 3306.
Il reste à installer le script pour le démarrage auto au boot. Le script fourni (support-files/mysql.server) prend /etc/my.cnf par défaut, mais un fichier my.cnf dans le datadir ecrasera les options du précédent.
cp /usr/local/mysql4/support-files/mysql.server /etc/init.d/mysql4
# ensuite, il faut créer les liens symboliques pour arrêt et redémarrage auto
# cela dépend des distribs
# sous RedHat, c'est 'chkconfig --add mysql4', pour debian, cela sera plutôt 'update-rc.d'
# après lancement de la bonne commande, ou bien création manuelle des liens
# (sur RedHat, le default runlevel est le 3 mais cela peut changer suivant les distrib. Le 92 est arbitraire aussi)
# avec par exemple
# ln -s /etc/init.d/mysql4 /etc/rc3.d/S92mysql4
# ln -s /etc/init.d/mysql4 /etc/rc6.d/K92mysql4
# ln -s /etc/init.d/mysql4 /etc/rc0.d/K92mysql4
# pour si vous avez la même chose pour mysql3 et 4, lancer 'l /etc/rc*.d/*mysql4' et comparer, ajouter manuellement les liens manquants éventuels'.
Il faut quand même éditer ce script, pour ajouter quelques variable
# On modifie basedir et datadir
basedir=/usr/local/mysql4
datadir=$basedir/dataPATH=/sbin:/usr/sbin:/bin:/usr/bin:$basedir/bin
# et on ajoute port et socket que l'on exporte avec le PATH
MYSQL_TCP_PORT=3307
MYSQL_UNIX_PORT=$datadir/mysql.sock
export PATH MYSQL_TCP_PORT MYSQL_UNIX_PORT
# la ligne précédente était 'export PATH' avant ajout
Reste à lancer mysql4 avec /etc/init.d/mysql4 start
Pour ceux qui ne veulent pas installer ce script de démarrage automatique, vous pouvez lancer directement mysql4 avec par exemple
cd /usr/local/mysql4 && ./bin/mysqld_safe --datadir=data --err-log=data/mysql4.log --pid-file=data/mysqld.pid --port=3307 --socket=data/mysql.sock >/dev/null 2>&1 &
# si vous avez précisé ces options dans data/my.cnf, un '/usr/local/mysql4/bin/mysqld_safe --datadir=data >/dev/null 2>&1 &' doit suffire
# 'ps auxf' pour voir les threads si vous voulez
# dépend de l'emplacement du log
cat /var/log/mysql4.log
===== Remarques =====
* On teste avec '/usr/local/mysql4/bin/mysql -uroot -p' (en entrant le mot de passe root de mysql3).
* Pour récupérer le dump de mysql3, il faut indiquer '--datadir=./data.ini' au 1er démarrage, et lancer 'mysql -uroot < dump_mysql3.sql' (pas de pass root par défaut à la 1ere install).
* Il faut mettre à jour les tables définissant les droits (de la base mysql), en lançant /usr/local/mysql4/bin/mysql_fix_privilege_tables (cf http://dev.mysql.com/doc/mysql/fr/upgrading-from-3-23.html).
* ATENTION, l'appel de mysqladmin, mysqldump & co appellera la version 3. Pour appeler la version 4, il faut
* préciser le chemin absolu /usr/local/mysql4/bin/...
* renommer tous les binaires *mysql* (qui doivent être dans /usr/bin ou usr/local/bin ou ...) en *mysql3* et, soit mettre /usr/local/mysql4/bin/ dans votre PATH, soit ajouter des liens symboliques comme par exemple
ln -s /usr/local/mysql4/bin/mysql /usr/bin/mysql
ln -s /usr/local/mysql4/bin/mysqladmin /usr/bin/mysqladmin
ln -s /usr/local/mysql4/bin/mysqldump /usr/bin/mysqldump
etc...
Si vous voyez des erreurs, ou des ajouts à faire, n'hésitez pas à envoyer un mail à dcaillibaud _ad_ free.fr