| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
| mysql [Le 02/11/2020, 09:15] – mise à jour arverne73 | mysql [Le 25/03/2026, 17:43] (Version actuelle) – [MySQL] détails CGI | double licence | détails krodelabestiole |
|---|
| {{tag>Xenial Bionic Focal sgbd mysql serveur réseau}} | {{tag>Noble Focal sgbd serveur réseau}} |
| |
| | {{ https://www.mysql.com/common/logos/logo-mysql-170x115.png?120|Logo de MySQL}} |
| ====== MySQL ====== | ====== MySQL ====== |
| |
| **[[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… | **[[https://www.mysql.com/|MySQL]]** est un [[wpfr>SGBD|système de gestion de bases de données relationnelles]] (SGBDR) très populaire, gratuit, performant, //multithread//, sous double licence [[wpfr>logiciel libre|libre]] ou [[wpfr>logiciel propriétaire|propriétaire]] (il est libre quand distribué avec un logiciel libre, ce qui est le cas d'Ubuntu, mais pas forcément d'autres applications qui l'utilisent). |
| |
| <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> | <note important> |
| | **MySQL** appartient à [[wpfr>Oracle_(entreprise)|Oracle]]. |
| |
| 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. | Il existe un fork //[[wpfr>open source]]// et complètement [[wpfr>logiciel libre|libre]], plus communautaire, 100% compatible **MySQL** et a priori plus performant, créé et maintenu par le fondateur de MySQL, Michael Wideniusm. Il s'agit de **[[:MariaDB]]**, qui est également disponible sur Ubuntu, et choisi par défaut sur [[:distributions#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 ''[[man>mysql]]'', d'une application, ou pour le [[:Web]] d'un script [[wpfr>Common_Gateway_Interface|CGI]] : [[:nodejs|JavaScript]], [[:Python]], [[:Ruby]], [[:installation_non_standard_de_logiciel#Perl]], etc. ou [[:PHP]]. Il faudra dans ce dernier 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 ===== | ===== 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</code> | L'installation de ce paquet doit se faire de préférence en utilisant le [[: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]], MySQL 8.0 sur [[:Focal|Focal 20.04]]. | Sinon [[:deb#installer_un_paquet_deb|installer le paquet]] ''[[apt>mysql-server]]''. |
| |
| ===== Utilisation ===== | ==== Modules ==== |
| |
| ==== Démarrage ==== | Certains [[:paquet|paquets]] fournissent des fonctionnalité spécifiques à certains usages (à moins de développer une application, ce sont généralement des dépendances qui s'installent automatiquement avec [[:APT]]). |
| |
| Pour démarrer le serveur MySQL, tapez la [[:commande_shell|commande]] suivante dans un [[:terminal]]: | Par exemple, pour la bibliothèque [[pu>libqt5sql5-mysql|Qt5]] pour MySQL, [[:deb#installer_un_paquet_deb|installer le paquet]] ''[[apt>libqt5sql5-mysql]]''. |
| |
| sudo systemctl start mysql | Pour lister les modules disponibles, avec ''[[:apt-cli|apt]]'' : |
| | apt list ~n-mysql$ |
| |
| | ===== Utilisation ===== |
| |
| ==== Redémarrage ==== | ==== Démarrer ==== |
| |
| Pour redémarrer le serveur MySQL, tapez la [[:commande_shell|commande]] suivante dans un [[:terminal]]: | Pour démarrer le serveur MySQL, entrer la [[:commande_shell|commande]] suivante dans un [[:terminal]] : |
| | <code bash>sudo systemctl start mysql</code> |
| |
| sudo systemctl restart mysql | ==== Redémarrer ==== |
| |
| ==== Arrêt ==== | Pour redémarrer le serveur MySQL, entrer la [[:commande_shell|commande]] suivante dans un [[:terminal]] : |
| | <code>sudo systemctl restart mysql</code> |
| |
| Pour arrêter le serveur MySQL, tapez la [[:commande_shell|commande]] suivante dans un [[:terminal]]: | ==== Recharger la configuration ==== |
| sudo systemctl stop mysql | |
| |
| ==== Rechargement de la configuration ==== | Pour que MySQL prenne en compte les modifications de sa configuration, entrer [[:commande_shell|commande]] suivante dans un [[:terminal]]: |
| | <code>sudo systemctl reload mysql</code> |
| Pour que MySQL prenne en compte les modifications de sa configuration, [[:commande_shell|commande]] suivante dans un [[:terminal]]: | |
| 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, entrer la [[: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>mysql --version</code> | <code>mysql --version</code> |
| 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 [[:utilisateur|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 ''[[man>mysql]]'' ou le script [[:PHP]]) avec l'[[:utilisateur]] correspondant. |
| |
| Pour choisir l'un ou l'autre des comportement, on renseigne le champs //plugin// de la table //user// : | 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. | * ''mysql_native_password'' ou vide pour utiliser l'authentification native de MySQL. |
| * //auth_socket// pour se connecter avec un utilisateur Ubuntu. | * ''auth_socket'' pour se connecter avec un utilisateur Ubuntu. |
| |
| 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//.)) | 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. Ceci 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]]**\\ | La console MySQL permet d'entrer des requêtes [[wpfr>Structured_Query_Language|SQL]] manuellement. |
| 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]]**\\ | L'utilisateur //root// de MySQL est authentifié par son compte [[:utilisateur]] [[:système]] (plugin //auth_socket//) et non plus par un mot de passe (plugin //mysql_native_password//). On peut donc simplement utiliser la commande ''[[:sudo]]''. |
| À 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**\\ | Ainsi, pour accéder à la console MySQL, on entre donc la commande suivante dans un [[:terminal]] : |
| Vous arriverez alors sur un prompt du type : | sudo mysql |
| |
| | Le //prompt// de cette console est le suivant : |
| mysql> | mysql> |
| |
| Vous pouvez alors taper vos requêtes MySQL. N'oubliez pas le point-virgule à la fin de la requête. Si vous l'oubliez le prompt passe à la ligne. | On peut dès lors entrer des requêtes [[wpfr>Structured_Query_Language|SQL]]. Ne pas oublier le point-virgule '';'' à la fin de chaque requête, sans quoi le prompt passe à la ligne, attendant la suite de la requête : |
| <code> | <code> |
| mysql> select * from | mysql> SELECT * FROM |
| -> | -> |
| </code> | </code> |
| | Ici la requête n'est pas terminée, ni exécutée. Ceci permet d'entrer une requête sur plusieurs lignes avant de la clôturer avec '';''. |
| Ce passage vous indique que la requête n'est pas terminée. Vous pouvez entrer vos requêtes de cette façon sur plusieurs lignes et enfin la clôturer avec le « **;** ». | |
| |
| ==== 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 ligne de commande: | Soit directement lorsqu'on lance le client ''[[man>mysql]]'' avec l'option ''-D'' : |
| <code>mysql -u root -D votre_base -p</code> | <code>mysql -u root -D votre_base -p</code> |
| <code>sudo mysql -D votre_base</code> | <code>sudo mysql -D votre_base</code> |
| | |
| | Soit une fois connecté, à l'aide de l'instruction SQL ''[[https://dev.mysql.com/doc/refman/8.4/en/use.html|USE]]'' dans la console MySQL : |
| Soit une fois connecté à MySQL en tapant la [[:commande_shell|commande]] suivante dans un [[:terminal]]: | <code mysql>USE votre_base;</code> |
| | |
| mysql> use votre_base | |
| |
| ==== 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]]. | |
| </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> | |
| |
| | 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]]. |
| |
| ==== Utilisateurs ==== | ==== Utilisateurs ==== |
| </code> | </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) : | |
| <code mysql> | <code mysql> |
| CREATE USER 'nom_utilisateur'@'localhost' IDENTIFIED WITH auth_socket; | CREATE USER 'nom_utilisateur'@'localhost' IDENTIFIED WITH auth_socket; |
| GRANT ALL ON nom_base.* TO 'nom_utilisateur'@'localhost'; | GRANT ALL ON nom_base.* TO 'nom_utilisateur'@'localhost'; |
| </code> | </code> |
| Puis rechargez les privilèges. | Puis [[#recharger les privilèges]]. |
| |
| === Donner tous les droits à un super-administrateur === | === Donner tous les droits à un super-administrateur === |
| GRANT ALL ON *.* TO 'nom_utilisateur'@'localhost'; | GRANT ALL ON *.* TO 'nom_utilisateur'@'localhost'; |
| </code> | </code> |
| Puis rechargez les privilèges. | Puis [[#recharger les privilèges]]. |
| |
| === Supprimer les droits sur une base de données à un utilisateur précis === | === Supprimer les droits sur une base de données à un utilisateur précis === |
| REVOKE ALL ON nom_base.* FROM 'nom_utilisateur'@'localhost'; | REVOKE ALL ON nom_base.* FROM 'nom_utilisateur'@'localhost'; |
| </code> | </code> |
| Puis rechargez les privilèges. | Puis [[#recharger les privilèges]]. |
| |
| === Recharger les privilèges === | === Recharger les privilèges === |
| ==== Connexions entrantes ==== | ==== 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é. | 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** : | 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 - mysqld.cnf> |
| <file mysql> | bind-address = XXX.XXX.XXX.XXX |
| bind-address = x.x.x.x | |
| </file> | </file> |
| | où ''XXX.XXX.XXX.XXX'' est l'[[:reseau#lexique|adresse IP]] de l'interface sur laquelle MySQL doit écouter. Ceci permet de n'écouter que sur une IP privée si vous avez plusieurs interfaces réseaux, et de bloquer votre adresse publique (et donc Internet). |
| |
| 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. | Pour forcer MySQL à écouter sur toutes les interfaces réseau, il suffit de commenter la ligne ''bind-address = 127.0.0.1'' (ou écrire ''bind-address = 0.0.0.0''), mais c'est très dangereux si le serveur est exposé sur Internet. |
| |
| Pour forcer mysql à écouter sur toutes les interfaces réseau, il suffit de commenter la ligne "bind-address = 127.0.0.1" (ou écrire bind-address = 0.0.0.0) Cela peut être dangereux si votre serveur est connecté à Internet directement. | [[#Redémarrer]] le service après avoir modifié le fichier de configuration. |
| |
| Redémarrez le service après avoir modifié le fichier de configuration : | <note important>L'authentification de chaque utilisateur MySQL dépend de sa localisation.</note> |
| <code>sudo systemctl restart mysql</code> | |
| |
| | Par exemple avec ''%%'nom_utilisateur'@'localhost'%%'', l'utilisateur ne peut se connecter que depuis la machine locale. |
| |
| Pour créer un utilisateur mysql qui est autorisé à se connecter à distance : | Pour [[#créer un utilisateur]] MySQL qui soit autorisé à se connecter à distance, remplacer ''%%@'localhost'%%'' par ''@'//XXX//.//XXX//.//XXX//.//XXX//%%'%%'', dans les requêtes le concernant, où ''//XXX//.//XXX//.//XXX//.//XXX//'' est l'[[:reseau#lexique|adresse IP]] d'où l'utilisateur doit pouvoir se connecter. |
| |
| se connecter sur mysql en root : | Pour autoriser l'accès venant de n'importe quel emplacement (ce qui est très peu [[:sécurité|sécurisé]] !), remplacer l'adresse IP par le caractère ''%'' : '''nom_utilisateur'@'%%%'%%''. |
| | |
| <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> | |
| | |
| 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 : | |
| <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 ==== |
| |
| 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 [[:permissions administrateur]] 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> |
| [client] | [client] |
| </file> | </file> |
| |
| puis de relancer le serveur mysql : | puis de relancer le serveur MySQL : |
| <code>sudo systemctl restart mysql</code> | <code>sudo systemctl restart mysql</code> |
| |
| 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 connecté grâce à la requête suivante : |
| <code mysql> | <code mysql> |
| SHOW VARIABLES LIKE 'char%'; | SHOW VARIABLES LIKE 'char%'; |
| </code> | |
| |
| Résultat : | |
| |
| <code mysql> | |
| mysqld> SHOW VARIABLES LIKE 'char%'; | |
| +--------------------------+----------------------------+ | |
| | Variable_name | Value | | |
| +--------------------------+----------------------------+ | |
| | character_set_client | utf8 | | |
| | character_set_connection | utf8 | | |
| | character_set_database | utf8 | | |
| | character_set_filesystem | binary | | |
| | character_set_results | utf8 | | |
| | character_set_server | utf8 | | |
| | character_set_system | utf8 | | |
| | character_sets_dir | /usr/share/mysqld/charsets/ | | |
| +--------------------------+----------------------------+ | |
| 8 rows in set (0.00 sec) | |
| </code> | </code> |
| |
| ===== Quelques requêtes SQL ===== | ===== Quelques requêtes SQL ===== |
| |
| Toutes ces commandes sont à entrer dans le prompt de MySQL une fois connecté au serveur. (Voir comment [[#lancer_la_console_mysql|lancer la console MySQL]] ci dessus.) | Toutes ces commandes sont à entrer dans le prompt de MySQL une fois connecté au serveur (voir comment [[#lancer la console MySQL]] ci-dessus). |
| |
| ==== Base de donnée ==== | ==== Base de donnée ==== |
| </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: | |
| |
| Installer la librairie pour mysql afin de l'utiliser sous QT : | |
| |
| <code>sudo apt install libqt4-sql-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> | <note>Ajoutez ''-p'' à ces commandes si vous utilisez un mot de passe, et ''-u'' pour un autre utilisateur que //root//.</note> |
| |
| Pour **exporter** la base de donnée « maBase », utilisez la commande : | Pour **exporter** la base de donnée ''maBase'', utilisez la commande ''[[man>mysqldump]]'' : |
| <code>sudo mysqldump 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>sudo mysqldump 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>sudo mysql maBase < maBase_backup.sql</code> | <code>sudo mysql maBase < maBase_backup.sql</code> |
| |
| <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 la page de documentation de [[automysqlbackup|AutoMySQLBackup]] | Si vous souhaitez mettre en place une solution de [[:sauvegarde]] automatique de bases de données à intervalle régulier, rendez-vous sur la page [[: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 la [[https://dev.mysql.com/doc/refman/5.0/fr/sql-syntax.html|documentation officielle]] de MySQL. |
| | |
| |
| ==== 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 informations et bases de données dans le répertoire ''/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. |
| |
| |
| |
| |
| | |
| ===== Administrer MySQL via une une interface graphique ===== | ===== Administrer MySQL via une une interface graphique ===== |
| |
| 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 |
| |
| 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 === |
| Si vous y trouvez des messages du type : | Si vous y trouvez des messages du type : |
| <code>AVC apparmor="DENIED"</code> | <code>AVC apparmor="DENIED"</code> |
| lié à votre serveur MySQL, c'est que [[:AppArmor]] bloque l'execution de //mysqld//. | lié à votre serveur MySQL, c'est que [[:AppArmor]] bloque l'exécution de //mysqld//. |
| |
| Vous pouvez corriger le problème à l'aide des commandes suivantes : | Vous pouvez corriger le problème à l'aide des commandes suivantes : |
| * [[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 |
| |
| ---- | ---- |
| | //[[:Contributeurs]] : [[utilisateurs:_Enchained]], Hugo, Oscar Nsarhaza, [[:utilisateurs:Ner0lph]], [[:utilisateurs:david96|david96]], Gounlaf, [[:utilisateurs:McPeter]], [[:utillisateurs:Rewiiz]], ernest-le-voyage, [[:utilisateurs:krodelabestiole]].// |
| //Contributeurs : [[utilisateurs:_Enchained]], Hugo, Oscar Nsarhaza, [[:utilisateurs:Ner0lph]], [[:utilisateurs:david96|david96]], Gounlaf, [[:utilisateurs:McPeter]], [[:utillisateurs:Rewiiz]], ernest-le-voyage, [[:utilisateurs:krodelabestiole]]// | |