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 10/06/2018, 09:31]
L'Africain [Se connecter sans sudo] typo
mysql [Le 17/06/2018, 23:32] (Version actuelle)
krodelabestiole apt-get -> apt, code -> file ou code mysql, maj pour les termes SQL
Ligne 1: Ligne 1:
-{{tag>​Xenial ​Trusty ​sgbd mysql serveur réseau}}+{{tag>​Xenial ​Bionic ​sgbd mysql serveur réseau}}
  
 ---- ----
Ligne 5: Ligne 5:
 ====== 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) libre, gratuit, performant, très populaire, multi-threadé,​ multi-utilisateurs
-===== Installation =====+
  
-L'​installation ​de ce paquet doit se faire de préférence en utilisant ​[[terminal]] via la commande :​ <code>sudo apt install mysql-server</codeEn effeten passant par le terminal, l'installation se déroule correctement et notamment vous demande le mot de passe mysql-server </note>+<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> 
 + 
 +MySQL est principalement un //serveur// de bases de données. Pour s'y connecter localement ou à distanceon 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.  
 + 
 +===== Installation =====
  
-<note>Le support de l'​extension ​[[wpfr>PHP_Data_Objects|PHP Data Objects]] PHP Data Objects (PDO) est installé par défaut avec php5-mysql lors de l'​installation de php5.</​note>​+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]].
  
 ===== Utilisation ===== ===== Utilisation =====
Ligne 18: Ligne 22:
 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]]:​
  
-  sudo service mysql start+  sudo systemctl ​start mysql
  
  
Ligne 24: Ligne 28:
  
 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]]:​
-  ​sudo service mysql restart+ 
 +  ​sudo systemctl ​restart ​mysql
  
 ==== Arrêt ==== ==== Arrêt ====
  
 Pour arrêter le serveur MySQL, tapez la [[:​commande_shell|commande]] suivante dans un [[:​terminal]]:​ Pour arrêter le serveur MySQL, tapez la [[:​commande_shell|commande]] suivante dans un [[:​terminal]]:​
-  sudo service mysql stop+  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 service mysql reload+  sudo systemctl ​reload ​mysql
  
 ==== 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 service mysql force-reload+  sudo systemctl ​force-reload ​mysql
  
 ==== 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>​mysqld --version</​code>​
 +
 ===== Configuration ===== ===== Configuration =====
  
-==== Lancer la console MySQL ====+==== Authentification ​====
  
