Retour : Page Principale > sommaire aide > sommaire aide-mémos

Aide-Mémo pour installer plusieurs instances de Mysql sur une machine


Note : en général ça ne sert pas à grand chose à part tout rendre compliqué et transformer le système en sac de nœuds. Sauf exception, préférer l'installation de paquets Debian, c'est fait pour.

Ressources


Installation de Mysql multi instances

  • Lancer le script : /home/admin/scripts/mysql_5.5.sh (il doit avoir Ă©tĂ© prĂ©parer pour lancer plusieurs instances => voir Agathis)
  • VĂ©rifier la prĂ©sence des binaires dans le dossier : /usr/local/mysql/5.5/

  • CrĂ©er un groupe mysql : groupadd mysql
  • CrĂ©er un utilisateur mysql : useradd -g mysql mysql

  • CrĂ©er un dossier /home/mysql/5.5/ : mkdir /home/mysql/5.5
  • Donner les droits et les propriĂ©tĂ©s Ă  mysql :
    • chmod 700 /home/mysql/5.5
    • chown mysql:mysql /home/mysql/5.5
  • RecrĂ©er le lien vers les data dans /usr/local/mysql/5.5 :
    • cd /usr/local/mysql/5.5
    • rm -f data
    • ln -s /home/mysql/5.5 data

  • CrĂ©er un dossier qui contiendra les logs mysql (error.log et slow-query.log) : mkdir /home/mysql/5.5/log
  • CrĂ©er un lien vers le fichier error.log : ln -s /home/mysql/5.5/agathis.err /home/log/mysql-5.5/mysql-55-error.log
  • Rediriger les logs : ln -s /home/mysql/5.5/log /home/log/mysql-5.5
  • Copier le fichier logrotate fournit par mysql : cp /usr/local/mysql/5.5/support-files/mysql-log-rotate /etc/logrotate.d/mysql-55
  • Changer les droits du fichier : chmod 644 /etc/logrotate.d/mysql-55
  • Éditer le logrotate et modifier les chemins vers /usr/local/mysql/5.5 : vi /etc/logrotate.d/mysql-55
  • Éditer le fichier et changer :
    • le chemin /usr/local/mysql/5.5/data/mysqld.log { vers le fichier de log par /home/mysql/5.5/log/mysqld.log /home/mysql/5.5/log/mysql-slow.log {
    • le paramètre daily par monthly

  • CrĂ©er une fichier qui contiendra le mot de passe mysql pour l'utilisateur root :
    • vi /root/.my.cnf et ajouter le contenu ci-dessous (indiquer les mots de passe)
    • Donner les bons droits au fichier : chmod 600 /root/.my.cnf

  • CrĂ©er un dossier /etc/mysql/5.5/ : mkdir /etc/mysql; mkdir /etc/mysql/5.5
  • Copier le fichier my.cnf : cp -f /usr/local/mysql/support-files/my-large.cnf /etc/mysql/5.5/my.cnf
  • CrĂ©er un lien vers le fichier /etc/mysql/5.5/my.cnf :
    • cd /usr/local/mysql/5.5/
    • ln -s /etc/mysql/5.5/my.cnf my.cnf
  • Éditer le fichier my.cnf : vi /etc/mysql/5.5/my.cnf
    • Modifier les chemins et le port en fonction de l'instance de mysql.
    • Sous le groupe [mysqld] ajouter un paramètre : basedir = /usr/local/mysql/5.5

  • Lancement du script d'installation de Mysql : mysql_install_db
    • cd /usr/local/mysql/5.5/
    • ./scripts/mysql_install_db -defaults-file=/etc/mysql/5.5/my.cnf --user=mysql

  • Renommer le script d'initialisation : mv /etc/init.d/mysql /etc/init.d/mysql-55
  • Éditer fichier /etc/init.d/mysql-55 : vi /etc/init.d/mysql-55
    • Ligne 46, indiquer une valeur au paramètre basedir : basedir=/usr/local/mysql/5.5
    • Ligne 113, activer l'utilisation du moteur Federated en ajoutant --federated aux arguments de lancement de Mysql: other_args="--federated $*"
    • Ligne 138, ajouter après une nouvelle ligne : --port=*) port=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
    • Ligne 215, indiquer le chemin vers le fichier my.cnf : conf=/etc/mysql/5.5-test/my.cnf
    • Ligne 257, ajouter le drapeau -c pour indiquer le bon fichier my.cnf : parse_server_arguments `$print_defaults $extra_args mysqld server mysql_server mysql.server -c/etc/mysql/5.5-test/my.cnf`
    • Ligne 284, ajouter l'argument port Ă  la commande mysql_safe : $bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" --port="$port" $other_args >/dev/null 2>&1 &

  • DĂ©marrer mysql : /etc/init.d/mysql-55 start

  • Configurer mysql : mot de passe root...
    • Se rendre dans le dossier racine de l'installation en cours : cd /usr/local/mysql/5.5/
    • Lancer le script de sĂ©curitĂ© : ./bin/mysql_secure_installation
    • RĂ©pondre aux diffĂ©rentes questions et crĂ©er le mot de passe root.

Fichier /root/.my.cnf :
# Fichier permettant d'éxecuter les scripts mysql sans indiquer les mots de passes et login
# Utile pour /etc/logrotate.d/mysql
[mysqladmin]
user=root
password=<mot_de_passe>

[mysqldump]
host=localhost
user=root
password=<mot_de_passe>

[client]
host=localhost
user=root
password=<mot_de_passe>


Erreur : "The server quit without updating PID file (/usr/local/mysql/5.5/data/agathis.pid). ... failed!"
Ce message survient à chaque fois que Mysql rencontre un problème pour démarrer. Commencer par vérifier le fichier de log d'erreur de Mysql pour voir quel erreur a bloqué le démarrage de Mysql.
Exemples de problèmes rencontrés :
  • un mauvais nom de paramètre dans le fichier my.cnf
  • VĂ©rifier les droits (mysql:mysql) sur le dossier contenant les data.
  • Il se peut que ce problème provienne d'un fichier my.cnf utilisĂ© par dĂ©faut.
Pour voir la liste des endroits où les fichiers my.cnf sont recherchés lancer la commande :
/usr/local/mysql/5.5-test/bin/mysql --help | grep "my.cnf"
Ce qui affiche : order of preference, my.cnf, $MYSQL_TCP_PORT, built-in /etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/5.5-test/etc/my.cnf ~/.my.cn
Vérifier que seul votre fichier de configuration (ici : /usr/local/mysql/5.5-test/etc/my.cnf) existe et qu'aucun des autres emplacements n'en contient.

Configuration de Phpmyadmin

  • Éditer le fichier config.inc.php et ajouter une entrĂ©e pour chaque serveur.
  • Le fichier config.inc.php devrait ressembler Ă  l'extrait ci-dessous
  • Ajouter un utilisateur pma dans les diffĂ©rentes bases

Fichier config.inc.php pour mysql multi instances :
php
<?php 
$cfg['blowfish_secret'] = 'Définir votre blowfish_secret';
$cfg['MaxRows'] = 100;
$cfg['NaviWidth'] = '300';
$cfg['ThemeDefault'] = 'pmahomme';

/* Servers configuration */
$i = 0;

/* Server localhost (http) [1] - MYSQL-55 */
$i++;
$cfg['Servers'][$i]['host'] = '127.0.0.1';
$cfg['Servers'][$i]['connect_type'] = 'socket';
$cfg['Servers'][$i]['port'] = '3306';
$cfg['Servers'][$i]['socket'] = '/tmp/mysql-55.sock';
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['auth_type'] = 'cookie';
// Masquage de la base information_schema
$cfg['Servers'][$i]['hide_db'] = '^(information_schema|test)$';
// Base de données phpmyadmin pour les relations...
$cfg['Servers'][$i]['controluser'] = 'pma';
$cfg['Servers'][$i]['controlpass'] = 'Définir votre controlpass';
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
$cfg['Servers'][$i]['relation'] = 'pma_relation';
$cfg['Servers'][$i]['table_info'] = 'pma_table_info';
$cfg['Servers'][$i]['table_coords'] = 'pma_table_coords';
$cfg['Servers'][$i]['pdf_pages'] = 'pma_pdf_pages';
$cfg['Servers'][$i]['column_info'] = 'pma_column_info';
$cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark';
$cfg['Servers'][$i]['history'] = 'pma_history';
$cfg['Servers'][$i]['designer_coords'] = 'pma_designer_coords';
$cfg['Servers'][$i]['tracking'] = 'pma_tracking';
$cfg['Servers'][$i]['userconfig'] = 'pma_userconfig';
$cfg['Servers'][$i]['table_uiprefs'] = 'pma_table_uiprefs';
$cfg['Servers'][$i]['recent'] = 'pma_recent';
/* End of servers configuration */
/* Server localhost (http) [2] - MYSQL-55-TEST */
$i++;
$cfg['Servers'][$i]['host'] = '127.0.0.1';
$cfg['Servers'][$i]['connect_type'] = 'socket';
$cfg['Servers'][$i]['port'] = '3307';
$cfg['Servers'][$i]['socket'] = '/tmp/mysql-55-test.sock';
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['auth_type'] = 'cookie';
// Masquage de la base information_schema
$cfg['Servers'][$i]['hide_db'] = '^(information_schema|test)$';
// Base de données phpmyadmin pour les relations...
$cfg['Servers'][$i]['controluser'] = 'pma';
$cfg['Servers'][$i]['controlpass'] = 'Définir votre controlpass';
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
$cfg['Servers'][$i]['relation'] = 'pma_relation';
$cfg['Servers'][$i]['table_info'] = 'pma_table_info';
$cfg['Servers'][$i]['table_coords'] = 'pma_table_coords';
$cfg['Servers'][$i]['pdf_pages'] = 'pma_pdf_pages';
$cfg['Servers'][$i]['column_info'] = 'pma_column_info';
$cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark';
$cfg['Servers'][$i]['history'] = 'pma_history';
$cfg['Servers'][$i]['designer_coords'] = 'pma_designer_coords';
$cfg['Servers'][$i]['tracking'] = 'pma_tracking';
$cfg['Servers'][$i]['userconfig'] = 'pma_userconfig';
$cfg['Servers'][$i]['table_uiprefs'] = 'pma_table_uiprefs';
$cfg['Servers'][$i]['recent'] = 'pma_recent';
/* End of servers configuration */
?>

Configuration de Munin

  • Se rendre dans le dossier des plugins : cd /usr/share/munin/plugins/
  • Lister les plugins mysql : ls -al mysql*
    • mysql_
    • mysql_bytes
    • mysql_innodb
    • mysql_queries
    • mysql_slowqueries
    • mysql_threads
  • CrĂ©er une copie de chacun d'entre eux en y ajoutant le nom de l'instance mysql :
    • cp mysql_ mysql_55-test_
    • cp mysql_bytes mysql_55-test_bytes
    • cp mysql_innodb mysql_55-test_innodb
    • cp mysql_queries mysql_55-test_queries
    • cp mysql_slowqueries mysql_55-test_slowqueries
    • cp mysql_threads mysql_55-test_threads
  • Renommer dans chaque fichier copiĂ© la partie concernant le titre du graph : echo 'graph_title  MySQL throughput' en echo 'graph_title  MySQL 5.5 throughput - TEST'
  • Supprimer les liens vers les plugins mysql de base du dossier /etc/munin/plugins/ : rm -f /etc/munin/plugins/mysql_*
  • CrĂ©er les liens vers une instance de Mysql donnĂ©e : ln -s /usr/share/munin/plugins/mysql_55-test* /etc/munin/plugins/
  • Modification du fichier de conf munin (voir ci-dessous) : vi /etc/munin/plugin-conf.d/munin-node
  • RedĂ©marrer munin : /etc/init.d/munin-node restart
  • Attendre un petit peu avant de voir apparaĂ®tre les graphs.
Lignes Ă  ajouter au fichier /etc/munin/plugin-conf.d/munin-node :
# Ajout de l'instance Mysql 5.5 TEST (jpm) [10-10-2013]
[mysql_55-test_*]
user root
env.mysqlconnection DBI:mysql:mysql;host=127.0.0.1;port=3307
env.mysqladmin /usr/local/mysql/5.5-test/bin/mysqladmin


Modif d'une installation existance mono instance

  • ArrĂŞter le serveur mysql : /etc/init.d/mysql stop

  • Renommer les binaires : mv /usr/local/mysql /usr/local/5.5
  • CrĂ©er un dossier mysql : mkdir /usr/local/mysql
  • DĂ©placer les binaires : mv /usr/local/5.5 /usr/local/mysql/
  • VĂ©rifier la prĂ©sence des binaires dans le dossier : /usr/local/mysql/5.5/

  • CrĂ©er un dossier /home/mysql/5.5/ : mkdir /home/mysql/5.5
  • Donner les droits et les propriĂ©tĂ©s Ă  mysql : chmod 700 /home/mysql/5.5; chown mysql:mysql /home/mysql/5.5;
  • DĂ©placer le contenu de /home/mysql dans /home/mysql/5.5/ : cd /home/mysql/; mv * 5.5/;
  • RecrĂ©er le lien vers les data dans /usr/local/mysql/5.5 : cd /usr/local/mysql/5.5; rm -f data; ln -s /home/mysql/5.5 data;

  • Supprimer l'ancien lien vers les logs : rm -f /home/log/mysql
  • Rediriger les logs : ln -s /home/mysql/5.5/log /home/log/mysql-5.5

  • Éditer le logrotate et modifier les chemins vers /usr/local/mysql/5.5 : vi /etc/logrotate.d/mysql
  • Renommer le fichier de logrotate mysql : mv /etc/logrotate.d/mysql /etc/logrotate.d/mysql-55

  • Renommer le script d'initialisation : mv /etc/init.d/mysql /etc/init.d/mysql-55
  • Ajouter le nouveau basedir /usr/local/myqsl/5.5 au fichier /etc/init.d/mysql-55 : vi /etc/init.d/mysql-55
    • Ligne 46, indiquer une valeur au paramètre basedir : basedir=/usr/local/mysql/5.5
    • Ligne 113, activer l'utilisation du moteur Federated en ajoutant --federated aux arguments de lancement de Mysql: other_args="--federated $*"
    • Ligne 138, ajouter après une nouvelle ligne : --port=*) port=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
    • Ligne 215, indiquer le chemin vers le fichier my.cnf : conf=/etc/mysql/5.5-test/my.cnf
    • Ligne 257, ajouter le drapeau -c pour indiquer le bon fichier my.cnf : parse_server_arguments `$print_defaults $extra_args mysqld server mysql_server mysql.server -c/etc/mysql/5.5-test/my.cnf`
    • Ligne 284, ajouter l'argument port Ă  la commande mysql_safe : $bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" --port="$port" $other_args >/dev/null 2>&1 &
  • CrĂ©er un dossier /etc/mysql/5.5/ : mkdir /etc/mysql; mkdir /etc/mysql/5.5
  • DĂ©placer le fichier /etc/my.cnf : mv /etc/my.cnf /etc/mysql/5.5/
  • CrĂ©er un lien vers le fichier /etc/mysql/5.5/my.cnf : cd /usr/local/mysql/5.5/; ln -s /etc/mysql/5.5/my.cnf my.cnf
  • Modifier les chemins dans le fichier my.cnf en fonction de l'instance de mysql.
  • Sous le groupe [mysqld] ajouter un paramètre : basedir = /usr/local/mysql/5.5

  • Si Sphinx est utilisĂ© sur la machine et a Ă©tĂ© compilĂ©, il est nĂ©cessaire de modifier le script pour indiquer le nouveau emplacement de Mysql /usr/local/mysql/5.5 puis de relancer de script de compilation.
  • Par ailleurs, il est aussi nĂ©cessaire de modifier le fichier /etc/ld.so.conf.d/localapp.conf pour indiquer le chemin vers le dossier des libs mysql /usr/local/mysql/5.5/lib

Note concernant mysqld_multi
mysqld_multi permet de lancer plusieurs instances de la même version compilée de Mysql. Si l'on veut tester plusieurs versions distinctes de Mysql cela ne répond à tous besoins et nécessite malgré tout des modifications indiquées ci-dessus.