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