Outils pour utilisateurs

Outils du site


all:bibles:langages:mysql

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édentesRévision précédente
Prochaine révision
Révision précédente
all:bibles:langages:mysql [2024/09/30 16:31] – [Description d'un table] omeylhocall:bibles:langages:mysql [2026/01/19 10:57] (Version actuelle) – [Sources] omeylhoc
Ligne 1: Ligne 1:
 +====== MySQL ======
 +
 +----
 +
 +===== Accès =====
 +
 +==== Identification ====
 +
 +=== Accès sans mot de passe ===
 +
 +<code bash>
 +mysql -u <user>
 +</code>
 +
 +=== Accès avec mot de passe ===
 +
 +<code bash>
 +mysql -u <user> -p
 +</code>
 +
 +=== Accès root ===
 +
 +À partir d'Ubuntu 18.04 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). Il lui suffit donc de taper :
 +
 +<code bash>
 +sudo mysql
 +</code>
 +
 +<note warning>Il est fortement déconseillé de modifier ce comportement.</note>
 +
 +En cas de besoin d'un accès global depuis un même compte, la solution conseillée est de créer un nouvel utilisateur et de lui attribuer tous les privilèges : 
 +
 +<code sql>
 +CREATE USER 'nom_utilisateur_choisi'@'localhost' IDENTIFIED BY 'mot_de_passe_solide';
 +GRANT ALL ON *.* TO 'nom_utilisateur_choisi'@'localhost' WITH GRANT OPTION;
 +FLUSH PRIVILEGES;
 +</code>
 +
 +<note important>Cette solution peut être utile sur un serveur de développement mais elle rend plus dangereuse une attaque par force brute sur la page de connexion de phpMyAdmin. En production il est indispensable de protéger l'accès à phpMyAdmin grâce à l'outil fail2ban, ou/et à des mesures de restriction d'accès par IP. Veiller à utiliser un couple identifiant/mot de passe différent pour chacun de vos sites ou applications web.</note>
 +
 +==== Utilisateurs ====
 +
 +=== Lister les utilisateurs ===
 +
 +<code sql>
 +mysql> select user from mysql.user;
 +</code>
 +
 +=== Créer un utilisateur et définir mot de passe ===
 +
 +  * Jusqu'à MySQL 5.7
 +
 +<code sql>
 +mysql> create user "nom_utilisateur"@"localhost";
 +mysql> set password for "nom_utilisateur"@"localhost" = password('mot_de_passe');
 +</code>
 +
 +  * A partir de MySQL 8
 +
 +<code sql>
 +mysql> create user "user"@"localhost" identified by 'password';
 +</code>
 +
 +=== Supprimer utilisateur ===
 +
 +  * Jusqu'à MySQL 5.7
 +
 +<code sql>
 +mysql> drop user from "nom_utilisateur"@"localhost";
 +</code>
 +
 +  * A partir de MySQL 8
 +
 +<code sql>
 +mysql> drop user "user"@"localhost";
 +</code>
 +
 +==== Droits ====
 +
 +=== Lister les droits d'un utilisateur ===
 +
 +<code sql>
 +mysql> show grants for "user"@"localhost";
 +</code>
 +
 +
 +=== Donner tous les droits sur une bdd ===
 +
 +<code sql>
 +mysql> grant all on nom_base.* to "nom_utilisateur"@"localhost";
 +</code>
 +
 +=== Supprimer les droits ===
 +
 +<code sql>
 +mysql> revoke all privileges on nom_base.* from "nom_utilisateur"@"localhost";
 +</code>
 +
 +=== Prise en compte ===
 +
 +<code sql>
 +mysql> flush privileges;
 +</code>
 +
 +----
 +
 +===== Commandes de base =====
 +
 +==== Lister les bases de données ====
 +
 +<code sql>
 +show databases;
 +</code>
 +
 +==== Connexion à la base de données ====
 +
 +<code sql>
 +connect <database_name>;
 +</code>
 +
 +==== Lister les tables ====
 +
 +<code sql>
 +show tables;
 +</code>
 +
 +==== Description d'un table ====
 +
 +<code sql>
 +describe <table_name>;
 +show columns from <table_name>;
 +show create table <table_name>;  # Affiche les champs, les clé ainsi que les contraintes de la table
 +</code>
 +
 +==== Requête ====
 +
 +=== Affichage standard ===
 +
 +<code sql>
 +select * from matable where id='truc';
 +select * from matable where champ like '%truc%';   
 +select * from matable limit 10;                    # limite l'affichage au 10 premiers enregistrements trouvés
 +</code>
 +
 +=== Affichage des champs ===
 +
 +<code sql>
 +select * from matable where id='truc' \G
 +</code>
 +
 +=== Champ JSON ===
 +
 +Sélection depuis une table des éléments ayant un champ JSON toto non NULL dans le paramètre extraParameters, et dont l'identifiant ne commence par truc, et dont la date de modification est postérieur ou égale au 1er janvier 2020 ;
 +
 +<code sql>
 +select identifier, JSON_EXTRACT(extraParameters, '$.toto'),LastModificationDate from Table where JSON_EXTRACT(extraParameters, '$.toto') is not NULL and identifier not like 'truc%' and LastModificationDate>='2000-01-01';
 +</code>
 +
 +=== extraire dans un csv ===
 +
 +<code sql>
 +select identifier, extraParameters 
 +into OUTFILE '/tmp/toto.csv'
 +fields terminated by ','
 +enclosed by '"'
 +lines terminated by '\n'
 +from Table where identifier like '%truc%';
 +</code>
 +
 +=== Modification d'une valeur ===
 +
 +<code sql>
 +update <base>.<table> set param1='val1',param2='val2' where param='truc';
 +</code>
 +
 +----
 +
 +===== Commandes à partir du shell =====
 +
 +==== Exécuter commande ====
 +
 +<code bash>
 +mysql -u user -ppassword -D database -e "commande"
 +</code>
 +
 +=== Affichage brut ===
 +
 +  * -N (no header) : pas d'entête
 +  * -s (silent) : pas de séparateur de colonne
 +
 +<code bash>
 +mysql -N -s -u user -ppassword -D database -e "commande"
 +</code>
 + 
 +==== Exécuter plusieurs commandes ====
 +
 +<code bash>
 +mysql -u user -ppassword -D database << eof
 +commandes
 +eof
 +</code>
 +
 +==== Exécuter script ====
 +
 +<code bash>
 +mysql -u user -ppassword < fichier.sql
 +</code>
 +
 +<note warning>Attention en utilisant l'option -p en ligne de commande, le mot de passe mysql se retrouve dans l'historique, fichier ~/.bash_history de l'utilisateur.</note>
 +
 +----
 +
 +===== Manipulation bdd=====
 +
 +==== Backup/Restore ====
 +
 +=== Exporter une base de données ===
 +
 +<code bash>
 +mysqldump -u root -p maBase > maBase_backup.sql
 +</code>
 +
 +<code bash>
 +mariadb-dump --user=<user> -p<passwd> --lock-tables --databases <DB> > fichier.sql
 +</code>
 +
 +=== Importer une base de données ===
 +
 +<code bash>
 +mysql -u root -p maBase < maBase_backup.sql
 +</code>
 +
 +==== Suppression base de données ====
 +
 +<code sql>
 +mysql> drop database <database_name>;
 +</code>
 +
 +----
 +
 +===== Sources =====
 +
 +  * [[https://doc.ubuntu-fr.org/mysql]]
 +