Die Datenbank INFORMATION_SCHEMA besteht aus temporären Tabellen, die die Speicher-Engine MEMORY verwenden.
Beispiel: Hier ist die Tabelle INFORMATION_SCHEMA.TABLES in MySQL 5.5.12 (Windows-Version)
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)
Für diese Tabellen gibt es keinen physischen Ordner, nicht einmal FRM-Dateien. Sie können es nicht mysqldumpen. Du kannst es nicht fallen lassen. Sie können keine Tabellen hinzufügen. Sie können keine Tabellen daraus löschen. Also, wo sind die Tische ???
Alle Tabellen in der Datenbank INFORMATION_SCHEMA werden direkt als MEMORY-Speicher-Engine-Tabellen gespeichert. Sie sind vollständig in MySQL integriert, daher werden die .frm-Mechanismen in mysqld behandelt. In meiner Antwort habe ich zuerst das Tabellenlayout von INFORMATION_SCHEMA.TABLES gezeigt. Es ist eine temporäre Tabelle im Speicher. Es wird mithilfe von Storage Engine-Protokollen manipuliert. Wenn mysqld heruntergefahren wird, werden daher alle information_schema-Tabellen gelöscht. Wenn mysqld gestartet wird, werden alle Tabellen information_schema als TEMPORARY-Tabellen erstellt und mit Metadaten für jede Tabelle in der mysql-Instanz neu gefüllt.
Die Datenbank INFORMATION_SCHEMA wurde erstmals in MySQL 5.0 eingeführt, um Ihnen den Zugriff auf Metadaten zu Tabellen anderer Speicher-Engines zu ermöglichen. Sie können beispielsweise SHOW DATABASES ausführen , um eine Liste der Datenbanken abzurufen . Sie können sie auch folgendermaßen abfragen:
SELECT schema_name database FROM information_schema.schemata;
Sie können Tabellennamen in einer Datenbank auf zwei Arten abrufen:
use mydb
show tables;
oder
SELECT table_name from information_schema.tables WHERE table_schema = 'mydb';
Von Anfang an hat MySQL die Datenbank INFORMATION_SCHEMA um die Prozessliste erweitert (ab MySQL 5.1). Sie können die Prozessliste tatsächlich abfragen, um nach lang laufenden Abfragen zu suchen, die noch mindestens 10 Minuten ausgeführt werden:
SELECT * FROM information_schema.processlist WHERE time >= 600\G
Sie können das INFORMATION_SCHEMA verwenden, um alle durchdachten Dinge zu erledigen:
Abrufen der Anzahl aller Tabellen mithilfe bestimmter Speicher-Engines:
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;
Holen Sie sich die empfohlene MyISAM-Schlüsselpuffergröße in MB
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;
Ermitteln Sie die empfohlene InnoDB-Pufferpoolgröße in GB
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;
Datenträgernutzung aller Datenbanken durch Storage Engine in MB
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;
Glauben Sie mir, es gibt noch wundervollere Verwendungen für INFORMATION_SCHEMA, die ich nicht weiter besprechen kann.
Beachten Sie, dass INFORMATION_SCHEMA so vertraulich ist, dass mysql ausgeführt wird und Sie Folgendes tun:
cd /var/lib/mysql
mkdir junkfolder
und dann in MySQL ausführen
mysql> SHOW DATABASES;
Sie sehen Junk-Ordner als eine der Datenbanken.
Für DBAs und Entwickler ist es sehr wichtig, dies zu wissen. Kapitel 20 (Entwickler) und Kapitel 31 (DBAs) des Buches MySQL 5.0 Certification Study Guide
sind da, um sich auf die Entwickler- und DBA-Zertifizierungsprüfungen vorzubereiten. Holen Sie sich das Buch, studieren Sie diese Kapitel gut und Sie könnten mit MySQLs INFORMATION_SCHEMA großartige Dinge tun.
Die INFORMATION_SCHEMA-Datenbank ab MySQL 5.5 enthält jetzt Plugins, globale Variablen (Status und statisch), Sitzungsvariablen (Status und statisch), Status der Speicher-Engine, Leistungsmessinstrumente, Trigger-Map, Ereignisse (programmierbar) und vieles mehr.
Tut mir leid, dass dies wie WTMI scheint, aber ich bin ein großer Befürworter der Verwendung der Datenbank INFORMATION_SCHEMA.