Les deux révisions précédentes Révision précédente | |
informatique:serveurs:installation:logiciels:mysql-instances-multiples [2020/02/09 14:32] – jpmilcent | informatique:serveurs:installation:logiciels:mysql-instances-multiples [2020/02/09 14:48] (Version actuelle) – supprimée jpmilcent |
---|
======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 : ''<nowiki>--port=*) port=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;</nowiki>'' | |
* 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 :** | |
<code properties> | |
# 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> | |
</code> | |
| |
**Fichier /etc/mysql/5.6/my.cnf :** | |
<code properties> | |
# 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 | |
</code> | |
| |
===== 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 : | |
<code properties> | |
[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 | |
</code> | |
| |
===== 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 :** | |
<code 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-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 */ | |
?> | |
</code> | |
| |
===== 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 :** | |
<code properties> | |
# 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 | |
</code> | |
| |
===== 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]] | |