======Installation de plusieurs instances de Mysql======
===== Installation de Mysql multi instances =====
* 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=
[mysqldump]
host=localhost
user=root
password=
[client]
host=localhost
user=root
password=
**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
===== Erreurs =====
==== Erreur : "The server quit without updating PID file (/usr/local/mysql/5.6/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.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.
==== Erreur : Failed to start mysql-56.service: Unit mysql-56.service failed to load: No such file or directory. ====
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
===== 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 :**
===== 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
===== 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 à nos besoins et nécessite malgré tout des modifications indiquées ci-dessus.
===== Ressources =====
* http://dev.mysql.com/doc/refman/5.5/en/multiple-servers.html
* [[http://opensourcedbms.com/dbms/running-multiple-mysql-5-6-instances-on-one-server-in-centos-6rhel-6fedora/|Indication concernant le script de lancement de mysql]]
* [[http://www.reades.com/2013/04/01/multiple-mysql-servers-on-a-single-machine/|Indication concernant la compilation de multiple instances]]
* [[http://dev.mysql.com/doc/mysqld-version-reference/en/mysqld-version-reference-buildopts.html|Options CMAKE pour compiler Mysql]]
* [[http://dev.mysql.com/doc/refman/5.5/en/unix-postinstallation.html|Config Mysql post installation]]
* [[http://dev.mysql.com/doc/refman/5.6/en/option-files.html|Sur l'utilisation des fichiers my.cnf et .my.cnf]]
* [[http://agiletesting.blogspot.fr/2009/11/monitoring-multiple-mysql-instances.html|Configurer Munin pour visualiser plusieurs instances de Mysql]]