답변:
3 가지 시나리오가 있습니다.
du -sh /var/lib/mysql/database
.du -sh
. 여전히 ibdata1 파일에 일부 데이터가 저장되어 있기 때문에 근사치이므로 약간 낮은 편입니다. 이 기술은 혼합 MyISAM / InnoDB ( innodb_file_per_table
) 데이터베이스 에서도 작동 합니다.innodb_file_per_table set
INFORMATION_SCHEMA를 확인해야합니다.위의 경우에서 다음 쿼리를 실행하여 원하는 정보를 얻을 수 있습니다.
mysql> select table_schema, sum((data_length+index_length)/1024/1024) AS MB from information_schema.tables group by 1;
+--------------------+-----------------+
| table_schema | MB |
+--------------------+-----------------+
| prod | 298025.72448921 |
| information_schema | 0.00781248 |
| maatkit | 70.77330779 |
| mysql | 0.66873168 |
| test | 4752.31449127 |
+--------------------+-----------------+
5 rows in set (0.01 sec)
매우 많은 수의 테이블이있는 경우 이미 발견 한 것처럼 느릴 수 있습니다.
이 명령을 사용하여 정보를 GB 단위로 얻을 수 있습니다.
mysql> select table_schema "DB name (table_schema)",
sum((data_length+index_length)/1024/1024/1024) AS "DB size in GB" from
information_schema.tables group by table_schema;
+-------------------------------------+-----------------+
| table_schema DB name (table_schema) | DB size in GB |
+-------------------------------------+-----------------+
| prod | 29.72448921 |
| information_schema | 0.00781248 |
| miscDB | 0.77330779 |
| mysql | 0.66873168 |
| test | 47.31449127 |
+-------------------------------------+-----------------+
5 rows in set (0.01 sec)
Aaron Brown 의 답변을 GB 단위로 제공했습니다. 자세한 내용은 Aaron Brown의 답변 을 참조하십시오.
또는 여유 공간 / 재생 공간을 포함 시키려면 다음을 사용하십시오.
mysql> SELECT table_schema "database name",
sum( data_length + index_length ) / 1024 / 1024 "database size in MB",
sum( data_free )/ 1024 / 1024 "free reclaimable space in MB"
FROM information_schema.TABLES
GROUP BY table_schema;
+--------------------+---------------+------------------------------+
| DB name | DB size in GB | free/reclaimable space in GB |
+--------------------+---------------+------------------------------+
| prod | 1.26 | 0.03 |
| information_schema | 38.77 | 3.75 |
| miscDB | 0.00 | 0.00 |
| mysql | 0.00 | 0.00 |
| test | 0.00 | 0.00 |
+--------------------+---------------+------------------------------+
InnoDB, MyISAM 및 ARCHIVE 테이블에 OPTIMIZE TABLE 명령 을 사용하여 공간을 회수 할 수 있습니다 .
실제 크기의 MySQL 데이터베이스를 얻는 방법 도 참조하십시오 . 상세 사항은.
테이블 이름과 레코드 수에 대한 정보를 얻으려면 아래 쿼리를 사용할 수 있습니다.
SELECT *
FROM information_schema.TABLES ;
각각의 크기로 서버의 데이터베이스에 대한 정보를 얻기 위해 아래 쿼리를 사용할 수 있습니다.
SELECT
TABLE_SCHEMA AS `Database`,
SUM((data_length + index_length) / (1024 * 1024)) AS `Database_Size`
FROM information_schema.TABLES
GROUP BY table_schema
ORDER BY `Database_Size` DESC;
디스크 공간이 어디에서 사용되는지 확인하려면 (mysql 테이블에 있는지 여부에 관계없이) 신뢰할 수있는 "du"명령을 사용합니다. 다음은 모든 공간이 어디서 소비되는지 찾는 예입니다.
$ sudo du -cks /* | sort -rn
954881224 total
945218092 /mysql
5299904 /usr
1781376 /opt
1166488 /var
671628 /home
343332 /run
213400 /root
93476 /lib
30784 /boot
20652 /etc
15940 /bin
13708 /sbin
12388 /tmp
24 /mnt
16 /lost+found
4 /srv
4 /snap
4 /media
4 /lib64
0 /vmlinuz
0 /sys
0 /proc
0 /initrd.img
0 /dev
이 폴더가 공간의 대부분을 사용하고 있음을 알 수 있습니다. / mysql
해당 폴더에는 데이터 테이블이 있습니다. 어떤 테이블이 모든 공간을 차지하는지 확인하기 위해 "human"또는 "-h"옵션을 사용하여 이와 같이 진행할 수 있습니다. 암호 또는 사용자를 모르기 때문에 때로는 mysql에 로그인 할 수 없기 때문에 디스크 공간 관리를하고 싶습니다.
$ sudo du -chs /mysql/*
2.3M /mysql/blacklist
18M /mysql/clientservices
2.5G /mysql/data
4.0K /mysql/doubleverify
137G /mysql/ias
4.0K /mysql/IAS
2.2G /mysql/innodb
16K /mysql/lost+found
4.0K /mysql/ml_centroids
16G /mysql/moat
4.0K /mysql/test
4.0K /mysql/tmp
4.0K /mysql/var
282G /mysql/verticaAdFees
4.0K /mysql/verticaViewability
247G /mysql/Whiteops
217G /mysql/Whiteops_TLX
902G total
많은 GiG 데이터를 보유한 몇 개의 테이블이 모든 공간을 차지하고 있음을 알 수 있습니다. 이것이 도움이되기를 바랍니다.
나는 이것이 오래되었다는 것을 알고 있지만 누군가는이 관련성을 찾을 수 있습니다.
MySQL에서는 다음을 사용합니다.
SELECT concat(table_schema) 'Database Name',
concat(round(SUM(data_length/power(1024,3)),2),'G') DATA,
concat(round(SUM(index_length/power(1024,3)),2),'G') 'INDEX',
concat(round(SUM(data_free/power(1024,3)),2),'G') 'DATA FREE',
concat(round(sum(data_free)/(SUM(data_length+index_length))*100,2)) '% FRAGMENTED',
concat(round(SUM(data_length+index_length)/power(1024,3),2),'G') TOTAL
FROM information_schema.TABLES
WHERE table_schema NOT IN ('mysql','information_schema','performance_schema')
GROUP BY table_schema;
내 DB는 InnoDB이므로 추정치입니다.
이 출력을 다음과 비교합니다.
du -sch /location/of_Mysql/* | sort -hr | head -n20
희망이 당신을 도울