Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Prochaine révision Les deux révisions suivantes
mysql [Le 06/01/2019, 13:30]
krodelabestiole [Liens] liens morts ou plus anciens que 2010
mysql [Le 14/03/2022, 10:36]
194.167.170.2 [Connexions entrantes]
Ligne 1: Ligne 1:
-{{tag>​Xenial Bionic sgbd mysql serveur réseau}} 
  
-----+{{tag>​Xenial Bionic Focal sgbd mysql serveur réseau}}
  
 ====== MySQL ====== ====== MySQL ======
  
-**[[https://​www.mysql.com/​|MySQL]]** est un [[wpfr>​SGBD|système de gestion de bases de données relationnelles]] (SGBDR) ​libre, gratuit, performant, très populaire, multi-threadé,​ multi-utilisateurs…+**[[https://​www.mysql.com/​|MySQL]]** est un [[wpfr>​SGBD|système de gestion de bases de données relationnelles]] (SGBDR) ​propriétaire, gratuit, performant, très populaire, multi-threadé,​ multi-utilisateurs…
  
-<note tip>​MySQL appartient à [[wpfr>​Oracle_(entreprise)|Oracle]]. Il existe un fork plus communautaire,​ 100% compatible MySQL et a priori plus performant créé et maintenu par Michael Wideniusm fondateur de MySQL. Il s'agit de [[:​MariaDB]],​ qui est également disponible sur Ubuntu, et choisi par défaut sur [[wpfr>​Debian]].</​note>​+<note tip>​MySQL appartient à [[wpfr>​Oracle_(entreprise)|Oracle]]. Il existe un fork open-source, ​plus communautaire,​ 100% compatible MySQL et a priori plus performant créé et maintenu par Michael Wideniusm fondateur de MySQL. Il s'agit de [[:​MariaDB]],​ qui est également disponible sur Ubuntu, et choisi par défaut sur [[wpfr>​Debian]].</​note>​
  
 MySQL est principalement un //serveur// de bases de données. Pour s'y connecter localement ou à distance, on utilise un //client//. Il peut s'agir de la commande ''​mysql'',​ ou couramment d'un script [[:PHP]]. Il faudra dans ce cas installer le [[:​php#​association_avec_un_serveur_de_base_de_donnees|module]] [[apt>​php-mysql]] qui permet à PHP de communiquer avec un serveur MySQL. ​ MySQL est principalement un //serveur// de bases de données. Pour s'y connecter localement ou à distance, on utilise un //client//. Il peut s'agir de la commande ''​mysql'',​ ou couramment d'un script [[:PHP]]. Il faudra dans ce cas installer le [[:​php#​association_avec_un_serveur_de_base_de_donnees|module]] [[apt>​php-mysql]] qui permet à PHP de communiquer avec un serveur MySQL. ​
Ligne 14: Ligne 13:
  
 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]].+[[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]], MySQL 8.0 sur [[:​Focal|Focal 20.04]].
  
 ===== Utilisation ===== ===== Utilisation =====
Ligne 109: Ligne 108:
 </​note>​ </​note>​
  
-Pour changer ou attribuer un mot de passe ou l'​utilisateur root (qui n'est pas forcément le même que l'​utilisateur root du système) ​ou activer son authentification par mot de passe sur [[:​xenial|Xenial 16.04]] et précédents :+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** :
  
-Si vous êtes déjà connecté dans mysql :+Dans la console MySQL :
  
   ALTER USER '​root'​@'​localhost'​ IDENTIFIED WITH mysql_native_password BY '​le_mot_de_pass_choisi';​   ALTER USER '​root'​@'​localhost'​ IDENTIFIED WITH mysql_native_password BY '​le_mot_de_pass_choisi';​
  
