Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
mysql [Le 04/09/2020, 10:44] L'Africain [Conflit entre MySQL et MariaDB] |
mysql [Le 10/01/2024, 06:35] (Version actuelle) krodelabestiole ancienne révision (Le 28/01/2023, 13:17) restaurée |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | {{tag>Xenial Bionic sgbd mysql serveur réseau}} | + | {{tag>Focal sgbd mysql serveur réseau}} |
- | + | ||
- | ---- | + | |
====== MySQL ====== | ====== MySQL ====== | ||
Ligne 14: | Ligne 12: | ||
L'installation de ce paquet doit se faire de préférence en utilisant [[terminal]] via la commande : <code>sudo apt install mysql-server</code> | L'installation de ce paquet doit se faire de préférence en utilisant [[terminal]] via la commande : <code>sudo apt install mysql-server</code> | ||
- | [[apt>mysql-server]] est un [[:tutoriel:creer un meta paquet|méta-paquet]] qui installera MySQL 5.7 sur [[:xenial|Xenial 16.04]] et sur [[:bionic|Bionic 18.04]]. | + | Sinon [[:tutoriel:comment_installer_un_paquet|installez le paquet]] [[apt>mysql-server]]. |
===== Utilisation ===== | ===== Utilisation ===== | ||
Ligne 20: | Ligne 18: | ||
==== Démarrage ==== | ==== Démarrage ==== | ||
- | Pour démarrer le serveur MySQL, tapez la [[:commande_shell|commande]] suivante dans un [[:terminal]]: | + | Pour démarrer le serveur MySQL, tapez la [[:commande_shell|commande]] suivante dans un [[:terminal]] : |
- | + | <code bash>sudo systemctl start mysql</code> | |
- | sudo systemctl start mysql | + | |
==== Redémarrage ==== | ==== Redémarrage ==== | ||
- | Pour redémarrer le serveur MySQL, tapez la [[:commande_shell|commande]] suivante dans un [[:terminal]]: | + | Pour redémarrer le serveur MySQL, tapez la [[:commande_shell|commande]] suivante dans un [[:terminal]] : |
- | + | <code>sudo systemctl restart mysql</code> | |
- | sudo systemctl restart mysql | + | |
- | + | ||
- | ==== Arrêt ==== | + | |
- | + | ||
- | Pour arrêter le serveur MySQL, tapez la [[:commande_shell|commande]] suivante dans un [[:terminal]]: | + | |
- | sudo systemctl stop mysql | + | |
==== Rechargement de la configuration ==== | ==== Rechargement de la configuration ==== | ||
Pour que MySQL prenne en compte les modifications de sa configuration, [[:commande_shell|commande]] suivante dans un [[:terminal]]: | Pour que MySQL prenne en compte les modifications de sa configuration, [[:commande_shell|commande]] suivante dans un [[:terminal]]: | ||
- | sudo systemctl reload mysql | + | <code>sudo systemctl reload mysql</code> |
==== Forcer la prise en compte de la nouvelle configuration ==== | ==== Forcer la prise en compte de la nouvelle configuration ==== | ||
Pour forcer MySQL à recharger ses fichiers de configuration, [[:commande_shell|commande]] suivante dans un [[:terminal]]: | Pour forcer MySQL à recharger ses fichiers de configuration, [[:commande_shell|commande]] suivante dans un [[:terminal]]: | ||
- | sudo systemctl force-reload mysql | + | <code>sudo systemctl force-reload mysql</code> |
==== Connaître la version ==== | ==== Connaître la version ==== | ||
Ligne 56: | Ligne 47: | ||
L'inscription des utilisateurs de MySQL se fait sur la table //users// de la base de données //mysql//. On peut donc les administrer manuellement depuis cette table, mais il existe des outils pour simplifier leur gestion (tels que ''mysqladmin'', ''mysql_secure_installation'', [[:mysql_outils#adminer|adminer]] ou [[:phpMyAdmin]]). | L'inscription des utilisateurs de MySQL se fait sur la table //users// de la base de données //mysql//. On peut donc les administrer manuellement depuis cette table, mais il existe des outils pour simplifier leur gestion (tels que ''mysqladmin'', ''mysql_secure_installation'', [[:mysql_outils#adminer|adminer]] ou [[:phpMyAdmin]]). | ||
- | Il existe plusieurs méthodes d'authentifications. Nativement MySQL permet de définir ses propres couples d'utilisateurs et de mots de passe. Mais il existe des plugins permettant d'implémenter d'autres comportements, dont //[[https://dev.mysql.com/doc/refman/5.7/en/socket-pluggable-authentication.html|auth_socket]]// qui permet de s'identifier au moyen de comptes UNIX (qui correspondent donc aux utilisateurs Ubuntu).\\ | + | Il existe plusieurs méthodes d'authentifications. Nativement MySQL permet de définir ses propres couples d'utilisateurs et de mots de passe. Mais il existe des plugins permettant d'implémenter d'autres comportements, dont //[[https://dev.mysql.com/doc/refman/5.7/en/socket-pluggable-authentication.html|auth_socket]]// qui permet de s'identifier au moyen de comptes UNIX (qui correspondent donc aux utilisateurs Ubuntu). |
Il faut tout de même créer le compte sur MySQL pour pouvoir l'utiliser, mais il n'est plus nécessaire de renseigner le mot de passe. Il faut par contre lancer le client (la commande''mysql'' ou le script [[:PHP]]) avec l'utilisateur correspondant. | Il faut tout de même créer le compte sur MySQL pour pouvoir l'utiliser, mais il n'est plus nécessaire de renseigner le mot de passe. Il faut par contre lancer le client (la commande''mysql'' ou le script [[:PHP]]) avec l'utilisateur correspondant. | ||
Ligne 67: | Ligne 58: | ||
==== Lancer la console MySQL ==== | ==== Lancer la console MySQL ==== | ||
- | **Avant [[:bionic|Ubuntu 18.04 Bionic]]**\\ | + | L’utilisateur root de MySQL est authentifié par son compte système (plugin //auth_socket//) et non plus par un mot de passe (plugin //mysql_native_password//). |
- | L’authentification de l'utilisateur root de MySQL se fait par mot de passe (//mysql_native_password//). | + | |
- | * Si vous n'avez pas défini de mot de passe (déconseillé) : <code>mysql -u root</code> | + | |
- | * Si vous avez défini un mot de passe : <code>mysql -u root -p</code> et tapez votre mot de passe. | + | |
- | + | ||
- | **À partir de [[:bionic|Ubuntu 18.04 Bionic]]**\\ | + | |
- | À partir ce cette version l'utilisateur root de MySQL est authentifié par son compte système (plugin //auth_socket//) et non plus par un mot de passe (plugin //mysql_native_password//). | + | |
<code>sudo mysql</code> | <code>sudo mysql</code> | ||
Ligne 103: | Ligne 88: | ||
==== Ajouter ou changer le mot de passe de root ==== | ==== Ajouter ou changer le mot de passe de root ==== | ||
- | <note warning> | + | Il est vivement déconseillé de modifier la méthode d'[[#authentification]] par défaut de l'utilisateur //root// (//auth_socket//). Le système utilise ce compte pour effectuer des tâches de maintenance (auparavant Ubuntu créait un compte spécial //debian-sys-maint// à cette fin). |
- | À partir de [[:bionic|Bionic 18.04]] il est vivement déconseillé de modifier la méthode d'[[#authentification]] par défaut de l'utilisateur //root// (//auth_socket//). Le système utilise ce compte pour effectuer des tâches de maintenance (auparavant Ubuntu créait un compte spécial //debian-sys-maint// à cette fin). | + | |
Si vous souhaitez créer un accès "super-administrateur" pour gérer l'intégralité de vos bases de données et de leurs utilisateurs avec une application tierce ([[:phpMyAdmin]], [[mysql_outils#adminer|Adminer]], ou autre), suivez [[phpmyadmin#acces_root|cette autre procédure]]. | Si vous souhaitez créer un accès "super-administrateur" pour gérer l'intégralité de vos bases de données et de leurs utilisateurs avec une application tierce ([[:phpMyAdmin]], [[mysql_outils#adminer|Adminer]], ou autre), suivez [[phpmyadmin#acces_root|cette autre procédure]]. | ||
- | </note> | ||
- | |||
- | Pour changer ou attribuer un mot de passe à l'utilisateur //root// (qui n'est pas forcément le même que l'utilisateur //root// du système) **seulement sur [[:xenial|Xenial 16.04]] et précédents** : | ||
- | |||
- | Dans la console MySQL : | ||
- | |||
- | ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'le_mot_de_pass_choisi'; | ||
- | |||
- | Ou avec ''mysqladmin'' pour changer le mot de passe : | ||
- | |||
- | sudo mysqladmin password Nouveau_mot_de_passe -p Ancien_mot_de_passe | ||
- | |||
- | Vous pourrez avoir besoin de mettre votre mot de passe entre guillemet si celui ci comporte des caractères spéciaux. | ||
- | |||
- | | ||
- | ==== Redéfinir de force le mot de passe de root ==== | ||
- | |||
- | <note important>Ceci ne s'applique que pour les versions n'utilisant pas //[[#authentification|auth_socket]]// par défaut pour le compte //root//, donc [[:xenial|Xenial 16.04]] et les versions précédentes ([[:trusty|Trusty 14.04]]). | ||
- | |||
- | Sur [[:bionic|Bionic 18.04]] MySQL n'utilise pas de mot de passe pour le compte //root//. Il se sert du système d'authentification des utilisateurs Ubuntu, et donc de [[:sudo]].</note> | ||
- | |||
- | Deux possibilités s'offrent à vous. Une méthode simple : <code>sudo dpkg-reconfigure mysql-server-5.7</code> | ||
- | |||
- | Une méthode plus compliquée, si vous avez perdu votre mot de passe root pour MySQL, suivez ces quelques étapes : | ||
- | * On se connecte à l'aide du compte spécial debian-syst-maint (défini dans le fichier /etc/mysql/debian.cnf) : <code>sudo mysql --defaults-file=/etc/mysql/debian.cnf</code> | ||
- | * On met en place le nouveau mot de passe : <code mysql> | ||
- | ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'le_mot_de_pass_choisi';</code><code mysql>FLUSH PRIVILEGES;</code> | ||
- | |||
- | * On quitte le prompt de MySQL : <code mysql>QUIT;</code> | ||
- | |||
==== Utilisateurs ==== | ==== Utilisateurs ==== | ||
Ligne 246: | Ligne 200: | ||
Pour autoriser l'accès venant de toutes machines (limité par l'authentification), remplacer ''[adresse IP]'' par le symbole ''%''. | Pour autoriser l'accès venant de toutes machines (limité par l'authentification), remplacer ''[adresse IP]'' par le symbole ''%''. | ||
+ | |||
+ | Il est fortement conseillé que le ''[nom utilisateur]'' soit différent du nom d'utilisateur connecté en local ''[localhost]'' pour éviter les blocages de connexion. | ||
Pour rendre ces modifications effectives, terminez par : | Pour rendre ces modifications effectives, terminez par : | ||
<code mysql>FLUSH PRIVILEGES;</code> | <code mysql>FLUSH PRIVILEGES;</code> | ||
+ | |||
+ | Cette modification des droits de l'utilisateur (ou l'ajout d'un nouvel utilisateur avec des droits différents) peut aussi se faire dans [[phpmyadmin|phpMyAdmin]]. | ||
==== Configuration en UTF-8 ==== | ==== Configuration en UTF-8 ==== | ||
Ligne 337: | Ligne 295: | ||
CREATE DATABASE application; | CREATE DATABASE application; | ||
CREATE USER 'utilisateur'@'localhost' IDENTIFIED BY 'mot_de_passe'; | CREATE USER 'utilisateur'@'localhost' IDENTIFIED BY 'mot_de_passe'; | ||
- | GRANT ALL ON utilisateur.* TO 'application'@'localhost'; | + | GRANT ALL ON application.* TO 'utilisateur'@'localhost'; |
FLUSH PRIVILEGES; | FLUSH PRIVILEGES; | ||
QUIT; | QUIT; | ||
Ligne 366: | Ligne 324: | ||
</code> | </code> | ||
- | Pour la syntaxe des requêtes SQL, reportez-vous à la [[http://dev.mysql.com/doc/|documentation MySQL]]. | + | Pour la syntaxe des requêtes SQL, reportez-vous à la [[https://dev.mysql.com/doc/|documentation MySQL]]. |
===== Autres opérations ===== | ===== Autres opérations ===== | ||
- | Qt4 avec MySQL: | + | MySQL avec Qt5: |
- | Installer la librairie pour mysql afin de l'utiliser sous QT : | + | Installer la bibliothèque Qt5 pour mysql afin de l'utiliser sous Qt : |
- | <code>sudo apt install libqt4-sql-mysql</code> | + | <code>sudo apt install libqt5sql5-mysql</code> |
Ligne 399: | Ligne 357: | ||
</note> | </note> | ||
- | D'autres commandes telles que la suppression des tables, de la base, l'ajout des données dans la base des données, etc. peuvent être trouvées sur le [[http://dev.mysql.com/doc/refman/5.0/fr/sql-syntax.html|site de documentation de MySQL]]. | + | D'autres commandes telles que la suppression des tables, de la base, l'ajout des données dans la base des données, etc. peuvent être trouvées sur le [[https://dev.mysql.com/doc/refman/5.0/fr/sql-syntax.html|site de documentation de MySQL]]. |
Ligne 407: | Ligne 365: | ||
MySQL stocke ses fichiers dans le dossier /var/lib/mysql. Il arrive avec le temps et l'utilisation que le fichier ibdata1 occupe un espace disque très important qui ne sera pas récupéré même en supprimant toutes les bases. | MySQL stocke ses fichiers dans le dossier /var/lib/mysql. Il arrive avec le temps et l'utilisation que le fichier ibdata1 occupe un espace disque très important qui ne sera pas récupéré même en supprimant toutes les bases. | ||
- | Pistes pour comprendre et corriger ce problème : | + | Pistes pour comprendre et corriger ce problème : |
* [[http://bytes.com/groups/mysql/495219-mysql-ibdata1-compact-space|Supprimer les tables InnoDB pour récupérer l'espace]] | * [[http://bytes.com/groups/mysql/495219-mysql-ibdata1-compact-space|Supprimer les tables InnoDB pour récupérer l'espace]] | ||
- | * [[http://bugs.mysql.com/bug.php?id=1287|"Bogue" associé]] | + | * [[https://bugs.mysql.com/bug.php?id=1287|"Bogue" associé]] |
- | * Exporter toutes les bases de données, arrêter mysql, supprimer le fichier, démarrer sql et importer toutes les bases. | + | * Exporter toutes les bases de données, arrêter mysql, supprimer le fichier, démarrer mysql et importer toutes les bases. |
Ligne 428: | Ligne 386: | ||
En cas de problème de configuration lors d'un premier déploiement d'un serveur MySQL on doit donc effectuer un certain nombre d'opérations manuelles afin de réinitialiser complètement son installation. Attention cela rendra les bases de données existantes inaccessibles ! | En cas de problème de configuration lors d'un premier déploiement d'un serveur MySQL on doit donc effectuer un certain nombre d'opérations manuelles afin de réinitialiser complètement son installation. Attention cela rendra les bases de données existantes inaccessibles ! | ||
- | <code>sudo apt autoremove --purge mysql-server\* mariadb-server\* | + | <code>sudo apt autoremove --purge ~n^mysql-server ~n^mariadb-server</code> |
+ | |||
+ | Puis : | ||
+ | <code> | ||
sudo mv /var/lib/mysql /var/lib/mysql.bak | sudo mv /var/lib/mysql /var/lib/mysql.bak | ||
sudo mv /etc/mysql /etc/mysql.bak | sudo mv /etc/mysql /etc/mysql.bak | ||
Ligne 443: | Ligne 404: | ||
Consultez le journal de [[:systemd]] : | Consultez le journal de [[:systemd]] : | ||
- | <code>journalctl -xe</code> | + | <code>journalctl -xe -u mysql</code> |
+ | et les logs dans /var/log/mysql/error.log | ||
=== AppArmor === | === AppArmor === | ||
Ligne 456: | Ligne 418: | ||
Il faut ensuite redémarrer l'ordinateur (redémarrer le service //apparmor// ne suffit pas). | Il faut ensuite redémarrer l'ordinateur (redémarrer le service //apparmor// ne suffit pas). | ||
- | ==== Conflit entre MySQL et MariaDB ==== | + | ==== Installation de MySQL impossible ==== |
+ | |||
+ | === Conflit entre MySQL et MariaDB === | ||
Si vous rencontrez une erreur de ce type lors de l'installation de MySQL : | Si vous rencontrez une erreur de ce type lors de l'installation de MySQL : | ||
Ligne 468: | Ligne 432: | ||
Il s'agit probablement d'un conflit entre MySQL et [[:MariaDB]]. Le plus simple est de [[#reinstallation_complete|réinstaller complètement MySQL]]. | Il s'agit probablement d'un conflit entre MySQL et [[:MariaDB]]. Le plus simple est de [[#reinstallation_complete|réinstaller complètement MySQL]]. | ||
- | ==== Impossible de réinstaller Mysql ==== | + | Il est également possible que des fichiers [[:systemd]] pour [[:MariaDB]] persistent après une mauvaise désinstallation, et empêchent une nouvelle installation propre. Pour résoudre ce problème, suivez [[https://askubuntu.com/a/1235833|cette procédure]]. |
- | Il est possible qu'il y ait des résidu de configuration de fichier Mariadb qui empêche une nouvelle installation propre. Pour résoudre ce problème suivez la procédure de cette [[https://askubuntu.com/questions/1235829/cant-get-mysql8-to-work-on-ubuntu-20-04|page]]. | ||
===== Voir aussi ===== | ===== Voir aussi ===== | ||
* [[https://www.mysql.com/|Le site officiel de MySQL]] [en] | * [[https://www.mysql.com/|Le site officiel de MySQL]] [en] | ||
* [[http://www.mysql.fr/|Le site officiel francophone]] [fr] | * [[http://www.mysql.fr/|Le site officiel francophone]] [fr] | ||
- | * [[http://www.system-linux.eu/index.php?category/Mysql|Aller plus loin avec MySQL]] [fr] | + | * [[https://www.system-linux.eu/index.php?category/Mysql|Aller plus loin avec MySQL]] [fr] |
* La page dédiée aux [[:mysql_outils|outils MySQL]] | * La page dédiée aux [[:mysql_outils|outils MySQL]] | ||
* [[:greensql|GreenSQL : Pare-feu applicatif SQL]] | * [[:greensql|GreenSQL : Pare-feu applicatif SQL]] | ||
- | * [[http://mysql.developpez.com/|La section dédiée à MySQL sur Developpez.com]] [fr] | + | * [[https://mysql.developpez.com/|La section dédiée à MySQL sur Developpez.com]] [fr] |
* La page des [[:SGBD|systèmes de gestion de base de données]] | * La page des [[:SGBD|systèmes de gestion de base de données]] | ||
* [[:MariaDB]] -> Le serveur alternatif 100% compatible MySQL | * [[:MariaDB]] -> Le serveur alternatif 100% compatible MySQL |