informatique:databases:mysql:requetes_administration
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédente | |||
informatique:databases:mysql:requetes_administration [2024/11/21 18:37] – supprimée - modification externe (Date inconnue) 127.0.0.1 | informatique:databases:mysql:requetes_administration [2024/11/21 18:37] (Version actuelle) – ↷ Page déplacée de informatique:mysql:requetes_administration à informatique:databases:mysql:requetes_administration alexis | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Requêtes d' | ||
+ | ===== Affichage des erreurs ===== | ||
+ | <WRAP prewrap> | ||
+ | <code sql> | ||
+ | SHOW ERRORS | ||
+ | </ | ||
+ | </ | ||
+ | Plus d' | ||
+ | |||
+ | ===== Affichage des alertes ===== | ||
+ | <WRAP prewrap> | ||
+ | <code sql> | ||
+ | SHOW WARNINGS | ||
+ | </ | ||
+ | </ | ||
+ | Plus d' | ||
+ | |||
+ | ===== Affichage de la description d'une table ===== | ||
+ | <WRAP prewrap> | ||
+ | <code sql> | ||
+ | DESC < | ||
+ | </ | ||
+ | </ | ||
+ | Plus d' | ||
+ | |||
+ | ===== Purge des caches ===== | ||
+ | <WRAP prewrap> | ||
+ | <code sql> | ||
+ | /* Ferme les tables ouvertes, force la fermeture des tables utilisées, purge le tampon de requêtes */ | ||
+ | FLUSH TABLES | ||
+ | |||
+ | /* Purge le cache des hôtes lorsqu' | ||
+ | FLUSH HOSTS | ||
+ | </ | ||
+ | </ | ||
+ | Plus d' | ||
+ | |||
+ | ===== Changement de mot de passe ===== | ||
+ | <WRAP prewrap> | ||
+ | <code sql> | ||
+ | SET PASSWORD = PASSWORD('< | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== Changer les droits d'un utilisateur ===== | ||
+ | <WRAP prewrap> | ||
+ | <code sql> | ||
+ | /* Pour donner les droits à tous les hôtes, il faut utiliser % */ | ||
+ | GRANT ALL PRIVILEGES ON < | ||
+ | |||
+ | FLUSH PRIVILEGES; | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== Récupérer la liste des index d'une base de données ===== | ||
+ | <WRAP prewrap> | ||
+ | <code sql> | ||
+ | SELECT DISTINCT s.INDEX_SCHEMA | ||
+ | , s.INDEX_NAME | ||
+ | , s.TABLE_NAME | ||
+ | FROM INFORMATION_SCHEMA.STATISTICS s | ||
+ | LEFT OUTER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS t ON t.TABLE_SCHEMA = s.TABLE_SCHEMA AND t.TABLE_NAME = s.TABLE_NAME | ||
+ | AND s.INDEX_NAME = t.CONSTRAINT_NAME | ||
+ | WHERE t.CONSTRAINT_NAME IS NULL | ||
+ | AND s.TABLE_SCHEMA = '< | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== Gérer les processus en cours ===== | ||
+ | <WRAP prewrap> | ||
+ | <code sql> | ||
+ | -- Affiche la liste des processus en cours | ||
+ | show processlist; | ||
+ | |||
+ | -- Arrête un processus en le sélectionnant par son id | ||
+ | kill <id>; | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== Comparer le schéma de deux tables ===== | ||
+ | <WRAP prewrap> | ||
+ | <code sql> | ||
+ | SELECT COLUMN_NAME | ||
+ | , ORDINAL_POSITION | ||
+ | , DATA_TYPE | ||
+ | , COLUMN_TYPE | ||
+ | FROM information_schema.`COLUMNS` | ||
+ | WHERE TABLE_SCHEMA = DATABASE() | ||
+ | AND TABLE_NAME IN ('< | ||
+ | GROUP BY COLUMN_NAME | ||
+ | , ORDINAL_POSITION | ||
+ | , DATA_TYPE | ||
+ | , COLUMN_TYPE | ||
+ | HAVING COUNT(1)=1 | ||
+ | </ | ||
+ | </ | ||
+ | La requête précédente est un peu violente car elle valide que les champs sont à la même position. | ||
+ | En voici une qui est moins restrictive car elle ne fait pas cette vérification : | ||
+ | <WRAP prewrap> | ||
+ | <code sql> | ||
+ | SELECT COLUMN_NAME | ||
+ | , DATA_TYPE | ||
+ | , COLUMN_TYPE | ||
+ | FROM information_schema.`COLUMNS` | ||
+ | WHERE TABLE_SCHEMA = DATABASE() | ||
+ | AND TABLE_NAME IN ('< | ||
+ | GROUP BY COLUMN_NAME | ||
+ | , DATA_TYPE | ||
+ | , COLUMN_TYPE | ||
+ | HAVING COUNT(1)=1 | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== Récupérer la liste des tables avec une colonne manquante ===== | ||
+ | Dans certaines tables, on travaille avec les couples de colonnes '' | ||
+ | <WRAP prewrap> | ||
+ | <code sql> | ||
+ | SELECT @tableSchema := ' | ||
+ | , @columnName := ' | ||
+ | |||
+ | -- Première écriture de la requête (naïve). Le temps d' | ||
+ | SELECT t.TABLE_NAME | ||
+ | FROM information_schema.TABLES AS t | ||
+ | WHERE t.TABLE_SCHEMA = @tableSchema | ||
+ | AND EXISTS ( | ||
+ | SELECT 1 | ||
+ | FROM information_schema.`COLUMNS` AS c | ||
+ | WHERE c.TABLE_SCHEMA = t.TABLE_SCHEMA | ||
+ | AND c.TABLE_NAME = t.TABLE_NAME | ||
+ | AND c.COLUMN_NAME = CONCAT(@columnName, | ||
+ | ) | ||
+ | AND NOT EXISTS ( | ||
+ | SELECT 1 | ||
+ | FROM information_schema.`COLUMNS` AS c | ||
+ | WHERE c.TABLE_SCHEMA = t.TABLE_SCHEMA | ||
+ | AND c.TABLE_NAME = t.TABLE_NAME | ||
+ | AND c.COLUMN_NAME = CONCAT(@columnName, | ||
+ | ); | ||
+ | |||
+ | -- Seconde écriture de la requête. Le temps d' | ||
+ | SELECT c.TABLE_NAME | ||
+ | FROM information_schema.`COLUMNS` AS c | ||
+ | WHERE c.TABLE_SCHEMA = @tableSchema | ||
+ | AND c.COLUMN_NAME LIKE CONCAT(@columnName, | ||
+ | GROUP BY c.TABLE_NAME | ||
+ | HAVING COUNT(1) = 1; | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== Calculer la taille des données ===== | ||
+ | <WRAP prewrap> | ||
+ | <code sql> | ||
+ | -- Afficher la taille globale de l' | ||
+ | SELECT TABLE_SCHEMA AS "Nom de la base de données" | ||
+ | , CONCAT(ROUND(SUM(DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 0), " MB") AS " | ||
+ | FROM information_schema.TABLES | ||
+ | GROUP BY TABLE_SCHEMA | ||
+ | |||
+ | -- Afficher le détail de la taille des tables d'une base de données | ||
+ | SELECT TABLE_NAME AS "Nom de la table" | ||
+ | , TABLE_ROWS AS " | ||
+ | , CONCAT(ROUND(DATA_LENGTH / 1024 / 1024, 2), " MB") AS " | ||
+ | , CONCAT(ROUND(INDEX_LENGTH / 1024 / 1024, 2), " MB") AS " | ||
+ | , CONCAT(ROUND(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024), 2), " MB") AS " | ||
+ | FROM information_schema.TABLES | ||
+ | WHERE TABLE_SCHEMA = " | ||
+ | ORDER BY (DATA_LENGTH + INDEX_LENGTH) | ||
+ | , TABLE_NAME | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== Logguer les requêtes ===== | ||
+ | <WRAP prewrap> | ||
+ | <code sql> | ||
+ | -- Définition de la destination (mysql.general_log) | ||
+ | SET GLOBAL log_output = ' | ||
+ | -- Activation du logging | ||
+ | SET GLOBAL general_log = ' | ||
+ | -- Désactivation du logging | ||
+ | SET GLOBAL general_log = ' | ||
+ | -- Purge de la table (uniquement quand le logging est arrêté) | ||
+ | TRUNCATE table mysql.general_log | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | <WRAP info> | ||
+ | Pour logguer dans un fichier : | ||
+ | <WRAP prewrap> | ||
+ | <code sql> | ||
+ | -- Définition de la destination | ||
+ | SET GLOBAL log_output = ' | ||
+ | -- Définition du fichier | ||
+ | SET GLOBAL general_log_file = "</ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||