-Ou avec mysqladmin pour changer le mot de passe (uniquement si l'​authentification par mot de passe est déjà activée) ​:+Ou avec ''​mysqladmin'' ​pour changer le mot de passe :
  
   sudo mysqladmin password Nouveau_mot_de_passe -p Ancien_mot_de_passe   sudo mysqladmin password Nouveau_mot_de_passe -p Ancien_mot_de_passe
Ligne 156: Ligne 155:
 CREATE USER '​nom_utilisateur_choisi'​@'​localhost'​ IDENTIFIED WITH mysql_native_password BY '​mot_de_passe_solide';​ CREATE USER '​nom_utilisateur_choisi'​@'​localhost'​ IDENTIFIED WITH mysql_native_password BY '​mot_de_passe_solide';​
 </​code>​ </​code>​
 +ou si cette commande échoue avec une erreur de syntaxe :
 +<code mysql>
 +CREATE USER '​nom_utilisateur_choisi'​@'​localhost'​ IDENTIFIED BY '​mot_de_passe_solide';​
 +</​code>​
 +
  
 Ou pour créer un accès MySQL à un utilisateur Ubuntu (seulement dans le cadre d'une utilisation avancée, et si vous comprenez ce que vous faites) : Ou pour créer un accès MySQL à un utilisateur Ubuntu (seulement dans le cadre d'une utilisation avancée, et si vous comprenez ce que vous faites) :
Ligne 211: Ligne 215:
 </​code>​ </​code>​
  
-==== Connexions entrantes ==== 
- 
-Par défaut, MySQL n'​écoute que les connexions venant de //​localhost//​ (127.0.0.1),​ c'​est-à-dire du système sur lequel il est installé. 
- 
-Pour pouvoir accéder à MySQL depuis un autre ordinateur, [[:​tutoriel:​comment_editer_un_fichier|ajoutez la ligne suivante au fichier]] **/​etc/​mysql/​mysql.conf.d/​mysqld.cnf** dans la section « ''​[mysqld]''​ »,​ sous [[Mariadb]] il s'agit du fichier **/​etc/​mysql/​mariadb.conf.d/​50-server.cnf** :​ 
- 
-<file mysql> 
-bind-address = x.x.x.x 
-</​file>​ 
  
 où x.x.x.x est l'​adresse ip de l'​interface sur laquelle MySQL doit écouter. Cela permet de n'​écouter que sur une ip privée si vous avez plusieurs interfaces réseaux. où x.x.x.x est l'​adresse ip de l'​interface sur laquelle MySQL doit écouter. Cela permet de n'​écouter que sur une ip privée si vous avez plusieurs interfaces réseaux.
Ligne 229: Ligne 224:
  
  
-Pour créer un utilisateur ​mysql qui est autorisé ​à se connecter à distance ​:+tilisateur]''​ par le nom d'utilisateur ​que vous souhaitez créer, ''​[base de donnée]''​ par le nom de la base de données ​à laquelle il aura accès, ''​[mot de passe]''​ par le mot de passe que vous souhaitez lui attribuer, et ''​[adresse IP]''​ par l'​adresse IP depuis laquelle vous souhaitez vous connecter à distance.
  
-se connecter sur mysql en root :+Pour autoriser l'​accès venant de toutes machines (limité par l'​authentification),​ remplacer ''​[adresse IP]''​ par le symbole ''​%''​.
  
-<​code>​sudo mysql</​code>​ +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.
-(on ajoute //-p// si on utilise un mot de passe pour //root//) +
-Puis une fois connecté : +
-<code mysql>​GRANT ALL ON [base de donnée].* TO '[nom utilisateur]'​@'​[adresse IP]' IDENTIFIED WITH mysql_native_password BY '[mot de passe]';</​code>​ +
- +
-Dans cette requête remplacez ​''​[nom utilisateur]'' ​par le nom d'​utilisateur ​que vous souhaitez créer, ​''​[base de donnée]'' ​par le nom de la base de données à laquelle il aura accès, ''​[mot de passe]''​ par le mot de passe que vous souhaitez lui attribuer, et ''​[adresse IP]''​ par l'​adresse IP depuis laquelle vous souhaitez vous connecter à distance. +
- +
-Pour autoriser l'​accès venant de toutes machines (limité par l'​authentification),​ remplacer ''​[adresse IP]''​ par le symbole ''​%''​.+
  
 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 326: Ligne 316:
 </​code>​ </​code>​
  
 +=== Créer une base de données et un utilisateur qui lui est associé ===
 +
 +Cette procédure est la plus courante, c'est celle qu'on réalise lorsqu'​on installe une application web en production. Pour des raisons de sécurité chaque application doit se connecter avec un utilisateur MySQL qui lui est dédié, et qui n'a accès qu'à la base correspondante.
 +<code mysql>
 +CREATE DATABASE application;​
 +CREATE USER '​utilisateur'​@'​localhost'​ IDENTIFIED BY '​mot_de_passe';​
 +GRANT ALL ON application.* TO '​utilisateur'​@'​localhost';​
 +FLUSH PRIVILEGES;
 +QUIT;
 +</​code>​
 +
 +Il faut remplacer dans ces requêtes ''​application''​ par le nom de l'​application web ou du site internet (sans espace ni caractère spécial) , ''​utilisateur''​ par un nom d'​utilisateur (qui peut aussi être celui de l'​application,​ pour s'y retrouver facilement) et ''​mot_de_passe''​ par un vrai mot de passe complexe qu'on note : on devra renseigner ces identifiants lors de l'​installation de l'​application.
 +
 +On vient de créer la base de donnée //​application//​ à laquelle l'​utilisateur //​utilisateur//​ aura accès.
  
 ==== Tables ==== ==== Tables ====
Ligne 347: Ligne 351:
 </​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 377: Ligne 381:
  
 <note tip> <note tip>
