這裡介紹如何使用 MySQL 的指令查詢資料庫在硬碟上的使用空間大小。

MySQL 與 MariaDB 資料庫是一個在 Linux 系統上被廣泛運用的資料庫,許多的網站也都會搭配 MySQL/MariaDB 來架設(例如 WordPress 等),這裡我們將介紹可用來查詢資料庫與資料表大小的 MySQL 指令。

登入 MySQL/MariaDB

若要查詢整個 MySQL/MariaDB 中所有的資料庫,就要使用 root 帳號登入:

mysql -u root -p

輸入 root 密碼之後,即可進入 MySQL/MariaDB 的互動式操作環境,接著就可以輸入各種查詢的 MySQL 指令了。

MySQL/MariaDB 互動式操作環境

查詢所有資料庫大小

若要查詢每個資料庫(databases)的資料大小,可以使用這段指令:

SELECT table_schema AS "Database Name",
  ROUND(SUM(data_length + index_length) / 1024 / 1024, 2)
  AS "Size in (MB)"
  FROM information_schema.TABLES
  GROUP BY table_schema;

執行後會輸出各個資料表的大小,類似這樣:

+--------------------+--------------+
| Database Name      | Size in (MB) |
+--------------------+--------------+
| blog               |       313.24 |
| information_schema |         0.08 |
| mysql              |         0.63 |
| performance_schema |         0.00 |
| tientao_www_dev    |         1.13 |
| www_sbi_tw         |         1.75 |
| www_travelnotes_tw |         2.31 |
+--------------------+--------------+
7 rows in set (0.02 sec)

查詢單一資料庫大小

若只要查詢某個特定的資料庫大小,可以改用這段指令:

SELECT table_schema AS "Database Name",
  ROUND(SUM(data_length + index_length) / 1024 / 1024, 2)
  AS "Size in (MB)"
  FROM information_schema.TABLES
  WHERE table_schema = "YOUR_DB_NAME";

其中 YOUR_DB_NAME 要替換成自己的資料庫名稱。以 blog 資料庫為例,輸出會類似這樣:

+---------------+--------------+
| Database Name | Size in (MB) |
+---------------+--------------+
| blog          |       314.24 |
+---------------+--------------+
1 row in set (0.01 sec)

查詢資料表大小

若要查詢某個資料庫中所有的資料表(tables)的大小,可以使用這段指令:

SELECT table_name AS "Table Name",
  ROUND(((data_length + index_length) / 1024 / 1024), 2)
  AS "Size in (MB)"
  FROM information_schema.TABLES
  WHERE table_schema = "YOUR_DB_NAME"
  ORDER BY (data_length + index_length) DESC;

其中 YOUR_DB_NAME 要替換成自己的資料庫名稱。以 blog 資料庫為例,查詢的結果會類似這樣(這是一個 WordPress 網站的資料表):

+--------------------------+--------------+
| Table Name               | Size in (MB) |
+--------------------------+--------------+
| wp_posts                 |       238.55 |
| wp_postmeta              |        49.61 |
| wp_redirection_404       |        19.40 |
| wp_comments              |         3.48 |
| wp_options               |         1.53 |
| wp_yoast_seo_links       |         0.48 |
| wp_term_relationships    |         0.45 |
| wp_redirection_logs      |         0.24 |
| wp_users                 |         0.06 |
| wp_usermeta              |         0.05 |
| wp_terms                 |         0.05 |
| wp_termmeta              |         0.05 |
| wp_term_taxonomy         |         0.05 |
| wp_commentmeta           |         0.05 |
| wp_ewwwio_images         |         0.04 |
| wp_links                 |         0.03 |
| wp_redirection_items     |         0.02 |
| wp_aiowps_events         |         0.02 |
| wp_yoast_seo_meta        |         0.02 |
| wp_aiowps_login_lockdown |         0.02 |
| wp_aiowps_login_activity |         0.02 |
| wp_aiowps_global_meta    |         0.02 |
| wp_aiowps_failed_logins  |         0.02 |
| wp_hugeit_lightbox       |         0.00 |
| wp_redirection_groups    |         0.00 |
| wp_filemeta              |         0.00 |
| wp_statistics_search     |         0.00 |
+--------------------------+--------------+
27 rows in set (0.01 sec)

查詢實際磁碟用量

如果想知道 MySQL/MariaDB 在硬碟上的實際大小,可以直接在 Linux shell 中以 du 指令查詢:

sudo du -h /var/lib/mysql
212K	/var/lib/mysql/performance_schema
180K	/var/lib/mysql/www_travelnotes_tw
21M	/var/lib/mysql/blog
1004K	/var/lib/mysql/mysql
168K	/var/lib/mysql/tientao_www_dev
168K	/var/lib/mysql/www_sbi_tw
490M	/var/lib/mysql

參考資料:TecmintITW01