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
mysql [Le 18/06/2018, 14:37]
krodelabestiole + conflit 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 ======
  
-**[[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 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]] et sur [[:Bionic]].+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 ====
 Il est parfois utile de connaître la version installée:​\\ Il est parfois utile de connaître la version installée:​\\
-<​code>​mysqld ​--version</​code>​+<​code>​mysql --version</​code>​
  
 ===== Configuration ===== ===== Configuration =====
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 63: Ligne 54:
   * //​auth_socket//​ pour se connecter avec un utilisateur Ubuntu.   * //​auth_socket//​ pour se connecter avec un utilisateur Ubuntu.
  
-Depuis [[:​Bionic]],​ Ubuntu lie par défaut le compte //root// de Ubuntu avec //​auth_socket//​ en installant MySQL. Auparavant il fallait spécifier un mot de passe lors de l'​installation. Cela a différents impacts sur les méthodes de travail. ((Voir [[https://​forum.ubuntu-fr.org/​viewtopic.php?​id=2027272|ce fil]] sur le forum pour plus d'​information au sujet des répercutions de l'​utilisation de //​auth_socket//​.))+Depuis [[:bionic|Bionic ​18.04]], Ubuntu lie par défaut le compte //root// de Ubuntu avec //​auth_socket//​ en installant MySQL. Auparavant il fallait spécifier un mot de passe lors de l'​installation. Cela a différents impacts sur les méthodes de travail. ((Voir [[https://​forum.ubuntu-fr.org/​viewtopic.php?​id=2027272|ce fil]] sur le forum pour plus d'​information au sujet des répercutions de l'​utilisation de //​auth_socket//​.))
  
 ==== 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]] 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 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 : 
- 
-Si vous êtes déjà connecté dans 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 (uniquement si l'​authentification par mot de passe est déjà activée) : 
- 
-  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]] et les versions précédentes ([[:​Trusty]]). 
- 
-Sur [[:Bionic]] 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 148: Ligne 102:
  
 === Créer un utilisateur === === Créer un utilisateur ===
 +
 +Vous avez le choix entre créer un utilisateur identifié au moyen d'un mot de passe (méthode //​mysql_native_password//,​ celle par défaut pour MySQL) ou créer un accès MySQL à un utilisateur Ubuntu existant (méthode //​auth_socket//​).
 +La plupart du temps, on utilisera //​mysql_native_password//​.
  
 Pour créer un utilisateur MySQL identifié au moyen d'un mot de passe : Pour créer un utilisateur MySQL identifié au moyen d'un mot de passe :
Ligne 153: Ligne 110:
 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>​
 +
  
-Pour créer un accès MySQL à un utilisateur Ubuntu :+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) ​:
 <code mysql> <code mysql>
 CREATE USER '​nom_utilisateur'​@'​localhost'​ IDENTIFIED WITH auth_socket;​ CREATE USER '​nom_utilisateur'​@'​localhost'​ IDENTIFIED WITH auth_socket;​
Ligne 238: 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 323: Ligne 289:
 </​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 344: 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>​
  
  
  
 ==== Sauvegarde et importation ==== ==== Sauvegarde et importation ====
 +
 +<​note>​Ajoutez //-p// à ces commandes si vous utilisez un mot de passe pour le compte //root// :</​note>​
  
 Pour **exporter** la base de donnée « maBase », utilisez la commande : Pour **exporter** la base de donnée « maBase », utilisez la commande :
