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
parmonthly
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
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 :
<?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 */ ?>
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'
enecho '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.