2008-10-08 48 views
12

我下载的使用MySQL的Web应用程序的VM映像。如何监视MySQL空间?

如何我可以监视它的空间消耗,并知道何时必须增加额外的空间?

回答

26

我有一些伟大的大疑问分享到:

运行此得到总的MySQL数据和索引的使用通过存储引擎

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; 

运行该工具来获取总MySQL的数据和索引使用情况数据库

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); 

运行该工具来获取总MySQL的数据和索引使用情况数据库和存储引擎

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; 

CAVEAT

在每个查询,你会看到(SELECT 3 pw)。 pw代表1024的Power来显示结果。

  • (SELECT 0 pw)将显示该报告以字节为
  • (SELECT 1 pw)将显示以KB为单位报告
  • (SELECT 2 pw)将显示该报告以兆字节为
  • (SELECT 3 pw)将显示该报告以GB为
  • (SELECT 4 pw)将显示TeraBytes中的报告
  • (SELECT 5 pw)将在PetaBytes中显示报告(请与我联系,如果您运行此一)

这里是一个报表查询与少格式:

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; 

相信我,我做了这些查询超过4年前和今天仍然使用它们。

UPDATE 2013-06-24 15:53 EDT

我有新的东西。我已经改变了查询,让你不必为不同的单元显示pw参数。每个单位显示都是为您计算的。

报告存储引擎

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; 

报告数据库

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; 

报告数据库/存储引擎

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; 
+0

您可能应该编辑您的问题,并在应显示为代码的每行前放置4个前导空格。 – 2010-12-18 17:34:38

+0

是否有任何特别的原因LPAD到17? – Bee 2013-06-09 10:47:03

4

如果只有MySQL是可用,使用SHOW TABLE STATUS命令,并期待在DATA_LENGTH列每个表,这是以字节为单位。

如果您在机器上可用的其他语言,在其中任何一个脚本,定期(的cron)运行时,检查磁盘的可用空间或数据库目录的大小,和更新您通过电子邮件或其他方式。建议某种特定解决方案有太多选择 - 这取决于您的情况。

0

对于MyISAM表,我通常检查/ var/lib中/ MySQL的/ mydatabasename /目录的大小。 InnoDB表使用单片文件,所以你必须使用SHOW TABLE STATUS。

0

既然你有VM,你真的不关心如何使用的空间, 我觉得最简单的方法是检查MySQL数据的大小d IR。 默认情况下它是/var/lib/mysql。 在检查数据目录大小之前,清理mysql二进制日志(如果可能)

0

你可以参考MONyog具有磁盘信息功能,它可以让你在服务器级,数据库级和表级发现磁盘空间分析

0
du -s /var/lib/mysql/* | sort -nr 

结果

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将显示为从大到小的顺序排列