-<​code>​mysqldump ​-u root -p maBase > maBase_backup.sql</​code>​+<​code>​sudo mysqldump maBase > maBase_backup.sql</​code>​
  
 Ceci fera l'​export dans un fichier « maBase_backup.sql ». Ceci fera l'​export dans un fichier « maBase_backup.sql ».
  
 Pour exporter une table (par exemple //​ma_table//​ )appartenant à une base des données (par exemple //maBase//) : Pour exporter une table (par exemple //​ma_table//​ )appartenant à une base des données (par exemple //maBase//) :
-<​code>​mysqldump ​-u root -p maBase ma_table > ma_table.sql</​code>​+<​code>​sudo mysqldump maBase ma_table > ma_table.sql</​code>​
  
 Ainsi nous aurons une exportation seulement de la table //​ma_table//​ sans toucher à d'​autres tables de la base des données Ainsi nous aurons une exportation seulement de la table //​ma_table//​ sans toucher à d'​autres tables de la base des données
  
 Pour **importer** une base de données ou une sauvegarde sur « maBase », utilisez la commande : Pour **importer** une base de données ou une sauvegarde sur « maBase », utilisez la commande :
-<​code>​mysql ​-u root -p maBase < maBase_backup.sql</​code>​ +<​code>​sudo mysql maBase < maBase_backup.sql</​code>​
- +
-Puis tapez votre mot de passe.+
  
 <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 405: 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.
  
  
-==== Déplacer ses bases de données MySQL ==== 
  
-<note warning>​Attention !! lors d'une migration ubuntu14.04 -> 16.04 ne lancez pas la migration sans avoir remis mysql en état d'​origine (/​var/​lib/​mysql). Faites les opérations inverses décrites ci-dessous pour remettre vos données dans /​var/​lib/​mysql.</​note>​ 
-L'​emplacement des données de MySQL est indiqué dans la variable **datadir** qui se trouve dans le fichier ''​my.cnf''​. 
-Toutefois, il peut exister plusieurs fichiers ''​my.cnf''​ : 
-<​code>​ 
-$ mysqld --verbose --help | head -n13 | tail -n2 
-Default options are read from the following files in the given order: 
-/etc/my.cnf /​etc/​mysql/​my.cnf ~/​.my.cnf ​ 
-</​code>​ 
-Éventuellement ce fichier contient des directives **!includedir**. Il faut alors chercher dans ces répertoires le fichier qui contient **datadir**. 
  
-Dans la suite, nous allons déplacer les données dans **/​home/​mysql**.+   
 +===== Administrer MySQL via une une interface graphique =====
  
-Tout d'abord on arrête le service ​: +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 webD'​autres outils sont disponibles,​ vous en trouverez une liste non exhaustive sur la page [[:​mysql_outils|Outils MySQL]].
-<​code>​sudo systemctl stop mysql</​code>​ +
-[[:tutoriel:​comment_modifier_un_fichier|On édite le fichier]] qui contient **datadir** et on met la nouvelle valeur : +
-<​note>​On va éditer le fichier **/​etc/​mysql/​conf.d/my.cnf** réservé aux modifications personnelles</​note>​ +
-<​file>​ +
-[mysqld] +
-+
-# * Personnal Settings +
-+
-datadir ​        = /​home/​mysql +
-</​file>​ +
-On suppose que l'​ancienne valeur de **datadir** était **/​var/​lib/​mysql**. +
-On déplace les données : +
-<​code>​$ sudo mv /​var/​lib/​mysql /​home</​code>​+
  
-Malheureusement cela ne suffit pas. +===== Réinstallation complète =====
-Le premier problème vient du fichier''/​usr/​share/​mysql/​mysql-systemd-start''​ : +
-<​code>​ +
-$ head  /​usr/​share/​mysql/​mysql-systemd-start -n25 | tail -n16 +
-sanity () { +
-  if [ ! -r /​etc/​mysql/​my.cnf ]; then +
-    echo "MySQL configuration not found at /​etc/​mysql/​my.cnf. Please create one."​ +
-    exit 1 +
-  fi+
  
-  if [ ! -d /​var/​lib/​mysql ] && [ ! -L /​var/​lib/​mysql ]; then +De nombreux paramètres du serveur ​MySQL (tels que ses utilisateurs) sont stockés directement en base de données.
-    echo "MySQL data dir not found at /​var/​lib/​mysqlPlease create one."​ +
-    exit 1 +
-  fi+
  
-  if ! -d /​var/​lib/​mysql/​mysql ] && ​! -L /​var/​lib/​mysql/​mysql ​]; then +Ces bases de données ne seront jamais supprimées par [[:APT]] (et heureusement : on risquerait d'y perdre de précieuses données).
-    echo "MySQL system database not found. Please run mysql_install_db tool.+
-    exit 1 +
-  fi +
-+
-</​code>​+
  
-Il faut donc créer le répertoire **/​var/​lib/​mysql/​mysql** avec les bons droits : +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 mkdir -p /​var/​lib/​mysql/​mysql +
-$ sudo chown -R mysql:mysql /​var/​lib/​mysql +
-$ sudo chmod -R 700 /​var/​lib/​mysql</​code>​+
  
-Il faut maintenant configurer [[:​apparmor|AppArmor]]. D'​après ce qui suit, nous devons modifier le fichier ''​local/usr.sbin.mysqld'' ​:+<​code>​sudo apt autoremove --purge ~n^mysql-server ~n^mariadb-server<​/code> 
 + 
 +Puis :
 <​code>​ <​code>​
-$ tail /etc/apparmor.d/usr.sbin.mysqld -n3 +sudo mv /var/lib/mysql /var/lib/mysql.bak 
-  # Site-specific additions and overrides. See local/README for details. +sudo mv /etc/mysql /etc/mysql.bak 
-  #include <local/usr.sbin.mysqld>​ +sudo mkdir -p /etc/mysql/conf.d 
-</​code>​ +sudo apt clean</​code>​ 
-[[:​tutoriel:​comment_modifier_un_fichier|Modifier le fichier]] ''​/etc/​apparmor.d/​local/​usr.sbin.mysqld''​ en ajoutant : +On peut ensuite choisir ​d'installer ​[[:MySQL]] ou [[:MariaDB]] : 
-<​file>​ +<code>sudo apt install ​mysql-server</code
-# Allow data dir access +**__ou__** 
-  /home/​mysql/ ​r, +<code>sudo apt install mariadb-server<​/code>
-  /home/mysql/** rwk, +
-</​file> ​  +
-Rechargez : +
-<​code>​sudo systemctl reload apparmor</​code>​ +
-Redémarrez le service : +
-<​code>​sudo systemctl start mysql</​code>​ +
-Vérifiez le changement : +
-<​code>​ +
-$ mysql -u root -p -e '​select @@datadir'​ +
-Enter password:  +
-+--------------+ +
-| @@datadir ​   | +
-+--------------+ +
-/home/​mysql/ ​+
-+--------------+ +
-</​code>​ +
- +
-==== Transférer une base de données entre deux serveurs via SSH ==== +
- +
-=== Préambule === +
- +
-Dans le cadre d'une infra sans serveur spécifique de base de données, et que l'on souhaite partager une base commune. +
- +
-=== Mise en place === +
- +
-Dans un premier temps il faut remplir deux conditions : +
-  *  que l'​utilisateur de la base de données soit reconnu par le second serveur +
-  *  que l'​utilisateur de la base de données soit reconnu par les deux serveurs MySql. +
- +
-Pour une reconnaissance utilisateur d'un serveur à un autre : [[ssh#​authentification_par_un_systeme_de_cles_publiqueprivee|Authentification par clés SSH]] (sans passphrase) +
- +
-Pour que MySql reconnaisse l'​utilisateur sans devoir saisir son mot de passe à chaque commande (dans le cas d'un tâche ​[[cron|CRON]] par exemple), il faut ajouter un fichier dans le répertoire personnel de cet utilisateur et ce __**sur chaque serveur**__. [[tutoriel:comment_editer_un_fichier|Éditer]]/​créer le fichier **~/​.my.cnf** +
- +
-<file> +
-[mysql+
-user=nom_utilisateur +
-password=mot_de_passe_utilisateur +
- +
-[mysqldump] +
-user=nom_utilisateur +
-password=mot_de_passe_utilisateur +
-</file+
-Protéger le : +
- +
-  chmod 600 ~/.my.cnf +
-   +
-Transférer depuis le serveur ​**A** vers le **B** : +
- +
-  mysqldump nom_bdd_serveur_A | ssh utilisateur_serveur_B@ip_serveur_B mysql nom_bbd_serveur_B +
-   +
-Exemple de commande en tache [[cron|CRON]] : +
- +
-  10 0 * * * mysqldump nom_bdd_serveur_A | ssh utilisateur_serveur_B@ip_serveur_B mysql nom_bbd_serveur_B ​>/dev/​null ​ #Mise à jour BDD +
-   +
-===== Administrer MySQL via une une interface graphique ===== +
- +
-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]].+
  
 ===== Problèmes courants ===== ===== Problèmes courants =====
Ligne 540: 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 553: 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 563: Ligne 430:
 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]].
  
-===== Liens =====+===== 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.addedbytes.com/​cheat-sheets/​mysql-cheat-sheet/​|Memento MySQL]] [en] +  * [[https://​www.system-linux.eu/​index.php?​category/​Mysql|Aller plus loin avec MySQL]] [fr]
-  * [[http://​www.system-linux.eu/​index.php?​category/​Mysql|Aller plus loin avec MySQL]] [fr] +
-  * [[http://​www.generation-linux.fr/​index.php?​post/​2007/​12/​17/​9-cours-mysql|En savoir plus sur les commandes Mysql]] [fr] -> 3 petits cours sur MySQL à télécharger (PDF) +
-  * [[http://​www.system-linux.eu/​index.php?​post/​2008/​12/​29/​Configure-et-Installation-de-mysql|Installation à la main]] [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://​www.system-linux.eu/​index.php?​post/​2009/​06/​28/​Proteger-son-server-Mysql-avec-GreenSQL|Protéger son serveur MySQL avec GreenSQL]] [fr] +  * [[https://​mysql.developpez.com/​|La section dédiée à MySQL sur Developpez.com]] [fr] 
-  * [[http://​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]].+
   * [[:​MariaDB]] -> Le serveur alternatif 100% compatible MySQL   * [[:​MariaDB]] -> Le serveur alternatif 100% compatible MySQL
   * [[.:?​do=showtag&​tag=mysql|La liste des pages taguées avec MySQL]]   * [[.:?​do=showtag&​tag=mysql|La liste des pages taguées avec MySQL]]
  • mysql.1529325450.txt.gz
  • Dernière modification: Le 18/06/2018, 14:37
  • par krodelabestiole