Installation et dépannage MySQL sur Linux et Windows

Vous pouvez vous connecter à distance via l'outil Navicat ou exécuter myssql -u root -p depuis le répertoire d'installation sur le serveur d'application.

Prérequis d'installation Linux et erreurs courantes :

1. Installation de la base de données

Télécharger le dépôt MySQL : wget http://repo.mysql.com/mysql80-community-release-el7-1.noarch.rpm

Ou télécharger manuellement depuis http://repo.mysql.com en cas d'absence de connexion réseau

Vérifier le paquet avec ls

Installer le dépôt MySQL :

yum -y install mysql80-community-release-el7-1.noarch.rpm

//yum install et rpm -ivh sont équivalents dans ce cas

Installer le serveur MySQL :

yum -y install mysql-community-server

service mysqld start

Résumé des erreurs Linux :

L'erreur lors de l'installation avec yum -y install mysql-community-server. Solution : yum -y install mysql-community-server --nogpgcheck

2. Configuration de la connexion à distance

D'abord, modifier le fichier de configuration my.cnf, qui est my.ini sous Windows. Dans le fichier de configuration situé dans le répertoire d'installation, commenter #bind-address=127.0.0.1

Ensuite, modifier la base de données :

update user set host="%" where user="root";

L'erreur suivante peut apparaître : ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY'. L'ignorer, puis actualiser les privilèges et redémarrer la base de données pour permettre la connexion à distance.

select host, user from user;

Le root avec % signifie que l'utilisateur root peut se connecter à distance

flush privileges

L'actualisation des privilèges est obligatoire, puis redémarrer la base de données sinon un seul schéma sera visible.

3. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

Pour corriger l'erreur de socket, examiner le fichier /etc/my.cnf. D'abord, vérifier le socket dans le fichier my.cnf du répertoire d'installation de MySQL, puis l'ajouter dans /etc/my.cnf

Autre solution : créer un lien symbolique vers le fichier introuvable, pointant vers l'adresse du socket définie dans le fichier my.cnf du serveur d'application

ln -s /chemin/vers/my.cnf /var/lib/mysql/mysql.sock

4. ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

Pour l'erreur de mot de passe avec YES, modifier le fichier de configuration my.cnf pour ignorer le mot de passe

Accéder au répertoire d'installation de MySQL

Éditer my.cnf

Sous [mysqld], ajouter skip-grant-tables, enregistrer pour appliquer immédiatement

Ensuite, modifier le mot de passe de la base de données pour se reconnecter

Exemple de modification du mot de passe :

mysql> use mysql; mysql> update user set password=password('123') where user='root' and host='localhost';

Ce problème survient après l'installation : en tapant mysql directement sans mot de passe, on peut se connecter mais un seul schéma information_schema est visible.

Solution : modifier d'abord le fichier de configuration pour ignorer le mot de passe, ajouter skip-grant-tables sous [mysqld], redémarrer le service MySQL, puis se connecter. show databases; affiche les trois schémas. En restaurant le fichier, il n'y a plus qu'un seul schéma.

Ce problème est causé par la création d'un nouvel utilisateur de base de données, créant ainsi une nouvelle instance avec un seul schéma.

6. Créer une instance de base de données,_INITIALIZER les autres applications

  • Créer un utilisateur

Utiliser CREATE USER pour créer un utilisateur nommé testuser1 avec le mot de passe testuser1 et l'hôte localhost. Instruction SQL :

mysql> CREATE USER 'testuser1''@'localhost' IDENTIFIED BY 'testuser1';
Query OK, 1 rows affected (0.06 sec)

Dans MySQL, on peut utiliser la fonction password() pour obtenir le hash du mot de passe. SQL pour voir le hash :

mysql> SELECT password('testuser1');
+-------------------------------------------+
| password('testuser1')                     |
+-------------------------------------------+
| *06C0BF5B64ECE2F648B5F048A71903906BA08E5C |
+-------------------------------------------+
1 row in set, 1 warning (0.00 sec)

Créer l'utilisateur avec le hash :

mysql> CREATE USER 'testuser1'@'localhost' IDENTIFIED BY PASSWORD '*06C0BF5B64ECE2F648B5F048A71903906BA08E5C';
Query OK, 0 rows affected, 1 warning (0.00 sec)

  • Créer une base de données

