He descargado una imagen de máquina virtual de una aplicación web que usa MySQL.¿Cómo controlar el espacio de MySQL?
¿Cómo puedo controlar su consumo de espacio y saber cuándo hay que añadir espacio adicional?
He descargado una imagen de máquina virtual de una aplicación web que usa MySQL.¿Cómo controlar el espacio de MySQL?
¿Cómo puedo controlar su consumo de espacio y saber cuándo hay que añadir espacio adicional?
Tengo grandes grandes consultas para compartir:
Ejecutar esto para conseguir el uso total de datos MySQL y el Índice Por Motor de almacenamiento
SELECT IFNULL(B.engine,'Total') "Storage Engine",
CONCAT(LPAD(REPLACE(FORMAT(B.DSize/POWER(1024,pw),3),',',''),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') "Data Size", CONCAT(LPAD(REPLACE(
FORMAT(B.ISize/POWER(1024,pw),3),',',''),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') "Index Size", CONCAT(LPAD(REPLACE(
FORMAT(B.TSize/POWER(1024,pw),3),',',''),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') "Table Size" FROM
(SELECT 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 engine WITH ROLLUP) B,
(SELECT 3 pw) A ORDER BY TSize;
Ejecutar esto para conseguir el uso total de datos MySQL y el Índice Por Base de datos
SELECT DBName,CONCAT(LPAD(FORMAT(SDSize/POWER(1024,pw),3),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') "Data Size",CONCAT(LPAD(
FORMAT(SXSize/POWER(1024,pw),3),17,' '),' ',SUBSTR(' KMGTP',pw+1,1),'B') "Index Size",
CONCAT(LPAD(FORMAT(STSize/POWER(1024,pw),3),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') "Total Size" FROM
(SELECT IFNULL(DB,'All Databases') DBName,SUM(DSize) SDSize,SUM(XSize) SXSize,
SUM(TSize) STSize FROM (SELECT table_schema DB,data_length DSize,
index_length XSize,data_length+index_length TSize FROM information_schema.tables
WHERE table_schema NOT IN ('mysql','information_schema','performance_schema')) AAA
GROUP BY DB WITH ROLLUP) AA,(SELECT 3 pw) BB ORDER BY (SDSize+SXSize);
Ejecutar esto para conseguir el uso total de datos MySQL y el índice por la base de datos y motor de almacenamiento
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 3 pw) A) AA ORDER BY schemaname,schema_score,engine_score;
Claves clínicas
En cada consulta, verá (SELECT 3 pw)
. El pw significa Power Of 1024 para mostrar los resultados.
(SELECT 0 pw)
mostrará el informe en Bytes(SELECT 1 pw)
mostrará el informe en kilobytes(SELECT 2 pw)
mostrará el informe en megabytes(SELECT 3 pw)
mostrará el informe en gigabytes(SELECT 4 pw)
mostrará el informe en terabytes(SELECT 5 pw)
mostrará el informe en PetaBytes (por favor ponerse en contacto conmigo si ejecuta éste)Aquí es una consulta de informe con un poco menos de formato:
SELECT IFNULL(db,'Total') "Database",
datsum/power(1024,pw) "Data Size",
ndxsum/power(1024,pw) "Index Size",
totsum/power(1024,pw) "Total"
FROM (SELECT db,SUM(dat) datsum,SUM(ndx) ndxsum,SUM(dat+ndx) totsum
FROM (SELECT table_schema db,data_length dat,index_length ndx
FROM information_schema.tables WHERE engine IS NOT NULL
AND table_schema NOT IN ('information_schema','mysql')) AA
GROUP BY db WITH ROLLUP) A,(SELECT 1 pw) B;
Confía en mí, hice estas consultas hace más de 4 años y todavía los utilizan hoy en día.
tengo algo nuevo. He cambiado las consultas de modo que usted no tiene que establecer el parámetro para diferentes pw
unidad muestra. La pantalla de cada unidad se calcula para usted.
Informe Por Motor de almacenamiento
SELECT
IFNULL(ENGINE,'Total') "Storage Engine",
LPAD(CONCAT(FORMAT(DAT/POWER(1024,pw1),2),' ',
SUBSTR(units,pw1*2+1,2)),17,' ') "Data Size",
LPAD(CONCAT(FORMAT(NDX/POWER(1024,pw2),2),' ',
SUBSTR(units,pw2*2+1,2)),17,' ') "Index Size",
LPAD(CONCAT(FORMAT(TBL/POWER(1024,pw3),2),' ',
SUBSTR(units,pw3*2+1,2)),17,' ') "Total Size"
FROM
(
SELECT ENGINE,DAT,NDX,TBL,
IF(px>4,4,px) pw1,IF(py>4,4,py) pw2,IF(pz>4,4,pz) pw3
FROM
(SELECT *,
FLOOR(LOG(IF(DAT=0,1,DAT))/LOG(1024)) px,
FLOOR(LOG(IF(NDX=0,1,NDX))/LOG(1024)) py,
FLOOR(LOG(IF(TBL=0,1,TBL))/LOG(1024)) pz
FROM
(SELECT
ENGINE,
SUM(data_length) DAT,
SUM(index_length) NDX,
SUM(data_length+index_length) TBL
FROM
(
SELECT engine,data_length,index_length FROM
information_schema.tables WHERE table_schema NOT IN
('information_schema','performance_schema','mysql')
AND ENGINE IS NOT NULL
) AAA GROUP BY ENGINE WITH ROLLUP
) AAA) AA) A,(SELECT ' BKBMBGBTB' units) B;
Informe de base de datos Por
SELECT
IFNULL(DB,'Total') "Database",
LPAD(CONCAT(FORMAT(DAT/POWER(1024,pw1),2),' ',
SUBSTR(units,pw1*2+1,2)),17,' ') "Data Size",
LPAD(CONCAT(FORMAT(NDX/POWER(1024,pw2),2),' ',
SUBSTR(units,pw2*2+1,2)),17,' ') "Index Size",
LPAD(CONCAT(FORMAT(TBL/POWER(1024,pw3),2),' ',
SUBSTR(units,pw3*2+1,2)),17,' ') "Total Size"
FROM
(
SELECT DB,DAT,NDX,TBL,
IF(px>4,4,px) pw1,IF(py>4,4,py) pw2,IF(pz>4,4,pz) pw3
FROM
(SELECT *,
FLOOR(LOG(IF(DAT=0,1,DAT))/LOG(1024)) px,
FLOOR(LOG(IF(NDX=0,1,NDX))/LOG(1024)) py,
FLOOR(LOG(IF(TBL=0,1,TBL))/LOG(1024)) pz
FROM
(SELECT
DB,
SUM(data_length) DAT,
SUM(index_length) NDX,
SUM(data_length+index_length) TBL
FROM
(
SELECT table_schema DB,data_length,index_length FROM
information_schema.tables WHERE table_schema NOT IN
('information_schema','performance_schema','mysql')
AND ENGINE IS NOT NULL
) AAA GROUP BY DB WITH ROLLUP
) AAA) AA) A,(SELECT ' BKBMBGBTB' units) B;
Informe Por Base de Datos/motor de almacenamiento
SELECT
IF(ISNULL(DB)+ISNULL(ENGINE)=2,'Database Total',
CONCAT(DB,' ',IFNULL(ENGINE,'Total'))) "Reported Statistic",
LPAD(CONCAT(FORMAT(DAT/POWER(1024,pw1),2),' ',
SUBSTR(units,pw1*2+1,2)),17,' ') "Data Size",
LPAD(CONCAT(FORMAT(NDX/POWER(1024,pw2),2),' ',
SUBSTR(units,pw2*2+1,2)),17,' ') "Index Size",
LPAD(CONCAT(FORMAT(TBL/POWER(1024,pw3),2),' ',
SUBSTR(units,pw3*2+1,2)),17,' ') "Total Size"
FROM
(
SELECT DB,ENGINE,DAT,NDX,TBL,
IF(px>4,4,px) pw1,IF(py>4,4,py) pw2,IF(pz>4,4,pz) pw3
FROM
(SELECT *,
FLOOR(LOG(IF(DAT=0,1,DAT))/LOG(1024)) px,
FLOOR(LOG(IF(NDX=0,1,NDX))/LOG(1024)) py,
FLOOR(LOG(IF(TBL=0,1,TBL))/LOG(1024)) pz
FROM
(SELECT
DB,ENGINE,
SUM(data_length) DAT,
SUM(index_length) NDX,
SUM(data_length+index_length) TBL
FROM
(
SELECT table_schema DB,ENGINE,data_length,index_length FROM
information_schema.tables WHERE table_schema NOT IN
('information_schema','performance_schema','mysql')
AND ENGINE IS NOT NULL
) AAA GROUP BY DB,ENGINE WITH ROLLUP
) AAA) AA) A,(SELECT ' BKBMBGBTB' units) B;
Si solamente MySQL está disponible, utilice el comando SHOW TABLE STATUS, y un vistazo a la columna de la Data_length para cada mesa, que es en bytes.
Si tiene otros idiomas disponibles en la máquina, un script en cualquiera de ellos que se ejecuta regularmente (cron), verifica el espacio libre o el tamaño del directorio de la base de datos, y lo actualiza por correo electrónico o de otra manera. Hay demasiadas opciones para sugerir una solución en particular, depende de su situación.
Para tablas MyISAM, por lo general comprobar el tamaño de la var/lib/mysql/MyDatabaseName/directorio /. Las tablas InnoDB usan archivos monolíticos, por lo que debe usar SHOW TABLE STATUS.
Puesto que usted tiene VM y no me importa cómo se usa el espacio, Creo que la forma más simple es verificar el tamaño de los datos de MySQL d ir Por defecto es /var/lib/mysql
. También sería bueno limpiar los registros binarios de mysql (si es posible) antes de verificar el tamaño del directorio de datos.
Se puede hacer referencia MONyog que tiene función en Información del disco que le permite encontrar a cabo análisis de espacio en disco a nivel de servidor, el nivel de base de datos y al nivel de la tabla
Hola, como esta es su primera respuesta, primero compruebe si su respuesta ya existe, como [lo hace] (http://stackoverflow.com/a/23289446/2844473). En ese caso, es mejor __uprimir__ esa respuesta en lugar de decir exactamente lo mismo. – MarijnS95
du -s /var/lib/mysql/* | sort -nr
Resultado
34128 /var/lib/mysql/db_name1
33720 /var/lib/mysql/db_name2
29744 /var/lib/mysql/db_name3
26624 /var/lib/mysql/db_name4
16516 /var/lib/mysql/db_name5
THSI se mostrará como orden descendente en kb
Probablemente debería editar su pregunta y poner 4 espacios delante de cada línea que debería aparecer como código. –
¿hay alguna razón particular para LPAD a 17? – Bee
@Bhathiya Utilizo 17 debido a la salida de la función 'FORMAT'. El billón número uno tiene 13 dígitos. Al ejecutar 'FORMAT (1000000000000,0)' aparece '1,000,000,000,000'. Observe que se agregan 4 comas. Por lo tanto, utilizo 17 para acomodar columnas de visualización pequeñas al lado de columnas de visualización más grandes, dando al informe un aspecto uniforme. Puede experimentar con valores de ancho distintos de 17 ya que no afecta el cálculo del espacio en disco. – RolandoMySQLDBA