J'ai voulu installer la version 5.7 de Mysql depuis le repository de Mysql en chargeant depuis le site le paquet "Ubuntu / Debian (Architecture Independent), DEB" qui installe notament un fichier "mysql.list" dans /etc/apt/sources-list.d, ensuite on utilise les outils standard Debian : aptitude, apt-get ou synaptic.
Remarque : j'ai inhibé le repository "mysql-tools-preview"
Un "apt-get update" plus loin les choses sont disponibles et on peut installer "mysql-community-client" et "mysql-community-server" version 5.7.16
J'ai voulu réaliser une installation non "standard" en positionnant les fonctionnalités principales de la base de données sur des systèmes de fichiers différents notamment pour la partie "log" et pour la partie "données" afin d'optimiser le fonctionnement.
La machine est munie de :
- CPU CoreI3 4330
- RAM 16G
- 3 disques SSD
Selon le schéma suivant :
Un système de fichier racine
Un système de fichier /DATA/DATA1 pour les données
Un système de fichier /LOG/LOG1 pour les logs y compris les "logbin".
J'ai configuré le fichier /etc/mysql/mysql.conf.d/mysqld.cnf de la façon suivante :
[mysqld] pid-file = /run/mysqld/mysqld.pid socket = /run/mysqld/mysqld.sock # By default we only accept connections from localhost bind-address = 0.0.0.0 # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 ### Deplacement des répertoires datadir = /DATA/DATA1/mysql tmpdir = /LOG/LOG1/mysql_tmp log_bin = /LOG/LOG1/mysql/server-bin general_log_file = /LOG/LOG1/mysql/general.log slow-query-log-file = /LOG/LOG1/mysql/slow_query.log server_id = 11 log_error = /LOG/LOG1/mysql/error.log secure-file-priv = /DATA/DATA1/mysql-files slave_load_tmpdir = /LOG/LOG1/mysql_tmp ### configuration InnoDB |
....
Nettoyez toute trace de l'installation imposée lors du démarrage (/var/lib/mysql, /var/log/mysql).
Vérifiez bien que tous vos répertoires "mysql" ont bien le user et le groupe "mysql" :
cd /DATA//DATA1 ls -al drwxr-xr-x 6 root root 4096 nov. 18 20:00 . drwxr-xr-x 4 root root 4096 nov. 14 23:27 .. drwx------ 2 root root 16384 nov. 12 22:24 lost+found drwxr-xr-x 5 mysql mysql 4096 nov. 18 20:26 mysql drwx------ 2 mysql mysql 4096 nov. 18 20:02 mysql-files cd /LOG/LOG1 drwxr-xr-x 6 root root 4096 nov. 17 23:22 . drwxr-xr-x 4 root root 4096 nov. 15 00:21 .. drwx------ 2 root root 16384 nov. 15 00:21 lost+found drwxr-xr-x 2 mysql mysql 4096 nov. 18 20:04 mysql drwx------ 2 mysql mysql 4096 nov. 18 20:22 mysql-files drwxr-xr-x 2 mysql mysql 4096 nov. 18 20:25 mysql_tmp |
Il faut maintenant attaquer la partie "systemd" et la corriger pour éluder un script (horrible) rempli de valeurs "en dur" qui viendrait perturber la belle ordonnance de nos paramètres.
Ce script (/usr/share/mysql/mysql-systemd-start) est à ignorer purement et simplement et à remplacer par un petit script destiné uniquement à initialiser correctement le répertoire "mysqld" dans /run (et pas /var/run qui n'est qu'un lien vers /run) ce script hyper simple (je l'ai appelé "init-mysql") il est fourni à titre d'exemple :
#!/bin/bash MYSQLRUN=/run/mysqld if [ ! -d ${MYSQLRUN} ] then mkdir ${MYSQLRUN} chown mysql:mysql ${MYSQLRUN} fi |
Ce n'est vraiment pas grand chose !
Attention ce script est exécuté par le user "mysql", le mettre dans /usr/bin par exemple pour qu'il soit accessible sans difficultés.
Modifier le script "systemd" de lancement du service (/lib/systemd/system/mysql.service) pour en extirper la référence à l'horrible "mysql-systemd-start" :
Partie du script "systemd" modifié :
[Service] User=mysql Group=mysql Type=forking PermissionsStartOnly=true PIDFile=/run/mysqld/mysqld.pid ExecStartPre=/usr/bin/init_mysql ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid TimeoutSec=60 LimitNOFILE = 5000 Restart=on-abort RestartPreventExitStatus=1 RuntimeDirectory=mysqld RuntimeDirectoryMode=755 Ne pas oublier ensuite "systemctl daemon-reload" avant de relancer le service. Aller modifier le fichier /etc/mysql/conf.d/mysql.cnf (utilisé par le client mysql) pour y indiquer le nom du fichier "socket" : [mysql] socket = /run/mysqld/mysqld.sock |
On doit encore réaliser un petit truc bizarre, créer un lien entre :
/etc/mysql/mysql.conf.d/mysqld.cnf et /etc/my.cnf ???
On peut alors, enfin, lancer une installation "personnalisée" de l'ensemble en utilisant le paramètre "--initialize--insecure" de mysqld, adieu "mysql_install_db" on ne te regrettera pas trop.
mysqld --initialize-insecure
qui crée le user "root" sans mot de passe, il suffira d'en mettre un rapidement avec la commande "set password ..." pour rester correct, la commande se termine rapidement, SSD oblige.
Cette commande a rempli les répertoires prévus /DATA/DATA1/mysql de ce qui se trouve dans /var/lib/mysql habituellement.
Tout semble prêt on lance la commande fatidique :
service mysql start
qui rend la main rapidement (tout est sur des SSD), on vérifie un peu si tout va bien :
ps -ef | grep mysqld mysql 2733 1 2 22:52 ? 00:00:00 /usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid |
puis :
ls -al /run/mysqld drwxr-xr-x 2 mysql mysql 100 nov. 18 22:52 . drwxr-xr-x 23 root root 860 nov. 18 22:52 .. -rw-r----- 1 mysql mysql 5 nov. 18 22:52 mysqld.pid srwxrwxrwx 1 mysql mysql 0 nov. 18 22:52 mysqld.sock -rw------- 1 mysql mysql 5 nov. 18 22:52 mysqld.sock.lock |
Tout à l'air parfait on lance le client mysql :
mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.7.16-log MySQL Community Server (GPL)Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> |
Ouaaaah tout baigne, vite mettons un mot de passe à ce vieux "root" :
use mysql;
mysql> set password for 'root'@'localhost' = PASSWORD('Un_BeAu_#_PaSsWoRd_ToUt%Neuf?');
\q
Et on teste notre mot de passe :
mysql --user=root -p mysql>\q |
C'est fini, on dispose d'une base toute neuve en version 5.7.16. Montée sur des systèmes de fichiers SSD cela devrait être assez rapide !
A bientôt pour quelques tests.