Paramétrage de MySQL 5.7

Répertoires de travail

Fichier de configuration

Ouvrir le fichier de configuration (dans l'exemple, C:\MySQL\my.ini) et faire "enregistrer sous" au format ANSI puis paramétrer :

basedir=C:/MySQL/
datadir=C:/MySQL/Data
secure-file-priv=C:/MySQL/Uploads

et éventuellement

default-character-set=latin1
character-set-server=latin1
default-storage-engine=MYISAM
max_allowed_packet=16M

pour être certain que MySQL ne vas pas ralentir considérablement en cas de problème de DNS, vous pouvez ajouter au chapitre [mysqld] (attention, ces paramètres empêchent d'utiliser un nom de machine dans la colonne host des grants tables)

skip-host-cache
skip-name-resolve

Penser à commenter la ligne qui contient simplement "no-beep" qui déclenche un message d'erreur dans mysqldump.

Service

Sous Windows, le fichier de configuration utilisé par MySQL est fixé sur la ligne de commande du service MySQL. Pour la modifier, la commande est du type :

SC CONFIG MySQL57 binPath= "C:\MySQL\bin\mysqld.exe --defaults-file=C:\MySQL\my.ini MySQL57"

Si le chemin vers mysqld.exe ou vers my.ini contient des blancs, il faut l'encadrer par des "guillemets avec échappement" (le caractère '\' suivi du caractère '"'), comme pour ce chemin de configuration de MariaDB (qui place le fichier my.ini dans le répertoire data)

SC CONFIG MariaDB binPath= "\"C:\Program Files\MariaDB 10.4\bin\mysqld.exe\" --defaults-file=D:\MySQL\data\my.ini MariaDB"

Ouvrir la fenêtre des services, afficher les propriétés du service MYSQL56 puis, dans l'onglet "Connexion", sélectionner "Compte système local" au lieu du "Compte réseau".

Accès à distance

Lancer l'invite de commandes mysql et taper

SELECT host, user, password FROM mysql.user WHERE user = 'root';

S'il n'existe pas de ligne donnant des droits aux machines distantes, lancer la commande

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'therootpassword';

Le '%' indique qu'il n'y a aucune restriction sur l'adresse IP. Si on souhaite limiter l'accès aux ordinateurs locaux :

GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.%' IDENTIFIED BY 'therootpassword';

Sur les MySQL récents (à partir de la version 8), il est nécessaire de réaliser les opérations en deux étapes :

CREATE USER 'root'@'192.168.1.%' IDENTIFIED BY 'therootpassword' ;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.%' ;

Si le problème persiste, vérifier qu'il n'existe pas, dans le fichier de configuration, la ligne

bind-address = 127.0.0.1

Si elle existe, la commenter et relancer le service

Si l'accès au à un serveur MySQL 8 reste impossible aux clients, vérifier le log principal (du type NomDeMachine.log dans le répertoire Data). Vérifier s'il existe un message du type :

54 Connect     Client does not support authentication protocol requested by server; consider upgrading MySQL client

Si ce message existe, c'est que le serveur attend des applications qu'elles se connectent en utilisant des mots de passe chiffrés. Pour permettre au serveur d'accepter une connexion classique, exécuter la commande (en adaptant, bien entendu, le mot de passe) :

ALTER USER root IDENTIFIED WITH mysql_native_password BY 'therootpassword' ;

Boîte à outils

Commandes Windows de contrôle des services

Comme nous l'avons vu, si le service est déjà en place, on peut modifier ses paramètres avec :

SC CONFIG MySQL57 binPath= "C:\MySQL\bin\mysqld.exe --defaults-file=C:\MySQL\my.ini MySQL57"

S'il n'est déjà en place, on peut le créer avec :

SC CREATE MySQL57 binPath= "C:\MySQL\bin\mysqld.exe --defaults-file=C:\MySQL\my.ini MySQL57"

Renommer un service :

sc config "MySQL57" displayname= "MySQL"

Supprimer un service (en pensant à l'arrêter d'abord) :

sc stop [Service name]  
sc delete [service name]

Tuer un service "planté" : trouver le PID dans le gestionnaire des tâches (ou en ligne de commande avec sc queryex [service name]), puis

taskkill /f /pid [PID]

Si le service MySQL ne démarre pas

Si le service MySQL ne démarre pas, le plus simple pour tenter d'obtenir un message pertinent est de l'exécuter "à la main" en ligne de commande en tapant

mysqld --verbose

Installation manuelle de MySQL57

Après avoir installé le logiciel, il faut lui demander de créer ses bases de données système avec la commande :

Sous Windows :

bin\mysqld --initialize --console

Sous Linux, il faut s'assurer que les informations créées seront propriété de l'utilisateur "mysql"  :

bin/mysqld --initialize --user=mysql

Il faut ensuite trouver dans les logs le mot de pass root attribué par l'installeur, puis le modifier :

SET PASSWORD FOR 'root'@'localhost' = password('newPassword') ;

Et surtout, ne pas oublier de lui attribuer des droits en utilisant la commande GRANT.