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 : 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> GRANT ALL PRIVILEGES ON *.* TO adminmysql@localhost IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;
mysql> DELETE FROM mysql.user where User='root'; 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_ : Créer une nouvelle base de données nommée _foo_ :
~~~ ~~~{.sql}
mysql> CREATE DATABASE foo; mysql> CREATE DATABASE foo;
~~~ ~~~
Voir les bases de données créées : Voir les bases de données créées :
~~~ ~~~{.sql}
mysql> SHOW DATABASES; mysql> SHOW DATABASES;
~~~ ~~~
Utiliser la base de données _foo_ : Utiliser la base de données _foo_ :
~~~ ~~~{.sql}
mysql> USE foo mysql> USE foo
~~~ ~~~
Voir les tables créées : Voir les tables créées :
~~~ ~~~{.sql}
mysql> SHOW TABLES; mysql> SHOW TABLES;
~~~ ~~~
Créer une table nommée _bar_ avec différents champs : Créer une table nommée _bar_ avec différents champs :
~~~ ~~~{.sql}
mysql> CREATE TABLE bar (id INT not null AUTO_INCREMENT, prenom VARCHAR 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 , (50) not null , nom VARCHAR (50) not null , ne_le DATE not null ,
ville VARCHAR (90), enfants INT, PRIMARY KEY (id)); ville VARCHAR (90), enfants INT, PRIMARY KEY (id));
@ -239,68 +239,68 @@ ville VARCHAR (90), enfants INT, PRIMARY KEY (id));
Décrire une table : Décrire une table :
~~~ ~~~{.sql}
mysql> DESC bar; mysql> DESC bar;
~~~ ~~~
Ajouter un champ à une table : Ajouter un champ à une table :
~~~ ~~~{.sql}
mysql> ALTER TABLE bar ADD another VARCHAR(100) DEFAULT NULL; mysql> ALTER TABLE bar ADD another VARCHAR(100) DEFAULT NULL;
~~~ ~~~
Ajouter un champ à une table en précisant sa place : Ajouter un champ à une table en précisant sa place :
~~~ ~~~{.sql}
mysql> ALTER TABLE bar ADD another VARCHAR(100) DEFAULT NULL AFTER prenom; mysql> ALTER TABLE bar ADD another VARCHAR(100) DEFAULT NULL AFTER prenom;
~~~ ~~~
Supprimer un champ à une table : Supprimer un champ à une table :
~~~ ~~~{.sql}
mysql> ALTER TABLE bar DROP another; mysql> ALTER TABLE bar DROP another;
~~~ ~~~
Renommer un champ : Renommer un champ :
~~~ ~~~{.sql}
mysql> ALTER TABLE bar CHANGE COLUMN another anotherone TEXT; mysql> ALTER TABLE bar CHANGE COLUMN another anotherone TEXT;
~~~ ~~~
Changer le type d'un champ : Changer le type d'un champ :
~~~ ~~~{.sql}
mysql> ALTER TABLE bar CHANGE another another enum('foo',bar'); mysql> ALTER TABLE bar CHANGE another another enum('foo',bar');
~~~ ~~~
Insertion de données dans une table : Insertion de données dans une table :
~~~ ~~~{.sql}
mysql> INSERT INTO bar VALUES (1,'jp','papin','2005-06-12','Marseille',2); 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'); INSERT INTO test (id,prenom,nom,ne_le) VALUES (2,'c','waddle','2004-06-17');
~~~ ~~~
Sélectionner tous les champs d'une table : Sélectionner tous les champs d'une table :
~~~ ~~~{.sql}
mysql> SELECT * FROM bar; mysql> SELECT * FROM bar;
~~~ ~~~
Effacer des données d'une table : Effacer des données d'une table :
~~~ ~~~{.sql}
mysql> DELETE FROM bar WHERE nom='waddle'; mysql> DELETE FROM bar WHERE nom='waddle';
~~~ ~~~
Effacer TOUTES les données d'une table : Effacer TOUTES les données d'une table :
~~~ ~~~{.sql}
mysql> DELETE FROM bar; mysql> DELETE FROM bar;
~~~ ~~~
Supprimer une table : Supprimer une table :
~~~ ~~~{.sql}
mysql> DROP TABLE bar; 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` : 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.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> 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; 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 : On pourra ainsi régler finement les droits d'un utilisateur en connaissant la signification de chaque colonne :
~~~ ~~~{.sql}
mysql> desc user; mysql> desc user;
+------------------------+-----------------------------------+------+-----+---------+-------+ +------------------------+-----------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra | | 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` : 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> UPDATE user SET Show_view_priv='Y' WHERE User='debian-sys-maint';
mysql> FLUSH PRIVILEGES; mysql> FLUSH PRIVILEGES;
~~~ ~~~
…que l'on peut aussi faire via : …que l'on peut aussi faire via :
~~~ ~~~{.sql}
mysql> GRANT SHOW VIEW on *.* to `debian-sys-maint`@localhost; mysql> GRANT SHOW VIEW on *.* to `debian-sys-maint`@localhost;
~~~ ~~~
Pour créer un utilisateur sans droit particulier, par exemple pour du monitoring : Pour créer un utilisateur sans droit particulier, par exemple pour du monitoring :
~~~ ~~~{.sql}
mysql> create user nagios@localhost identified by 'PASSWORD'; mysql> create user nagios@localhost identified by 'PASSWORD';
~~~ ~~~
On peut aussi gérer des droits sur les tables : On peut aussi gérer des droits sur les tables :
~~~ ~~~{.sql}
mysql> GRANT Select,Insert,Update ON foo.bar TO 'jdoe'@localhost; mysql> GRANT Select,Insert,Update ON foo.bar TO 'jdoe'@localhost;
~~~ ~~~
Pour révoquer des droits sur une table, on utilisera `REVOKE` : Pour révoquer des droits sur une table, on utilisera `REVOKE` :
~~~ ~~~{.sql}
mysql> REVOKE ALL PRIVILEGES ON foo.bar FROM 'jdoe'@localhost; 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) ! /!\\ 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 : On le positionnera ainsi :
~~~ ~~~{.sql}
mysql> GRANT FILE ON *.* TO 'jdoe'@localhost; 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 : Pour réparer une seule table :
~~~ ~~~{.sql}
mysql> CHECK TABLE foo.bar; mysql> CHECK TABLE foo.bar;
mysql> REPAIR TABLE foo.bar; mysql> REPAIR TABLE foo.bar;
mysql> OPTIMIZE TABLE foo.bar; mysql> OPTIMIZE TABLE foo.bar;
@ -478,32 +478,32 @@ En cas d'échec (*segfault* par exemple), on peut tenter :
### routines MySQL ### routines MySQL
~~~ ~~~{.sql}
mysql> select * from INFORMATION_SCHEMA.routines; mysql> select * from INFORMATION_SCHEMA.routines;
~~~ ~~~
### Changement mot de passe utilisateur ### Changement mot de passe utilisateur
~~~ ~~~{.sql}
mysql> SET PASSWORD FOR 'jdoe'@'localhost' = PASSWORD('PASSWORD'); mysql> SET PASSWORD FOR 'jdoe'@'localhost' = PASSWORD('PASSWORD');
~~~ ~~~
Par rapport à un autre utilisateur : Par rapport à un autre utilisateur :
~~~ ~~~{.sql}
mysql> use mysql; mysql> use mysql;
mysql> UPDATE mysql.user SET Password='PASSWORD' WHERE User='jdoe' and Host='localhost'; mysql> UPDATE mysql.user SET Password='PASSWORD' WHERE User='jdoe' and Host='localhost';
~~~ ~~~
### Changer variables global d'environnement ### Changer variables global d'environnement
~~~ ~~~{.sql}
mysql> SET GLOBAL max_connect_errors=50; mysql> SET GLOBAL max_connect_errors=50;
~~~ ~~~
ou ou
~~~ ~~~{.sql}
mysql> SET @@max_connect_errors=50; mysql> SET @@max_connect_errors=50;
~~~ ~~~
@ -521,10 +521,10 @@ slow_query_log_file = /var/log/mysql/slow.log
Ou à chaud : Ou à chaud :
~~~ ~~~{.sql}
SET GLOBAL slow_query_log=ON; mysql> SET GLOBAL slow_query_log=ON;
SET GLOBAL long_query_time=5; mysql> SET GLOBAL long_query_time=5;
SET GLOBAL slow_query_log_file= "/var/log/mysql/slow.log"; mysql> SET GLOBAL slow_query_log_file= "/var/log/mysql/slow.log";
~~~ ~~~
### Log des dead lock ### Log des dead lock
@ -538,8 +538,8 @@ innodb_print_all_deadlocks = on
À chaud : À chaud :
~~~ ~~~{.sql}
SET GLOBAL innodb_print_all_deadlocks=on; 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` : 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 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` : 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> SHOW PROCESSLIST;
mysql> KILL <id_requête>; 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 : Pour surveiller le moteur InnoDB, on utilisera la commande suivante :
~~~ ~~~{.sql}
mysql> SHOW ENGINE INNODB STATUS; 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` : Pour supprimer les binlogs antérieurs à `mysql-bin.00NNNN` :
~~~ ~~~{.sql}
mysql> PURGE BINARY LOGS TO 'mysql-bin.00NNNN'; mysql> PURGE BINARY LOGS TO 'mysql-bin.00NNNN';
~~~ ~~~
ou par rapport à une date : ou par rapport à une date :
~~~ ~~~{.sql}
mysql> PURGE BINARY LOGS BEFORE "2011-12-07 00:00:00"; 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) : 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; mysql> SET sql_log_bin = 0;
~~~ ~~~