MySQL

De Mon Wiki
Aller à la navigation Aller à la recherche

Commandes MySQL en shell

Se connecter à MySQL :

mysql -u NOM_USER -p

Se connecter à MySQL et à une base directement :

mysql -u NOM_USER -p NOM_BASE

Exécuter une commande MySQL et sortir aussitôt du prompt MySQL :

mysql -u NOM_USER -p NOM_BASE -e "COMMANDE MYSQL;"

Commandes MySQL

Se connecter à une base :

use NOM_BASE

Liste les bases de MySQL :

show databases;

Liste les tables d'une base :

show tables from NOM_BASE;

ou en étant connecté à la base au préalable :

show tables;

Liste les colonnes d'une table :

show columns from NOM_TABLE;

Sélectionner chaque champ de manière unique :

select distinct NOM_COLONNE from NOM_TABLE;

Sélectionner chaque champ de manière unique en triant le résultat :

select distinct NOM_COLONNE from NOM_TABLE group by NOM_COLONNE;

Créer base de données :

create database NOM_BASE;

Gestion utilisateurs

Donner tous les droits a un utilisateur inexistant sur la base de données créer :

grant all privileges on NOM_BASE.* to 'utilisateur'@localhost identified by 'mot_de_passe';

Mise à jour mot de passe d'un utilisateur :

update mysql.user set Password = password('NOUVEAU_MOT_DE_PASSE') where user = 'NOM_UTILISATEUR';
flush privileges;

Afficher les utilisateurs de la base de donnée :

select user, host from mysql.user;

Afficher les droits d'un utilisateur :

show grants for 'NOM_UTILISATEUR'@'HOST';

Supprimer utilisateur anonymous (Il est nécessaire d'avoir mis à jour le mot de passe root au préalable) :

delete from mysql.user where user = '';
flush privileges;

Connexion automatique

Il est possible de se connecter en automatique au serveur MySQL sans avoir a ressaisir l'utilisateur et le mot de passe en créant un fichier .my.cnf dans la ${HOME}

Créer le fichier ${HOME}/.my.cnf et y ajouter les informations suivantes :

[client]
user=nom_utilisateur_connexion
password=mot_de_passe_utilisateur
socket=/chemin/vers/socket

Le chemin vers le socket de connexion est en général : /var/run/mysqld/mysqld.sock

Si c'est pour se connecter à un serveur MySQL distant, il faudra utiliser l'option port plutôt que le socket, la syntaxe sera donc la suivante :

[client]
user=nom_utilisateur_connexion
password=mot_de_passe_utilisateur
port=3306

Modifier les droits sur le fichier pour qu'il ne soit lisible que par vous par sécurité :

chown 600 ${HOME}/.my.cnf

Log binaire

Lecture d'une log binaire généré par MySQL :

mysqlbinlog /chemin/vers/log/binaire/mysql-bin.0000

Securisation MySQL apres installation Debian

# Definition du mot de passe
read -s _PASSWORD
echo -e "grant all privileges on *.* to 'root'@'localhost' identified by '${_PASSWORD}' with grant option;\nupdate mysql.user set password=password('${_PASSWORD}') where user='root';\ndelete from mysql.user where user='';delete from mysql.user where user='root' and host = 'unix_socket';\ndelete from mysql.db where db='test' or db='test\\_%';\nflush privileges;\n" | mysql

Memoire necessaire pour le fonctionnement MySQL avec configuration en place

SELECT ( @@key_buffer_size + @@query_cache_size + @@tmp_table_size + @@innodb_buffer_pool_size + @@innodb_additional_mem_pool_size + @@innodb_log_buffer_size + @@max_connections * (@@read_buffer_size + @@read_rnd_buffer_size + @@sort_buffer_size + @@join_buffer_size + @@binlog_cache_size + @@thread_stack)) / 1073741824 AS MAX_MEMORY_GB;