This commit is contained in:
pdiogoantunes 2017-01-31 09:59:12 +01:00
parent 708a329545
commit a126acbe06

View file

@ -50,7 +50,7 @@ mysql>
Il faut ensuite mettre un mot de passe pour le superutilisateur de MySQL, on conseille d'utiliser l'identifiant *adminmysql* car *root* peut prêter à confusion :
~~~
~~~{ .sql }
mysql> GRANT ALL PRIVILEGES ON *.* TO adminmysql@localhost IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;
mysql> DELETE FROM mysql.user where User='root';
~~~
@ -207,31 +207,31 @@ Le répertoire `/var/log/mysql/` contient les *binlogs* (trace de toutes les req
Créer une nouvelle base de données nommée _foo_ :
~~~
~~~{.sql}
mysql> CREATE DATABASE foo;
~~~
Voir les bases de données créées :
~~~
~~~{.sql}
mysql> SHOW DATABASES;
~~~
Utiliser la base de données _foo_ :
~~~
~~~{.sql}
mysql> USE foo
~~~
Voir les tables créées :
~~~
~~~{.sql}
mysql> SHOW TABLES;
~~~
Créer une table nommée _bar_ avec différents champs :
~~~
~~~{.sql}
mysql> CREATE TABLE bar (id INT not null AUTO_INCREMENT, prenom VARCHAR
(50) not null , nom VARCHAR (50) not null , ne_le DATE not null ,
ville VARCHAR (90), enfants INT, PRIMARY KEY (id));
@ -239,68 +239,68 @@ ville VARCHAR (90), enfants INT, PRIMARY KEY (id));
Décrire une table :
~~~
~~~{.sql}
mysql> DESC bar;
~~~
Ajouter un champ à une table :
~~~
~~~{.sql}
mysql> ALTER TABLE bar ADD another VARCHAR(100) DEFAULT NULL;
~~~
Ajouter un champ à une table en précisant sa place :
~~~
~~~{.sql}
mysql> ALTER TABLE bar ADD another VARCHAR(100) DEFAULT NULL AFTER prenom;
~~~
Supprimer un champ à une table :
~~~
~~~{.sql}
mysql> ALTER TABLE bar DROP another;
~~~
Renommer un champ :
~~~
~~~{.sql}
mysql> ALTER TABLE bar CHANGE COLUMN another anotherone TEXT;
~~~
Changer le type d'un champ :
~~~
~~~{.sql}
mysql> ALTER TABLE bar CHANGE another another enum('foo',bar');
~~~
Insertion de données dans une table :
~~~
~~~{.sql}
mysql> INSERT INTO bar VALUES (1,'jp','papin','2005-06-12','Marseille',2);
INSERT INTO test (id,prenom,nom,ne_le) VALUES (2,'c','waddle','2004-06-17');
~~~
Sélectionner tous les champs d'une table :
~~~
~~~{.sql}
mysql> SELECT * FROM bar;
~~~
Effacer des données d'une table :
~~~
~~~{.sql}
mysql> DELETE FROM bar WHERE nom='waddle';
~~~
Effacer TOUTES les données d'une table :
~~~
~~~{.sql}
mysql> DELETE FROM bar;
~~~
Supprimer une table :
~~~
~~~{.sql}
mysql> DROP TABLE bar;
~~~
@ -330,7 +330,7 @@ mysql> GRANT ALL PRIVILEGES ON foo.* TO 'jdoe'@localhost IDENTIFIED BY 'PASSWORD
Cette opération revient à insérer des lignes suivante dans les tables `mysql.user` et `mysql.db` :
~~~
~~~{.sql}
mysql> INSERT INTO mysql.user VALUES ('localhost','jdoe',password('PASSWORD'),'N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','','','','',0,0,0,0,'',NULL);
mysql> INSERT INTO mysql.db VALUES ('localhost','foo','jdoe','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
mysql> FLUSH PRIVILEGES;
@ -344,7 +344,7 @@ Pour migrer de Debian 6 à 7 :
On pourra ainsi régler finement les droits d'un utilisateur en connaissant la signification de chaque colonne :
~~~
~~~{.sql}
mysql> desc user;
+------------------------+-----------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
@ -397,39 +397,39 @@ mysql> desc user;
Par exemple, pour permettre à un utilisateur (ici *debian-sys-maint*) de faire des `SHOW VIEW` :
~~~
~~~{.sql}
mysql> UPDATE user SET Show_view_priv='Y' WHERE User='debian-sys-maint';
mysql> FLUSH PRIVILEGES;
~~~
…que l'on peut aussi faire via :
~~~
~~~{.sql}
mysql> GRANT SHOW VIEW on *.* to `debian-sys-maint`@localhost;
~~~
Pour créer un utilisateur sans droit particulier, par exemple pour du monitoring :
~~~
~~~{.sql}
mysql> create user nagios@localhost identified by 'PASSWORD';
~~~
On peut aussi gérer des droits sur les tables :
~~~
~~~{.sql}
mysql> GRANT Select,Insert,Update ON foo.bar TO 'jdoe'@localhost;
~~~
Pour révoquer des droits sur une table, on utilisera `REVOKE` :
~~~
~~~{.sql}
mysql> REVOKE ALL PRIVILEGES ON foo.bar FROM 'jdoe'@localhost;
~~~
/!\\ Un droit est particulier : pour utiliser LOAD DATA INFILE ou SELECT INTO OUTFILE, il faut avoir le droit `FILE` … mais il est global (et dangereux) !
On le positionnera ainsi :
~~~
~~~{.sql}
mysql> GRANT FILE ON *.* TO 'jdoe'@localhost;
~~~
@ -457,7 +457,7 @@ On pourra également ajouter l'option `--optimize` pour ajouter une optimisation
Pour réparer une seule table :
~~~
~~~{.sql}
mysql> CHECK TABLE foo.bar;
mysql> REPAIR TABLE foo.bar;
mysql> OPTIMIZE TABLE foo.bar;
@ -478,32 +478,32 @@ En cas d'échec (*segfault* par exemple), on peut tenter :
### routines MySQL
~~~
~~~{.sql}
mysql> select * from INFORMATION_SCHEMA.routines;
~~~
### Changement mot de passe utilisateur
~~~
~~~{.sql}
mysql> SET PASSWORD FOR 'jdoe'@'localhost' = PASSWORD('PASSWORD');
~~~
Par rapport à un autre utilisateur :
~~~
~~~{.sql}
mysql> use mysql;
mysql> UPDATE mysql.user SET Password='PASSWORD' WHERE User='jdoe' and Host='localhost';
~~~
### Changer variables global d'environnement
~~~
~~~{.sql}
mysql> SET GLOBAL max_connect_errors=50;
~~~
ou
~~~
~~~{.sql}
mysql> SET @@max_connect_errors=50;
~~~
@ -521,10 +521,10 @@ slow_query_log_file = /var/log/mysql/slow.log
Ou à chaud :
~~~
SET GLOBAL slow_query_log=ON;
SET GLOBAL long_query_time=5;
SET GLOBAL slow_query_log_file= "/var/log/mysql/slow.log";
~~~{.sql}
mysql> SET GLOBAL slow_query_log=ON;
mysql> SET GLOBAL long_query_time=5;
mysql> SET GLOBAL slow_query_log_file= "/var/log/mysql/slow.log";
~~~
### Log des dead lock
@ -538,8 +538,8 @@ innodb_print_all_deadlocks = on
À chaud :
~~~
SET GLOBAL innodb_print_all_deadlocks=on;
~~~{.sql}
mysql> SET GLOBAL innodb_print_all_deadlocks=on;
~~~
@ -668,7 +668,7 @@ $ mysqldump --hex-blob -T /tmp --fields-enclosed-by=\" --fields-terminated-by=,
On peut également restaurer un dump _foo.sql_ (ou tout script au format SQL) de façon interactive via la commande `source` :
~~~
~~~{.sql}
mysql> source foo.sql
~~~
@ -707,7 +707,7 @@ Reste plus qu'à lancer la commande `mytop -s1` (pour un rafraichissement toutes
L'outil *mytop* se sert principalement de la requête `SHOW PROCESSLIST` que l'on pourra bien sûr lancer manuellement. Tout comme `KILL` :
~~~
~~~{.sql}
mysql> SHOW PROCESSLIST;
mysql> KILL <id_requête>;
~~~
@ -726,7 +726,7 @@ Puis exécuter le résultat avec la commande *mysql*, exemple :
Pour surveiller le moteur InnoDB, on utilisera la commande suivante :
~~~
~~~{.sql}
mysql> SHOW ENGINE INNODB STATUS;
~~~
@ -843,13 +843,13 @@ Le mode **mixed** est un bon compromis pour de la réplication : il permet de vo
Pour supprimer les binlogs antérieurs à `mysql-bin.00NNNN` :
~~~
~~~{.sql}
mysql> PURGE BINARY LOGS TO 'mysql-bin.00NNNN';
~~~
ou par rapport à une date :
~~~
~~~{.sql}
mysql> PURGE BINARY LOGS BEFORE "2011-12-07 00:00:00";
~~~
@ -894,7 +894,7 @@ On pourra ainsi injecter le contenu d'un binlog dans une base… tout simplement
On peut effectuer des requêtes SQL qui ne seront pas écrites dans le binlog. Pour cela on positionne la variable _sql_log_bin_ à 0 et les requêtes interactives suivantes ne seront pas prises en compte dans le binlog (bien sûr, si l'on quitte le CLI MySQL, cela ne sera plus valable) :
~~~
~~~{.sql}
mysql> SET sql_log_bin = 0;
~~~