informatique:serveurs:installation-logiciels:mysql-instances-multiples

Installation de plusieurs instances de Mysql

  • Lancer le script : /home/admin/scripts/mysql/mysql_5.6.sh '' * Vérifier la présence des binaires dans le dossier : /usr/local/mysql/5.6/ * Créer un groupe mysql : '' groupadd mysql '' * Créer un utilisateur mysql : '' useradd -g mysql mysql '' * Créer un dossier /home/mysql/5.6/ : '' mkdir /home/mysql/5.6 '' * Donner les droits et les propriétés à mysql : * '' chmod 700 /home/mysql/5.6 '' * '' chown mysql:mysql /home/mysql/5.6 '' * Recréer le lien vers les data dans /usr/local/mysql/5.6 : * '' cd /usr/local/mysql/5.6 '' * '' rm -fR data/ '' * '' ln -s /home/mysql/5.6 /usr/local/mysql/5.6/data '' * 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.6/ : '' mkdir -p /etc/mysql/5.6 '' * Copier le fichier my.cnf : '' cp -f /usr/local/mysql/5.6/support-files/my-default.cnf /etc/mysql/5.6/my.cnf '' * Créer un lien vers le fichier /etc/mysql/5.6/my.cnf : '' ln -s /etc/mysql/5.6/my.cnf /usr/local/mysql/5.6/my.cnf '' * Éditer le fichier my.cnf : '' vi /etc/mysql/5.6/my.cnf '' * Modifier les chemins et le port en fonction de l'instance de mysql. Exemple de fichier ci-dessous. * Sous la section [mysqld] vérifier la présence du paramètre : '' basedir = /usr/local/mysql/5.6 '' * Lancement du script d'installation de Mysql : mysql_install_db * '' cd /usr/local/mysql/5.6/ '' * '' ./scripts/mysql_install_db -defaults-file=/etc/mysql/5.6/my.cnf –user=mysql '' * A partir de mysql 5.7 : '' ./bin/mysqld –initialize '' * Créer le script démarrant le service : '' cp /usr/local/mysql/5.6/support-files/mysql.server /etc/init.d/mysql-56 '' * Éditer fichier /etc/init.d/mysql-56 : '' vi /etc/init.d/mysql-56 '' * Ligne 46, indiquer une valeur au paramètre basedir : '' basedir=/usr/local/mysql/5.6 '' * 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.6/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.6/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 : '' service mysql-56 start ''
  • Configurer mysql : mot de passe root…
    • Se rendre dans le dossier racine de l'installation en cours : '' cd /usr/local/mysql/5.6/ ''
    • Lancer le script de sécurité : '' ./bin/mysql_secure_installation ''
    • Répondre aux différentes questions et créer le mot de passe root.
  • Créer un dossier qui contiendra les logs mysql (error.log et slow-query.log) : '' mkdir /home/mysql/5.6/log ''
  • Créer un lien vers le fichier error.log : '' ln -s /home/mysql/5.6/log/mysql-error.log /home/log/mysql-5.6/mysql-56-error.log ''
  • Rediriger les logs : '' ln -s /home/mysql/5.6/log /home/log/mysql-5.6 ''
  • Copier le fichier logrotate fournit par mysql : '' cp /usr/local/mysql/5.6/support-files/mysql-log-rotate /etc/logrotate.d/mysql-56 ''
  • Changer les droits du fichier : '' chmod 644 /etc/logrotate.d/mysql-56 ''
  • Éditer le logrotate et modifier les chemins vers /usr/local/mysql/5.6 : '' vi /etc/logrotate.d/mysql-56 ''
  • Éditer le fichier et changer :
    • le chemin '' /usr/local/mysql/5.6/data/mysqld.log { '' vers le fichier de log par '' /home/mysql/5.6/log/mysqld.log /home/mysql/5.6/log/mysql-slow.log { ''
    • le paramètre '' daily '' par '' monthly ''

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>

Fichier /etc/mysql/5.6/my.cnf :

# Pour des informations sur les paramètres de configuration voir les pages suivantes :
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html
# http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html
#-----------------------------------------------------------------------------------------------------------#
[mysqld]
 
user     = mysql
port     = 3306
socket   = /home/mysql/5.6/mysql.sock
pid-file = /home/mysql/5.6/mysql.pid
 
# Defaut
default-storage-engine = MyISAM
 
# DATA STORAGE #
basedir = /usr/local/mysql/5.6
datadir = /home/mysql/5.6/
#tmpdir  = /home/mysql/5.6/mysql-tmp/ '' ATTENTION : utilisation partition en RAM => commenter ce param en cas de pb (utiliser df -h pour infos sur la partition)
 
#------------------------------------------------#
# Optimisation manuelle de Mysql
 
# RESEAU #
bind-address         = 0.0.0.0 '' Force Mysql à écouter seulement sur l'IPv4
#net-read-timeout    = 60
#skip-name-resolve   = OFF '' ATTENTION : ne pas activer car problème avec IPv6
interactive-timeout  = 60
 
# MYSQL COMPORTEMENTS #
explicit-defaults-for-timestamp = 1 
 
# MyISAM #
key-buffer-size        = 512M '' Règle : 25% de la mémoire = key-buffer-size
myisam-recover-options = FORCE,BACKUP
 
# SAFETY #
max-allowed-packet = 64M 
max-connect-errors = 1000000
 
# CACHES AND LIMITS #
tmp-table-size         = 128M '' Règle : doit être égal à max-heap-table-size
max-heap-table-size    = 128M '' Règle : doit être égal à tmp-table-size
query-cache-type       = 0 
query-cache-size       = 0 '' Règle : 32MB pour 1GB de RAM
max-connections        = 500 
thread-cache-size      = 50
open-files-limit       = 65535
table-definition-cache = 4096
table-open-cache       = 4096
 
# INNODB #
innodb-flush-method            = O_DIRECT
innodb-log-files-in-group      = 2 
innodb-log-file-size           = 128M
innodb-flush-log-at-trx-commit = 1 
innodb-file-per-table          = 1 
innodb-buffer-pool-size        = 512M '' Règle : 25% de la mémoire
 
# LOGGING #
log-output                             = FILE
log-error                              = /home/mysql/5.6/log/mysql-error.log
log-queries-not-using-indexes          = 1 '' Active (1) / Désactive (0) le log des requêtes mal indexées
log-throttle-queries-not-using-indexes = 0 '' Active (1) / Désactive (0) le résumer pour les requêtes mal indexées
slow-query-log                         = 1 '' Active (1) / Désactive (0) le log des slow queries
long-query-time                        = 1 '' en seconde
slow-query-log-file                    = /home/mysql/5.6/log/mysql-slow.log
 
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
 
#-----------------------------------------------------------------------------------------------------------#
[mysqldump]
quick
max_allowed_packet = 64M
  • 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.6/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.6/etc/my.cnf ~/.my.cn ''
  • Vérifier que seul votre fichier de configuration (ici : /usr/local/mysql/5.6/etc/my.cnf) existe et qu'aucun des autres emplacements n'en contient.

Créer un fichier '' /etc/systemd/system/mysql-56.service '' contenant :

[Unit]
Description=MySQL 5.6 Database
After=sockets.target syslog.target 
Before=httpd.service postfix.service
 
[Service]
Type=simple
PIDFile=/home/mysql/5.6/mysql.pid
ExecStart=/etc/init.d/mysql-56 start
ExecStop=/etc/init.d/mysql-56 stop
Restart=always
RestartSec=2
TimeoutSec=60
 
[Install]
WantedBy=multi-user.target
Also=mysqld.socket
  • É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 
$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-56 */
$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-56.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-56-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-56-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 */
?>
  • 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

**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 à nos besoins et nécessite malgré tout des modifications indiquées ci-dessus.

  • informatique/serveurs/installation-logiciels/mysql-instances-multiples.txt
  • Dernière modification : 2020/02/09 14:48
  • de jpmilcent