create database testdb default charset="utf8";

  • Accorder les privilèges sur la base de données

(utilisateur : dbadmin, mot de passe : dbpass, IP : 192.168.0.10)

//Accorder tous les privilèges sur toutes les bases de données grant all on . to dbadmin@'192.168.0.10' identified by "dbpass"; //Accorder les privilèges sur une base spécifique (testdb) grant all privileges on testdb to dbadmin@'192.168.0.10' identified by "dbpass"; ou grant all on testdb to dbadmin@'192.168.0.10' identified by "dbpass";//Accorder les privilèges sur une table spécifique grant all on testdb.table1 to dbadmin@'192.168.0.10' identified by "dbpass";//Accorder l'accès distant grant all on . to dbadmin@'%' identified by "dbpass";Actualiser les privilèges obligatoireflush privileges;- Redémarrer l'ordinateur ou la base de données (obligatoire sinon l'initialisation échoue)

  1. ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost'

mysql> select user,host from user;

+------------------+-----------+
| user             | host      |
+------------------+-----------+
| root             | %         |
| admin            | localhost |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| admin2           | localhost |
+------------------+-----------+

Le root a le host '%' comme visible

La commande exécutée est :

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123';

À modifier en :

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123';

8. Problèmes de privilèges MySQL 8

  1. Après l'installation de MySQL 8.0.13, lors de l'attribution de privilèges à des comptes, des erreurs apparaissent.
  2. MySQL 8 ne permet plus de créer un compte avec GRANT implicite. Il faut d'abord créer le compte puis attribuer les privilèges :

mysql> create user 'testuser'@'%' identified by '12345'; mysql> grant all privileges on . to 'testuser'@'%'; mysql> flush privileges;

Erreur : You are not allowed to create a user with GRANT

  1. Modifier le champ host dans la table user : update user set host='%' where user='testuser';

Exécuter deux fois : Grant all privileges on *.* to 'testuser'@'%';

Connexion Navicat échoue en raison du chiffrement différent de MySQL 8

  1. Modifier le mode de chiffrement : alter user testuser identified with mysql_native_password by 'xxx';

Ou : update user set plugin='mysql_native_password' where user='root';

Passer l'authentification : mysqld -nt --skip-grant-tables

Connexion : mysql -uroot -p

Modifier le mot de passe root : set password for 'root'@'localhost' = password('nouveaumotdepasse');

Erreur : ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute

Cause : Privilèges non actualisés

Solution : flush privileges

Autres problèmes MySQL 8.0 :

1. Commande mysqld –skip-grant-tables inactive

Après modification du mot de passe, les anciens et nouveaux mots de passe échouent. La commande mysqld –skip-grant-tables ne fonctionne plus depuis MySQL 8.0. La nouvelle commande :

mysqld --console --skip-grant-tables --shared-memory

Recommandation : modifier directement le fichier de configuration, ajouter skip-grant-tables après [mysqld], puis redémarrer MySQL pour une connexion sans mot de passe.

2. ERROR: The MySQL server is running with the --skip-grant-tables option so it cannot execute

Après connexion sans mot de passe, erreur lors de la modification du mot de passe. Il faut d'abord actualiser puis modifier le mot de passe :

flush privileges;

3. ERROR: 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost'

Continuer avec la modification du mot de passe :

ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'

Erreur persistante car host est '%' dans la table user. Utiliser '%' à la place :

ALTER USER 'root'@'%' IDENTIFIED BY '123456'

Problèmes d'installation sous Windows

net start/stop mysql

Dans le répertoire d'installation de MySQL, ouvrir my.ini avec un éditeur. Rechercher default-storage-engine=INNODB, modifier INNODB en MYISAM

Redémarrer le service : net start mysql

Dans le répertoire d'installation MySQL, ajouter une ligne à la fin du fichier my.ini :

skip-grant-tables

Redemarrer le service : net restart mysql

  1. Problème d'encodage dans cmd

L'erreur d'encodage se résout avec : set names gbk;

  1. Le service ne démarre pas, erreur au démarrage, ouvrir cmd en tant qu'administrateur

Autres erreurs :

Les mots-clés comme gruop provoquent des erreurs de syntaxe. Ajouter des backticks (`) pour résoudre.

Étiquettes: MySQL base-de-donnees Linux Windows installation

Publié le 19 juillet à 12h12