-<note important>​ +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]]).
-Bogue possible rencontré avec le client texte de MySQL la touche ​[Supprdu clavier insère le tilde **~** (au lieu de supprimer).+
  
-Pour palier ce bogueinstallez le programme rlwrap (pour en savoir plus : //man rlwrap//​), ​[[:tutoriel:​comment_installer_un_paquet|installez le paquet]] **[[apt>​rlwrap]]** et ajoutez celui-ci avant la commande mysql, exemple ​:+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 comportementsdont //[[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.
  
-  rlwrap -a mysql -uroot -pvotremotdepasse votrebase+Pour choisir l'un ou l'​autre des comportement,​ on renseigne le champs //plugin// de la table //user// : 
 +  * //​mysql_native_password//​ ou vide pour utiliser l'​authentification native de MySQL. 
 +  * //​auth_socket//​ pour se connecter avec un utilisateur Ubuntu.
  
-</note>+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//​.))
  
 +==== Lancer la console MySQL ====
 +
 +**Avant [[:​bionic|Ubuntu 18.04 Bionic]]**\\
 +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 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.   * 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>​
 +
 +**La console MySQL**\\
 Vous arriverez alors sur un prompt du type : Vous arriverez alors sur un prompt du type :
  
Ligne 75: Ligne 92:
 ==== Sélectionner la base de données à utiliser ==== ==== Sélectionner la base de données à utiliser ====
  
-Soit directement lorsque vous lancez le client MySQL en [[:​commande_shell|ligne de commande]]+Soit directement lorsque vous lancez le client MySQL en ligne de commande: 
- +<​code>​mysql -u root -D votre_base ​-p</​code>​ 
-  ​mysql -u root -D votre_base+<​code>​sudo mysql -D votre_base</​code>​ 
 +  ​
  
 Soit une fois connecté à MySQL en tapant la [[:​commande_shell|commande]] suivante dans un [[:​terminal]]:​ Soit une fois connecté à MySQL en tapant la [[:​commande_shell|commande]] suivante dans un [[:​terminal]]:​
Ligne 85: Ligne 103:
 ==== Ajouter ou changer le mot de passe de root ==== ==== Ajouter ou changer le mot de passe de root ====
  
-<​note ​important+<​note ​warning
-Depuis mysql 5.7 le champ PASSWORD ​de la description ​de la base de donnée a été changé en authentication_string. +À 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). 
-À partir ​de cette version, il faut donc remplacer le mot **password** dans les instructions ci-dessous par **authentication_string**.+ 
 +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>​ </​note>​
  
-Pour changer ​le mot de passe de l'​utilisateur root (qui n'est pas le même que l'​utilisateur root du système) :+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 : Si vous êtes déjà connecté dans mysql :
  
-  ​SET password FOR "root"@"localhost" = password('Nouveau_mot_de_passe');+  ​ALTER USER 'root'@'localhost' ​IDENTIFIED WITH mysql_native_password BY '​le_mot_de_pass_choisi';
  
-Sinon depuis un terminal ​:+Ou avec mysqladmin pour changer le mot de passe (uniquement si l'​authentification par mot de passe est déjà activée) ​:
  
   sudo mysqladmin -u root password Nouveau_mot_de_passe -p Ancien_mot_de_passe   sudo mysqladmin -u root password Nouveau_mot_de_passe -p Ancien_mot_de_passe
Ligne 102: Ligne 121:
 Vous pourrez avoir besoin de mettre votre mot de passe entre guillemet si celui ci comporte des caractères spéciaux. Vous pourrez avoir besoin de mettre votre mot de passe entre guillemet si celui ci comporte des caractères spéciaux.
  
-Lorsque l'​utilisateur root ne possède aucun mot de passe, utiliser cette commande : 
- 
-  sudo mysqladmin -u root password Nouveau_mot_de_passe -p ""​ 
   ​   ​
 ==== Redéfinir de force le mot de passe de root ==== ==== 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>​ 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 : 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 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>​
-  * Nous allons utiliser la table contenant les paramètres de MySQL : <code mysql> 
-use mysql; 
-</​code>​ 
   * On met en place le nouveau mot de passe : <code mysql>   * On met en place le nouveau mot de passe : <code mysql>
-UPDATE mysql.user +ALTER USER '​root'​@'​localhost' IDENTIFIED WITH mysql_native_password BY '​le_mot_de_pass_choisi';</​code><​code mysql>​FLUSH PRIVILEGES;</​code>​
-SET authentication_string=PASSWORD('​NouveauMdP'​) WHERE user='​root' ​AND host='​localhost';</​code><​code mysql>​FLUSH PRIVILEGES;</​code>​+
  
-  * On quitte le prompt de MySQL : <​code>​quit;</​code>​+  * On quitte le prompt de MySQL : <​code ​mysql>QUIT;</​code>​
  
-====Se connecter sans sudo==== 
-Il peut arriver que vous soyez obligé à chaque connexion d'​utiliser sudo, sans quoi la permission vous est refusée. Pour ce connecter directement,​ sans devoir utiliser sudo, entrez cette commande dans le prompt Mysql : 
-<code mysql>​grant all privileges on *.* to '​user'​@'​localhost'​ identified by '​user_password';</​code>​ 
-Modifier ''​user'',​ par le nom d'​utilisateur qui veut se connecter sans sudo, et ''​user_password'',​ votre mot de passe. 
-N'​oubliez pas le  : 
-<code mysql>​FLUSH PRIVILEGES;</​code>​ 
-Redémarrer le service mysql. 
-==== Utiliser un autre numéro de port ==== 
  
-Pour activer la connexion à MySQL via le port 3306, activez l’accès distant en commentant la ligne suivante dans le fichier **/​etc/​mysql/​mysql.conf.d/​mysqld.cnf** ​ ou  [**/​etc/​mysql/​mysql.conf.d/​mysqld.cnf** avec la version 16 d'​Ubuntu] (en ajoutant ''#''​ au début de la ligne) :+==== Utilisateurs ====
  
-  skip-networking +=== Lister les utilisateurs ===
-   +
-ou +
-   +
-  bind-address ​127.0.0.1+
  
-Ensuite, si vous voulez changer de port, il suffit de modifier la ligne suivante du bloc [mysqldpour y mettre le port voulu+Vous pouvez lister les utilisateurs ainsi que leurs [[#​authentification|méthodes d'​authentification]] avec la requête suivante : 
 +<code mysql> 
 +SELECT user, host, plugin, authentication_string FROM mysql.user;​ 
 +</​code>​
  
-  port            ​3306 +=== Créer un utilisateur === 
-   + 
-FIXME+Pour créer un utilisateur MySQL identifié au moyen d'un mot de passe : 
 +<code mysql> 
 +CREATE USER '​nom_utilisateur_choisi'​@'​localhost'​ IDENTIFIED WITH mysql_native_password BY '​mot_de_passe_solide';​ 
 +</​code>​ 
 + 
 +Pour créer un accès MySQL à un utilisateur Ubuntu : 
 +<code mysql> 
 +CREATE USER '​nom_utilisateur'​@'​localhost'​ IDENTIFIED WITH auth_socket;​ 
 +</​code>​ 
 + 
 +=== Modifier l'​accès d'un utilisateur === 
 + 
 +Pour modifier l'​accès d'un utilisateur MySQL existant, et l'​identifier par mot de passe (ou simplement changer son mot de passe) : 
 +<code mysql> 
 +ALTER USER '​nom_utilisateur'​@'​localhost'​ IDENTIFIED WITH mysql_native_password BY '​mot_de_passe_solide';​ 
 +</​code>​ 
 + 
 +Pour lier un compte MySQL existant à un utilisateur Ubuntu (il faut que les noms d'​utilisateur soient les mêmes) : 
 +<code mysql> 
 +ALTER USER '​nom_utilisateur'​@'​localhost'​ IDENTIFIED WITH auth_socket;​ 
 +</​code>​ 
 + 
 +=== Supprimer un utilisateur === 
 + 
 +Pour supprimer un utilisateur : 
 +<code mysql> 
 +DROP USER '​nom_utilisateur'​@'​localhost';​ 
 +</​code>​ 
 + 
 +==== Privilèges ==== 
 + 
 +=== Donner tous les droits sur une base de données à un utilisateur précis === 
 + 
 +<code mysql> 
 +GRANT ALL ON nom_base.* TO '​nom_utilisateur'​@'​localhost';​ 
 +</​code>​ 
 +Puis rechargez les privilèges. 
 + 
 +=== Donner tous les droits à un super-administrateur === 
 + 
 +<code mysql> 
 +GRANT ALL ON *.* TO '​nom_utilisateur'​@'​localhost';​ 
 +</​code>​ 
 +Puis rechargez les privilèges. 
 + 
 +=== Supprimer les droits sur une base de données à un utilisateur précis === 
 + 
 +<code mysql> 
 +REVOKE ALL ON nom_base.* FROM '​nom_utilisateur'​@'​localhost';​ 
 +</​code>​ 
 +Puis rechargez les privilèges. 
 + 
 +=== Recharger les privilèges === 
 + 
 +Après chacune de ces opérations il est nécessaire de recharger les privilèges des utilisateurs MySQL : 
 +<code mysql> 
 +FLUSH PRIVILEGES; 
 +</​code>​
  
 ==== Connexions entrantes ==== ==== Connexions entrantes ====
Ligne 158: Ligne 223:
  
 Redémarrez le service après avoir modifié le fichier de configuration : Redémarrez le service après avoir modifié le fichier de configuration :
-<​code>​sudo ​/​etc/​init.d/​mysql restart</​code>​ +<​code>​sudo ​systemctl restart ​mysql</​code>​
  
  
Ligne 166: Ligne 230:
 se connecter sur mysql en root : se connecter sur mysql en root :
  
-<​code>​mysql ​-u root -p</​code>​+<​code>​sudo mysql</​code>​ 
 +(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>​
  
-une fois connecté : +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.
-<code mysql>​grant all privileges on *.* to 'remote_user'@'123.123.123.123' ​identified by 'user_password';</​code>​+
  
-le ***.*** représente ​l'​accès ​à l'ensemble des bases de donnéessi vous voulez autoriser l'accès de l'utilisateur à une seule base de données, remplacez ***.*** ​par le nom de la base de données.+Pour autoriser ​l'​accès ​venant de toutes machines (limité par l'authentification)remplacer ''​[adresse IP]''​ par le symbole ''​%''​.
  
-le **remote_user** est le nom de l'​utilisateur qui sera créé.+Pour rendre ces modifications effectives, terminez par : 
 +<code mysql>​FLUSH PRIVILEGES;</​code>​
  
-le **123.123.123.123** représente l'ip à partir de laquelle nous pourrons nous connecter à distance.+==== Configuration en UTF-8 ====
  
-Pour autoriser l'​accès venant de toutes machines (limité par l'​authentification),​ remplacer l'ip par le symbole **'​%'​**. 
- 
-Pour attribuer un mot de passe à l'​utilisateur,​ changer **user_password** par le nouveau mot de passe.. 
- 
-Pour rendre ces privilèges effectifs : 
-<code mysql>​flush privileges;</​code>​ 
- 
- 
-==== Configuration en UTF-8 ==== 
 Il suffit d'​ajouter avec les [[sudo|droits d'​administration]] les lignes suivantes dans les sections adéquates (ne pas hésiter à les créer si elles n'​existent pas) dans le fichier **/​etc/​mysql/​mysql.conf.d/​mysqld.cnf** : Il suffit d'​ajouter avec les [[sudo|droits d'​administration]] les lignes suivantes dans les sections adéquates (ne pas hésiter à les créer si elles n'​existent pas) dans le fichier **/​etc/​mysql/​mysql.conf.d/​mysqld.cnf** :
 <​file>​ <​file>​
Ligne 201: Ligne 259:
  
 puis de relancer le serveur mysql : puis de relancer le serveur mysql :
- +<​code>​sudo systemctl ​restart ​mysql</​code>​
-  ​sudo service mysql restart+
  
 Vous pouvez vérifier le résultat une fois loggé dans mysql grâce à la commande suivante : Vous pouvez vérifier le résultat une fois loggé dans mysql grâce à la commande suivante :
  
-<​code ​SQL>+<​code ​mysql>
 SHOW VARIABLES LIKE '​char%';​ SHOW VARIABLES LIKE '​char%';​
 </​code>​ </​code>​
Ligne 212: Ligne 269:
 Résultat : Résultat :
  
-<file>+<code mysql>
 mysqld> SHOW VARIABLES LIKE '​char%';​ mysqld> SHOW VARIABLES LIKE '​char%';​
 +--------------------------+----------------------------+ +--------------------------+----------------------------+
Ligne 227: Ligne 284:
 +--------------------------+----------------------------+ +--------------------------+----------------------------+
 8 rows in set (0.00 sec) 8 rows in set (0.00 sec)
-</file>+</code>
  
 ===== Quelques requêtes SQL ===== ===== Quelques requêtes SQL =====
Ligne 238: Ligne 295:
 === Utiliser une base de données existante === === Utiliser une base de données existante ===
  
-<​code ​SQL+<​code ​mysql
-use nom_de_la_base;​+USE nom_de_la_base;​
 </​code>​ </​code>​
    
 === Créer une base de données === === Créer une base de données ===
  
-<​code ​SQL+<​code ​mysql
-create database ​nom_de_la_base;​+CREATE DATABASE ​nom_de_la_base;​
 </​code>​ </​code>​
  
 === Liste des bases de données === === Liste des bases de données ===
  
-<​code ​SQL+<​code ​mysql
-show databases ​;+SHOW DATABASES;
 </​code>​ </​code>​
  
 === Supprimer une base de données === === Supprimer une base de données ===
  
-<​code ​SQL+<​code ​mysql
-drop database ​nom_de_la_base;​+DROP DATABASE ​nom_de_la_base;​
 </​code>​ </​code>​
  
 === Importer une base de données située dans le répertoire courant (base de donnée exportée en .sql) === === Importer une base de données située dans le répertoire courant (base de donnée exportée en .sql) ===
  
-<​code ​SQL+<​code ​mysql
-source ​fichier.sql;​+SOURCE ​fichier.sql;​
 </​code>​ </​code>​
  
Ligne 271: Ligne 328:
 === Liste des tables de la base de données active === === Liste des tables de la base de données active ===
  
-<​code ​SQL+<​code ​mysql
-show tables;+SHOW TABLES;
 </​code>​ </​code>​
  
 === Structure d'une table === === Structure d'une table ===
  
-<​code ​SQL+<​code ​mysql
-describe ​nom_table;+DESCRIBE ​nom_table;
 </​code>​ </​code>​
  
 === Renommer une table === === Renommer une table ===
  
-<​code ​SQL+<​code ​mysql
-alter table nom_table ​rename as nouveau_nom;​+ALTER TABLE nom_table ​RENAME AS nouveau_nom;​
 </​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 [[http://​dev.mysql.com/​doc/​|documentation MySQL]].
- 
- 
-==== Utilisateurs ==== 
- 
-=== Créer un utilisateur === 
- 
-<code SQL> 
-create user "​nom_utilisateur"​@"​localhost";​ 
-</​code>​ 
- 
-=== Définir un mot de passe === 
- 
-<code SQL> 
-set password for "​nom_utilisateur"​@"​localhost"​ = password('​mot_de_passe'​);​ 
-</​code>​ 
- 
-=== Supprimer un utilisateur === 
-Si votre utilisateur n'a pas de droits : 
-<code SQL> 
-drop user "​nom_utilisateur"​@"​localhost";​ 
-</​code>​ 
-Si votre utilisateur a des droits : 
-<code SQL>​DELETE FROM mysql.user WHERE user='<​utilisateur>';</​code>​ 
- 
-=== Lister les utilisateurs === 
- 
-<code SQL> 
-select user from mysql.user; 
-</​code>​ 
- 
- 
-==== Privilèges ==== 
- 
-=== Donner tous les droits sur une base de données à un utilisateur précis === 
- 
-<code SQL> 
-grant all on nom_base.* to "​nom_utilisateur"​@"​localhost";​ 
-</​code>​ 
- 
-=== Supprimer les droits sur une base de données à un utilisateur précis === 
- 
-<code SQL> 
-revoke all privileges on nom_base.* from "​nom_utilisateur"​@"​localhost";​ 
-</​code>​ 
- 
  
 ===== Autres opérations ===== ===== Autres opérations =====
  
-Qt4 avec Mysql:+Qt4 avec MySQL:
  
 Installer la librairie pour mysql afin de l'​utiliser sous QT : Installer la librairie pour mysql afin de l'​utiliser sous QT :
  
-<​code>​sudo apt-get install libqt4-sql-mysql</​code>​+<​code>​sudo apt install libqt4-sql-mysql</​code>​
  
  
Ligne 347: Ligne 359:
  
 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>​
-  ​mysqldump -u root -p maBase > maBase_backup.sql+
  
 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>​
-  ​mysqldump -u root -p maBase ma_table > ma_table.sql+
  
 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>​
-  ​mysql -u root -p maBase < maBase_backup.sql+
  
 Puis tapez votre mot de passe. Puis tapez votre mot de passe.
Ligne 375: Ligne 384:
 <note important>​Ne fonctionne que pour les tables au format MyISAM.</​note>​ <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.+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). 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 : 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>​
-  ​echo "​CREATE DATABASE MaBaseDeDonnee"​ | mysql -u root -h localhost -p+
  
 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 : 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 
-  ​cd ~/​MonDossierContenantLeDump/​MaBaseDeDonnee +sudo cp * /​var/​lib/​mysql/​MaBaseDeDonnee</​code>​
-  sudo cp * /​var/​lib/​mysql/​MaBaseDeDonnee+
  
 Changer les droits sur les fichiers copiés : Changer les droits sur les fichiers copiés :
- +<​code>​sudo chmod -R ug+rw /​var/​lib/​mysql/​MaBaseDeDonnee/​ 
-  ​sudo chmod -R ug+rw /​var/​lib/​mysql/​MaBaseDeDonnee/​ +sudo chown -R mysql:mysql /​var/​lib/​mysql/​MaBaseDeDonnee/​</​code>​
-  sudo chown -R mysql:mysql /​var/​lib/​mysql/​MaBaseDeDonnee/​+
  
 Voilà, votre base doit correctement fonctionner à présent. Voilà, votre base doit correctement fonctionner à présent.
Ligne 397: Ligne 403:
 ==== Compacter l'​espace utilisé par ibdata1 ==== ==== Compacter l'​espace utilisé par ibdata1 ====
  
-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 : 
Ligne 420: Ligne 426:
  
 Tout d'​abord on arrête le service : Tout d'​abord on arrête le service :
-<​code>​sudo service mysql stop</​code>​+<​code>​sudo ​systemctl ​stop mysql</​code>​
 [[:​tutoriel:​comment_modifier_un_fichier|On édite le fichier]] qui contient **datadir** et on met la nouvelle valeur : [[:​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>​ <​note>​On va éditer le fichier **/​etc/​mysql/​conf.d/​my.cnf** réservé aux modifications personnelles</​note>​
-<code>+<file>
 [mysqld] [mysqld]
 # #
Ligne 429: Ligne 435:
 # #
 datadir ​        = /home/mysql datadir ​        = /home/mysql
-</code>+</file>
 On suppose que l'​ancienne valeur de **datadir** était **/​var/​lib/​mysql**. On suppose que l'​ancienne valeur de **datadir** était **/​var/​lib/​mysql**.
 On déplace les données : On déplace les données :
Ligne 468: Ligne 474:
 </​code>​ </​code>​
 [[:​tutoriel:​comment_modifier_un_fichier|Modifier le fichier]] ''/​etc/​apparmor.d/​local/​usr.sbin.mysqld''​ en ajoutant : [[:​tutoriel:​comment_modifier_un_fichier|Modifier le fichier]] ''/​etc/​apparmor.d/​local/​usr.sbin.mysqld''​ en ajoutant :
-<code>+<file>
 # Allow data dir access # Allow data dir access
   /​home/​mysql/​ r,   /​home/​mysql/​ r,
   /​home/​mysql/​** rwk,   /​home/​mysql/​** rwk,
-</code>  ​+</file>  ​
 Rechargez : Rechargez :
-<​code>​sudo ​service apparmor ​reload</​code>​+<​code>​sudo ​systemctl ​reload ​apparmor</​code>​
 Redémarrez le service : Redémarrez le service :
-<​code>​sudo ​service mysql start</​code>​+<​code>​sudo ​systemctl ​start mysql</​code>​
 Vérifiez le changement : Vérifiez le changement :
 <​code>​ <​code>​
Ligne 524: Ligne 530:
  
   10 0 * * * mysqldump nom_bdd_serveur_A | ssh utilisateur_serveur_B@ip_serveur_B mysql nom_bbd_serveur_B >/​dev/​null ​ #Mise à jour BDD   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 ​Web =====+   
 +===== Administrer MySQL via une une interface ​graphique ​=====
  
-Il est possible dadministrer un serveur MySQL via une interface ​Web avec [[:​phpMyAdmin]]. D'​autres outils sont également ​disponibles ​et 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 disponiblesvous en trouverez une liste non exhaustive sur la page [[:​mysql_outils|Outils MySQL]].
  
 ===== Liens ===== ===== Liens =====
Ligne 546: Ligne 553:
 ---- ----
  
-//​Contributeurs : [[utilisateurs:​_Enchained]],​ Hugo, Oscar Nsarhaza, [[utilisateurs:​Ner0lph]],​ [[:​utilisateurs:​david96|david96]],​ Gounlaf, [[utilisateurs:​McPeter]].//[[utillisateurs:​Rewiiz]],​ ernest-le-voyage+//​Contributeurs : [[utilisateurs:​_Enchained]],​ Hugo, Oscar Nsarhaza, [[:utilisateurs:​Ner0lph]],​ [[:​utilisateurs:​david96|david96]],​ Gounlaf, [[:utilisateurs:​McPeter]][[:utillisateurs:​Rewiiz]],​ ernest-le-voyage, [[:​utilisateurs:​krodelabestiole]]//​
  • mysql.1528615863.txt.gz
  • Dernière modification: Le 10/06/2018, 09:31
  • par L'Africain