La base de datos INFORMATION_SCHEMA está compuesta de tablas temporales que utilizan el motor de almacenamiento MEMORY.
Ejemplo: Aquí está la tabla INFORMATION_SCHEMA.TABLES en MySQL 5.5.12 (versión de 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)
No hay una carpeta física para esas tablas, ni siquiera archivos .frm. No puedes mysqldump. No puedes dejarlo caer. No puede agregarle tablas. No puedes soltar tablas de él. Entonces, ¿dónde están las mesas?
Todas las tablas en la base de datos INFORMATION_SCHEMA se almacenan directamente en la memoria como tablas del motor de almacenamiento MEMORY. Son totalmente internos a MySQL, por lo que los mecanismos .frm se manejan en mysqld. En mi respuesta, primero mostré el diseño de la tabla de INFORMATION_SCHEMA.TABLES. Es una tabla temporal en la memoria. Se manipula utilizando protocolos de motor de almacenamiento. Por lo tanto, cuando mysqld se cierra, todas las tablas de información_esquema se descartan. Cuando se inicia mysqld, todas las tablas de información_esquema se crean como tablas TEMPORALES y se vuelven a llenar con metadatos para cada tabla en la instancia de mysql.
La base de datos INFORMATION_SCHEMA se introdujo por primera vez en MySQL 5.0 para darle acceso a metadatos sobre tablas de otros motores de almacenamiento. Por ejemplo, podría hacer SHOW DATABASES para obtener una lista de bases de datos. También puede consultarlos de esta manera:
SELECT schema_name database FROM information_schema.schemata;
Puede recuperar nombres de tablas en una base de datos de dos maneras:
use mydb
show tables;
o
SELECT table_name from information_schema.tables WHERE table_schema = 'mydb';
Desde su inicio, MySQL ha expandido la base de datos INFORMATION_SCHEMA para tener la lista de procesos (a partir de MySQL 5.1). En realidad, puede consultar la lista de procesos buscando consultas de larga duración que todavía se ejecutan al menos 10 minutos:
SELECT * FROM information_schema.processlist WHERE time >= 600\G
Puede usar INFORMATION_SCHEMA para hacer todas las cosas elaboradas: como:
Obtenga recuentos de todas las tablas utilizando motores de almacenamiento específicos:
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;
Obtenga el tamaño recomendado de MyISAM Key Buffer en 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;
Obtenga el tamaño recomendado de InnoDB Buffer Pool en 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;
Obtenga el uso de disco de todas las bases de datos por motor de almacenamiento en 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;
Créame, todavía hay usos más maravillosos para INFORMATION_SCHEMA que el tiempo no me permite discutir más.
Tenga en cuenta que INFORMATION_SCHEMA es tan sensible que si mysql se está ejecutando y usted hace lo siguiente:
cd /var/lib/mysql
mkdir junkfolder
y luego entra en mysql run
mysql> SHOW DATABASES;
Verá la carpeta basura como una de las bases de datos.
Saberlo es muy vital para los DBA y los desarrolladores. Capítulo 20 (desarrolladores) y Capítulo 31 (DBA) del libro MySQL 5.0 Certification Study Guide
están allí para prepararse para los exámenes de certificación de desarrollador y DBA. Obtenga el libro, estudie bien esos capítulos y podría hacer grandes cosas con la información_SCHEMA de MySQL.
La base de datos INFORMATION_SCHEMA a partir de MySQL 5.5, ahora presenta complementos, variables globales (estado y estática), variables de sesión (estado y estática), estado del motor de almacenamiento, instrumentación de métricas de rendimiento, mapa de disparo, eventos (programables) y mucho más.
Lo siento, esto puede parecer WTMI, pero soy un gran defensor del uso de la base de datos INFORMATION_SCHEMA.