La base de données INFORMATION_SCHEMA est constituée de tables temporaires utilisant le moteur de stockage MEMORY.
Exemple: voici la table INFORMATION_SCHEMA.TABLES dans MySQL 5.5.12 (version Windows)
mysql> show create table information_schema.tables\G
*************************** 1. row ***************************
Table: TABLES
Create Table: CREATE TEMPORARY TABLE `TABLES` (
`TABLE_CATALOG` varchar(512) NOT NULL DEFAULT '',
`TABLE_SCHEMA` varchar(64) NOT NULL DEFAULT '',
`TABLE_NAME` varchar(64) NOT NULL DEFAULT '',
`TABLE_TYPE` varchar(64) NOT NULL DEFAULT '',
`ENGINE` varchar(64) DEFAULT NULL,
`VERSION` bigint(21) unsigned DEFAULT NULL,
`ROW_FORMAT` varchar(10) DEFAULT NULL,
`TABLE_ROWS` bigint(21) unsigned DEFAULT NULL,
`AVG_ROW_LENGTH` bigint(21) unsigned DEFAULT NULL,
`DATA_LENGTH` bigint(21) unsigned DEFAULT NULL,
`MAX_DATA_LENGTH` bigint(21) unsigned DEFAULT NULL,
`INDEX_LENGTH` bigint(21) unsigned DEFAULT NULL,
`DATA_FREE` bigint(21) unsigned DEFAULT NULL,
`AUTO_INCREMENT` bigint(21) unsigned DEFAULT NULL,
`CREATE_TIME` datetime DEFAULT NULL,
`UPDATE_TIME` datetime DEFAULT NULL,
`CHECK_TIME` datetime DEFAULT NULL,
`TABLE_COLLATION` varchar(32) DEFAULT NULL,
`CHECKSUM` bigint(21) unsigned DEFAULT NULL,
`CREATE_OPTIONS` varchar(255) DEFAULT NULL,
`TABLE_COMMENT` varchar(2048) NOT NULL DEFAULT ''
) ENGINE=MEMORY DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
Il n'y a pas de dossier physique pour ces tables, pas même les fichiers .frm. Vous ne pouvez pas le masquer. Vous ne pouvez pas le laisser tomber. Vous ne pouvez pas y ajouter de tables. Vous ne pouvez pas en supprimer de tables. Alors, où sont les tables ???
Toutes les tables de la base de données INFORMATION_SCHEMA sont stockées directement en mémoire en tant que tables du moteur de stockage MEMORY. Ils sont totalement internes à MySQL, donc les mécanismes .frm sont gérés dans mysqld. Dans ma réponse, j'ai d'abord montré la disposition de la table INFORMATION_SCHEMA.TABLES. Il s'agit d'une table temporaire en mémoire. Il est manipulé à l'aide des protocoles du moteur de stockage. Ainsi, lorsque mysqld est arrêté, toutes les tables information_schema sont supprimées. Lorsque mysqld est démarré, toutes les tables information_schema sont créées en tant que tables TEMPORARY et remplies de métadonnées pour chaque table de l'instance mysql.
La base de données INFORMATION_SCHEMA a été introduite pour la première fois dans MySQL 5.0 pour vous donner accès aux métadonnées sur les tables d'autres moteurs de stockage. Par exemple, vous pouvez faire SHOW DATABASES pour obtenir une liste de bases de données. Vous pouvez également les interroger comme ceci:
SELECT schema_name database FROM information_schema.schemata;
Vous pouvez récupérer les noms de table dans une base de données de deux manières:
use mydb
show tables;
ou
SELECT table_name from information_schema.tables WHERE table_schema = 'mydb';
Depuis sa création, MySQL a étendu la base de données INFORMATION_SCHEMA pour avoir la liste des processus (à partir de MySQL 5.1). Vous pouvez réellement interroger la liste de processus à la recherche de longues requêtes qui s'exécutent encore au moins 10 minutes:
SELECT * FROM information_schema.processlist WHERE time >= 600\G
Vous pouvez utiliser le INFORMATION_SCHEMA pour faire toutes les choses élaborées: telles que:
Obtenez le nombre de toutes les tables à l'aide de moteurs de stockage spécifiques:
SELECT COUNT(1) TableCount,IFNULL(engine,'Total') StorageEngine
FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema','mysql')
AND engine IS NOT NULL
GROUP BY engine WITH ROLLUP;
Obtenez la taille de mémoire tampon de clé MyISAM recommandée en Mo
SELECT CONCAT(ROUND(KBS/POWER(1024,IF(pw<0,0,IF(pw>3,0,pw)))+0.49999),
SUBSTR(' KMG',IF(pw<0,0,IF(pw>3,0,pw))+1,1)) recommended_key_buffer_size
FROM (SELECT SUM(index_length) KBS FROM information_schema.tables WHERE
engine='MyISAM' AND table_schema NOT IN ('information_schema','mysql')) A,
(SELECT 2 pw) B;
Obtenez la taille de pool de mémoire tampon InnoDB recommandée en Go
SELECT CONCAT(ROUND(KBS/POWER(1024,IF(pw<0,0,IF(pw>3,0,pw)))+0.49999),
SUBSTR(' KMG',IF(pw<0,0,IF(pw>3,0,pw))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine='InnoDB') A,(SELECT 3 pw) B;
Obtenir l'utilisation du disque de toutes les bases de données par moteur de stockage en Mo
SELECT Statistic,DataSize "Data Size",IndexSize "Index Size",TableSize "Table Size"
FROM (SELECT IF(ISNULL(table_schema)=1,10,0) schema_score,
IF(ISNULL(engine)=1,10,0) engine_score,
IF(ISNULL(table_schema)=1,'ZZZZZZZZZZZZZZZZ',table_schema) schemaname,
IF(ISNULL(B.table_schema)+ISNULL(B.engine)=2,"Storage for All Databases",
IF(ISNULL(B.table_schema)+ISNULL(B.engine)=1,CONCAT("Storage for ",B.table_schema),
CONCAT(B.engine," Tables for ",B.table_schema))) Statistic,
CONCAT(LPAD(REPLACE(FORMAT(B.DSize/POWER(1024,pw),3),',',''),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') DataSize,
CONCAT(LPAD(REPLACE(FORMAT(B.ISize/POWER(1024,pw),3),',',''),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') IndexSize,
CONCAT(LPAD(REPLACE(FORMAT(B.TSize/POWER(1024,pw),3),',',''),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') TableSize
FROM (SELECT table_schema,engine,SUM(data_length) DSize,SUM(index_length) ISize,
SUM(data_length+index_length) TSize FROM information_schema.tables
WHERE table_schema NOT IN ('mysql','information_schema','performance_schema')
AND engine IS NOT NULL GROUP BY table_schema,engine WITH ROLLUP) B,
(SELECT 2 pw) A) AA ORDER BY schemaname,schema_score,engine_score;
Croyez-moi, il existe des utilisations encore plus merveilleuses pour INFORMATION_SCHEMA que le temps ne me permet pas de discuter plus avant.
Veuillez garder à l'esprit que INFORMATION_SCHEMA est si sensible que si mysql est en cours d'exécution et que vous effectuez les opérations suivantes:
cd /var/lib/mysql
mkdir junkfolder
puis allez dans mysql run
mysql> SHOW DATABASES;
Vous verrez le dossier indésirable comme l'une des bases de données.
Le savoir est très important pour les administrateurs de base de données et les développeurs. Chapitre 20 (développeurs) et Chapitre 31 (DBA) du livre MySQL 5.0 Certification Study Guide
sont là pour se préparer aux examens de certification développeur et DBA. Obtenez le livre, étudiez bien ces chapitres et vous pourriez faire de grandes choses avec INFORMATION_SCHEMA de MySQL.
La base de données INFORMATION_SCHEMA à partir de MySQL 5.5, comprend désormais des plugins, des variables globales (état et statique), des variables de session (état et statique), l'état du moteur de stockage, l'instrumentation des mesures de performances, la carte de déclenchement, les événements (programmables) et bien plus encore.
Désolé, cela peut ressembler à WTMI, mais je suis un grand partisan de l'utilisation de la base de données INFORMATION_SCHEMA.