all:bibles:langages:mysql
Table des matières
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
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
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
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
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
Sources
all/bibles/langages/mysql.txt · Dernière modification : de omeylhoc
