Mysql
De Linuxmemo.
(Différences entre les versions)
(→Les commandes) |
(→default) |
||
(19 versions intermédiaires masquées) | |||
Ligne 1 : | Ligne 1 : | ||
[[Catégorie:Logiciel]] | [[Catégorie:Logiciel]] | ||
- | + | Voir [[Mytop]] | |
- | == Les commandes == | + | == Les commandes Client du démon "sqld" == |
* Connexion au shell | * Connexion au shell | ||
mysql -uuser -p | mysql -uuser -p | ||
- | + | * Utile dans le shell: | |
- | + | ||
- | clear (\c) Clear the current input statement. | + | ego (\G) Send command to mysql server, display result vertically. |
- | + | clear (\c) Clear the current input statement. | |
- | help commande_sql | + | '''help contents''' |
+ | '''help commande_sql''' | ||
* Verification des droits: | * Verification des droits: | ||
mysqlacces user base -U root -P | mysqlacces user base -U root -P | ||
- | |||
* Dump des bases et/ou tables: | * Dump des bases et/ou tables: | ||
Ligne 22 : | Ligne 21 : | ||
* display database, table, and column information | * display database, table, and column information | ||
mysqlshow | mysqlshow | ||
+ | |||
+ | === default === | ||
+ | |||
+ | create database mabase; | ||
+ | GRANT ALL PRIVILEGES ON mabase.* TO 'user'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION; | ||
+ | FLUSH PRIVILEGES; | ||
+ | ----- | ||
+ | create database mabase; | ||
+ | CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'password'; | ||
+ | GRANT ALL ON mabase.* TO 'jeffrey'@'localhost'; | ||
+ | FLUSH PRIVILEGES; | ||
+ | |||
+ | == Encodage == | ||
+ | |||
+ | === Obtenir des informations sur l'encodage === | ||
+ | SHOW VARIABLES LIKE 'char%'; | ||
+ | |||
+ | Pour afficher la liste de tous les jeux de caractères supportés par votre serveur MySQL: | ||
+ | SHOW CHARACTER SET | ||
+ | |||
+ | Pour afficher la liste des interclassements: | ||
+ | SHOW COLLATION | ||
+ | |||
+ | Toutes les collations ont un nom qui commence par le jeu de caractère auquel elles sont liées, et se terminent par l'une de ces trois abréviations : | ||
+ | |||
+ | * _bin comme binary : les caractères sont dans l'ordre de leurs numéros de code (ce qui donne d'abord toutes les majuscules, puis toutes les minuscules, puis les lettres accentuées, en vrac). | ||
+ | * _cs comme case sensitive : les caractères sont triés selon le ou les langages de référence, mais de manière sensible à la casse. | ||
+ | * _ci comme case insensitive : idem, mais en ignorant la casse. | ||
+ | |||
+ | === Changer l'encodage par défaut d'un serveur MySQL === | ||
+ | Modifier le fichier de configuration /etc/my.cnf en ajoutant des paramètres similaires à ceux donnés ici (utilisation de utf8 dans l'exemple). | ||
+ | [mysqld] | ||
+ | #Set the default character set | ||
+ | default-character-set=utf8 | ||
+ | #Set the default collation | ||
+ | default-collation=utf8_general_ci | ||
+ | |||
+ | Il faudra ensuite redémarrer le serveur | ||
+ | # /etc/init.d/mysqld restart | ||
+ | mysql> SHOW VARIABLES LIKE 'character_set_system'; | ||
+ | character_set_system utf8 | ||
+ | |||
+ | === Changer l'encodage pour une base de données, pour une table, et pour une colonne d'une table === | ||
+ | |||
+ | * pour une base de données: | ||
+ | CREATE DATABASE base_de_donnees [...] CHARACTER SET jeu_de_caracteres COLLATE interclassement | ||
+ | ou bien | ||
+ | ALTER DATABASE base_de_donnees CHARACTER SET jeu_de_caracteres COLLATE interclassement | ||
+ | |||
+ | * pour une table : | ||
+ | CREATE TABLE table [...] CHARACTER SET jeu_de_caracteres COLLATE interclassement | ||
+ | ou bien | ||
+ | ALTER TABLE table CHARACTER SET jeu_de_caracteres COLLATE interclassement | ||
+ | |||
+ | * pour une colonne : | ||
+ | CREATE TABLE table ( | ||
+ | colonne [...] CHARACTER SET jeu_de_caracteres COLLATE interclassement | ||
+ | [...] | ||
+ | ) | ||
+ | [...] | ||
+ | ou bien | ||
+ | ALTER TABLE table CHANGE colonne colonne type CHARACTER SET jeu_de_caracteres COLLATE interclassement | ||
+ | |||
+ | * convertir toutes les colonnes de la table à un jeu de caractères précis: | ||
+ | ALTER TABLE table CONVERT TO CHARACTER SET jeu_de_caracteres COLLATE interclassement | ||
+ | |||
+ | === Comment rétablir la cohérence de mes données === | ||
+ | |||
+ | * La documentation MySQL indique une astuce pour rétablir la situation : convertir la colonne en type binaire (BLOB, par exemple), puis la reconvertir en type texte en pécifiant le jeu de caractères voulu : | ||
+ | ALTER TABLE table CHANGE colonne colonne type_binaire; | ||
+ | ALTER TABLE table CHANGE colonne colonne type_texte CHARACTER SET jeu_de_caracteres; | ||
+ | |||
+ | === Jeux de caractères et interclassements de connexion === | ||
+ | Quatre variables MySQL : | ||
+ | *'''character_set_client''' indique au serveur l'encodage que le client utilise, c'est-à-dire dans quel jeu de caractères sont transmises les données du client vers le serveur. | ||
+ | *'''character_set_connection''' indique dans quel jeu de caractères le serveur va convertir les données avant de les traiter. Sauf rares exceptions, on indiquera la même valeur que pour character_set_client, afin d'éviter les conversions intermédiaires qui ne servent pas à grand-chose dans la plupart des cas. | ||
+ | *'''collation_connection''' indique quel interclassement sera utilisé dans la comparaison de chaînes littérales, c'est-à-dire par exemple "machin" = "chose". Cette variable n'a aucun effet sur les comparaisons impliquant des colonnes, car celles-ci ont leur propre interclassement. | ||
+ | *'''character_set_results''' indique au serveur dans quel jeu de caractères celui-ci doit transmettre les résultats. Généralement, on indiquera le même encodage que pour character_set_client. | ||
+ | |||
+ | SET variable = valeur | ||
+ | |||
+ | SET character_set_client = jeu_de_caracteres; | ||
+ | SET character_set_results = jeu_de_caracteres; | ||
+ | SET character_set_connection = jeu_de_caracteres; | ||
+ | ou en une seul fois | ||
+ | SET NAMES jeu_de_caracteres | ||
+ | |||
+ | ==Recettes== | ||
+ | *changer le mot de passe root | ||
+ | ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass'; | ||
+ | |||
+ | *un grep sur SHOW TABLES; | ||
+ | SHOW TABLES LIKE '%quelquechose%'; | ||
+ | |||
+ | *Boucle LOOP | ||
+ | |||
+ | DELIMITER $$ | ||
+ | CREATE PROCEDURE ABC() | ||
+ | BEGIN | ||
+ | DECLARE a INT Default 0 ; | ||
+ | simple_loop: LOOP | ||
+ | SET a=a+1; | ||
+ | select a; | ||
+ | IF a=5 THEN | ||
+ | LEAVE simple_loop; | ||
+ | END IF; | ||
+ | END LOOP simple_loop; | ||
+ | END $$ | ||
+ | |||
+ | *connaître la taille des bases | ||
+ | SELECT table_schema, round(sum(data_length+index_length)/1024/1024,4) AS "Size (MB)" | ||
+ | FROM information_schema.tables | ||
+ | GROUP BY table_schema; | ||
+ | |||
+ | *connaître la taille des tables d'une base | ||
+ | SELECT table_name AS "Tables", round(((data_length + index_length) / 1024 / 1024), 2) "Size in MB" | ||
+ | FROM information_schema.TABLES WHERE table_schema = "$DB_NAME"; | ||
+ | |||
+ | ==Requêtes en temps réel== | ||
+ | mysql> SHOW VARIABLES LIKE "general_log%"; | ||
+ | mysql> SET GLOBAL general_log = 'ON'; |
Version actuelle en date du 16 avril 2024 à 12:39
Voir Mytop
Sommaire |
[modifier] Les commandes Client du démon "sqld"
- Connexion au shell
mysql -uuser -p
- Utile dans le shell:
ego (\G) Send command to mysql server, display result vertically. clear (\c) Clear the current input statement. help contents help commande_sql
- Verification des droits:
mysqlacces user base -U root -P
- Dump des bases et/ou tables:
mysqldump [options] db_name [tables]
- display database, table, and column information
mysqlshow
[modifier] default
create database mabase; GRANT ALL PRIVILEGES ON mabase.* TO 'user'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION; FLUSH PRIVILEGES; ----- create database mabase; CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'password'; GRANT ALL ON mabase.* TO 'jeffrey'@'localhost'; FLUSH PRIVILEGES;
[modifier] Encodage
[modifier] Obtenir des informations sur l'encodage
SHOW VARIABLES LIKE 'char%';
Pour afficher la liste de tous les jeux de caractères supportés par votre serveur MySQL:
SHOW CHARACTER SET
Pour afficher la liste des interclassements:
SHOW COLLATION
Toutes les collations ont un nom qui commence par le jeu de caractère auquel elles sont liées, et se terminent par l'une de ces trois abréviations :
- _bin comme binary : les caractères sont dans l'ordre de leurs numéros de code (ce qui donne d'abord toutes les majuscules, puis toutes les minuscules, puis les lettres accentuées, en vrac).
- _cs comme case sensitive : les caractères sont triés selon le ou les langages de référence, mais de manière sensible à la casse.
- _ci comme case insensitive : idem, mais en ignorant la casse.
[modifier] Changer l'encodage par défaut d'un serveur MySQL
Modifier le fichier de configuration /etc/my.cnf en ajoutant des paramètres similaires à ceux donnés ici (utilisation de utf8 dans l'exemple).
[mysqld] #Set the default character set default-character-set=utf8 #Set the default collation default-collation=utf8_general_ci
Il faudra ensuite redémarrer le serveur
# /etc/init.d/mysqld restart mysql> SHOW VARIABLES LIKE 'character_set_system'; character_set_system utf8
[modifier] Changer l'encodage pour une base de données, pour une table, et pour une colonne d'une table
- pour une base de données:
CREATE DATABASE base_de_donnees [...] CHARACTER SET jeu_de_caracteres COLLATE interclassement ou bien ALTER DATABASE base_de_donnees CHARACTER SET jeu_de_caracteres COLLATE interclassement
- pour une table :
CREATE TABLE table [...] CHARACTER SET jeu_de_caracteres COLLATE interclassement ou bien ALTER TABLE table CHARACTER SET jeu_de_caracteres COLLATE interclassement
- pour une colonne :
CREATE TABLE table ( colonne [...] CHARACTER SET jeu_de_caracteres COLLATE interclassement [...] ) [...] ou bien ALTER TABLE table CHANGE colonne colonne type CHARACTER SET jeu_de_caracteres COLLATE interclassement
- convertir toutes les colonnes de la table à un jeu de caractères précis:
ALTER TABLE table CONVERT TO CHARACTER SET jeu_de_caracteres COLLATE interclassement
[modifier] Comment rétablir la cohérence de mes données
- La documentation MySQL indique une astuce pour rétablir la situation : convertir la colonne en type binaire (BLOB, par exemple), puis la reconvertir en type texte en pécifiant le jeu de caractères voulu :
ALTER TABLE table CHANGE colonne colonne type_binaire; ALTER TABLE table CHANGE colonne colonne type_texte CHARACTER SET jeu_de_caracteres;
[modifier] Jeux de caractères et interclassements de connexion
Quatre variables MySQL :
- character_set_client indique au serveur l'encodage que le client utilise, c'est-à-dire dans quel jeu de caractères sont transmises les données du client vers le serveur.
- character_set_connection indique dans quel jeu de caractères le serveur va convertir les données avant de les traiter. Sauf rares exceptions, on indiquera la même valeur que pour character_set_client, afin d'éviter les conversions intermédiaires qui ne servent pas à grand-chose dans la plupart des cas.
- collation_connection indique quel interclassement sera utilisé dans la comparaison de chaînes littérales, c'est-à-dire par exemple "machin" = "chose". Cette variable n'a aucun effet sur les comparaisons impliquant des colonnes, car celles-ci ont leur propre interclassement.
- character_set_results indique au serveur dans quel jeu de caractères celui-ci doit transmettre les résultats. Généralement, on indiquera le même encodage que pour character_set_client.
SET variable = valeur
SET character_set_client = jeu_de_caracteres; SET character_set_results = jeu_de_caracteres; SET character_set_connection = jeu_de_caracteres; ou en une seul fois SET NAMES jeu_de_caracteres
[modifier] Recettes
- changer le mot de passe root
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
- un grep sur SHOW TABLES;
SHOW TABLES LIKE '%quelquechose%';
- Boucle LOOP
DELIMITER $$ CREATE PROCEDURE ABC() BEGIN DECLARE a INT Default 0 ; simple_loop: LOOP SET a=a+1; select a; IF a=5 THEN LEAVE simple_loop; END IF; END LOOP simple_loop; END $$
- connaître la taille des bases
SELECT table_schema, round(sum(data_length+index_length)/1024/1024,4) AS "Size (MB)" FROM information_schema.tables GROUP BY table_schema;
- connaître la taille des tables d'une base
SELECT table_name AS "Tables", round(((data_length + index_length) / 1024 / 1024), 2) "Size in MB" FROM information_schema.TABLES WHERE table_schema = "$DB_NAME";
[modifier] Requêtes en temps réel
mysql> SHOW VARIABLES LIKE "general_log%"; mysql> SET GLOBAL general_log = 'ON';