Outils pour utilisateurs

Outils du site


all:bibles:langages:mysql

MySQL


Accès

Identification

Accès sans mot de passe

mysql -u <user>

Accès avec mot de passe

mysql -u <user> -p

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 :

sudo mysql
Il est fortement déconseillé de modifier ce comportement.

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 :

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;
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.

Utilisateurs

Lister les utilisateurs

mysql> select user from mysql.user;

Créer un utilisateur et définir mot de passe

  • Jusqu'à MySQL 5.7
mysql> create user "nom_utilisateur"@"localhost";
mysql> set password for "nom_utilisateur"@"localhost" = password('mot_de_passe');
  • A partir de MySQL 8
mysql> create user "user"@"localhost" identified by 'password';

Supprimer utilisateur

  • Jusqu'à MySQL 5.7
mysql> drop user from "nom_utilisateur"@"localhost";
  • A partir de MySQL 8
mysql> drop user "user"@"localhost";

Droits

Lister les droits d'un utilisateur

mysql> show grants for "user"@"localhost";

Donner tous les droits sur une bdd

mysql> grant all on nom_base.* to "nom_utilisateur"@"localhost";

Supprimer les droits

mysql> revoke all privileges on nom_base.* from "nom_utilisateur"@"localhost";

Prise en compte

mysql> flush privileges;

Commandes de base

Lister les bases de données

Connexion à la base de données

connect <database_name>;

Lister les tables

Description d'un table

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

Requête

Affichage standard

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

Affichage des champs

select * from matable where id='truc' \G

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 ;

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';

extraire dans un csv

select identifier, extraParameters 
into OUTFILE '/tmp/toto.csv'
fields terminated by ','
enclosed by '"'
lines terminated by '\n'
from Table where identifier like '%truc%';

Modification d'une valeur

update <base>.<table> set param1='val1',param2='val2' where param='truc';

Commandes à partir du shell

Exécuter commande

mysql -u user -ppassword -D database -e "commande"

Affichage brut

  • -N (no header) : pas d'entête
  • -s (silent) : pas de séparateur de colonne
mysql -N -s -u user -ppassword -D database -e "commande"

Exécuter plusieurs commandes

mysql -u user -ppassword -D database << eof
commandes
eof

Exécuter script

mysql -u user -ppassword < fichier.sql
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.

Manipulation bdd

Backup/Restore

Exporter une base de données

mysqldump -u root -p maBase > maBase_backup.sql
mariadb-dump --user=<user> -p<passwd> --lock-tables --databases <DB> > fichier.sql

Importer une base de données

mysql -u root -p maBase < maBase_backup.sql

Suppression base de données

mysql> drop database <database_name>;

Sources

all/bibles/langages/mysql.txt · Dernière modification : de omeylhoc