-Si vous souhaitez mettre en place une solution de sauvegarde automatique de bases de données à intervalle régulier, rendez-vous sur le tutoriel traitant ​de la [[:​tutoriel:​sauvegarder_automatiquement_ses_bases_de_donnees|sauvegarde automatique de bases de données via cron]].+Si vous souhaitez mettre en place une solution de sauvegarde automatique de bases de données à intervalle régulier, rendez-vous sur la page de documentation ​de [[automysqlbackup|AutoMySQLBackup]]
 </​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]].
  
  
-==== Restauration à partir du dump du datadir ==== 
- 
-<note important>​Ne fonctionne que pour les tables au format MyISAM.</​note>​ 
- 
-Si vous n'avez pas pu faire un backup pour une raison quelconque (par exemple, vous récupérez un disque dur dont le système est mort), on peut sauvegarder le répertoire ''/​var/​lib/​mysql/''​ dans lequel chacune des bases est enregistrée dans un répertoire portant son nom. 
- 
-Pour restaurer vos bases une par une, suivez la procédure ci-dessous (après avoir d'​abord installé une version de mysql-server). 
- 
-Créer une base de données du même nom que celle que vous voulez restaurer : 
-<​code>​echo "​CREATE DATABASE MaBaseDeDonnee"​ | mysql -u root -h localhost -p</​code>​ 
- 
-Copier les fichiers du dump de la base de données (les *.FRM, *.MYD, *.MYI, *.opt), dans le dossier que MySQL a créé pour votre base de données : 
-<​code>​cd ~/​MonDossierContenantLeDump/​MaBaseDeDonnee 
-sudo cp * /​var/​lib/​mysql/​MaBaseDeDonnee</​code>​ 
- 
-Changer les droits sur les fichiers copiés : 
-<​code>​sudo chmod -R ug+rw /​var/​lib/​mysql/​MaBaseDeDonnee/​ 
-sudo chown -R mysql:mysql /​var/​lib/​mysql/​MaBaseDeDonnee/</​code>​ 
- 
-Voilà, votre base doit correctement fonctionner à présent. 
  
 ==== Compacter l'​espace utilisé par ibdata1 ==== ==== Compacter l'​espace utilisé par ibdata1 ====
Ligne 410: Ligne 394:
 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 420: Ligne 404:
  
 Il est possible d'​administrer un serveur MySQL via une interface graphique avec par exemple [[:​phpMyAdmin]] ou [[:​mysql_outils#​adminer|Adminer]] qui sont d'​excellentes applications web. D'​autres outils sont disponibles,​ vous en trouverez une liste non exhaustive sur la page [[:​mysql_outils|Outils MySQL]]. Il est possible d'​administrer un serveur MySQL via une interface graphique avec par exemple [[:​phpMyAdmin]] ou [[:​mysql_outils#​adminer|Adminer]] qui sont d'​excellentes applications web. D'​autres outils sont disponibles,​ vous en trouverez une liste non exhaustive sur la page [[:​mysql_outils|Outils MySQL]].
 +
 +===== Réinstallation complète =====
 +
 +De nombreux paramètres du serveur MySQL (tels que ses utilisateurs) sont stockés directement en base de données.
 +
 +Ces bases de données ne seront jamais supprimées par [[:APT]] (et heureusement : on risquerait d'y perdre de précieuses données).
 +
 +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 !
 +
 +Pour Ubuntu avant 20.04 :
 +<​code>​sudo apt autoremove --purge mysql-server\* mariadb-server\*</​code>​
 +À partir de Ubuntu 20.04 :
 +<​code>​sudo apt autoremove --purge ~n^mysql-server ~n^mariadb-server</​code>​
 +
 +Puis quelle que soit la version :
 +<​code>​
 +sudo mv /​var/​lib/​mysql /​var/​lib/​mysql.bak
 +sudo mv /etc/mysql /​etc/​mysql.bak
 +sudo mkdir -p /​etc/​mysql/​conf.d
 +sudo apt clean</​code>​
 +On peut ensuite choisir d'​installer [[:MySQL]] ou [[:​MariaDB]] :
 +<​code>​sudo apt install mysql-server</​code>​
 +**__ou__**
 +<​code>​sudo apt install mariadb-server</​code>​
  
 ===== Problèmes courants ===== ===== Problèmes courants =====
Ligne 426: Ligne 434:
  
 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 439: Ligne 448:
 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 449: Ligne 460:
 Upgrade process encountered error and will not continue.</​code>​ Upgrade process encountered error and will not continue.</​code>​
  
-Il s'agit probablement d'un conflit entre MySQL et [[:​MariaDB]]. ​Consultez ​[[:lamp#conflit_entre_mysql_et_mariadb|cette ​documentation]].+Il s'agit probablement d'un conflit entre MySQL et [[:​MariaDB]]. ​Le plus simple est de [[#reinstallation_complete|réinstaller complètement 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]].
  
 ===== Voir aussi ===== ===== Voir aussi =====
Ligne 455: Ligne 468:
   * [[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
  • mysql.txt
  • Dernière modification: Le 10/01/2024, 06:35
  • par krodelabestiole