Mysql

MySQL如何儲存數據,我可以分離一個mysql數據庫嗎?

  • January 17, 2022

我過去使用過 SQL Server,每個數據庫都保存在單獨的文件(數據文件和日誌文件)中,但 MySQL 中的情況似乎有所不同。這些文件的文件大小轉換為實際的數據庫大小。它們可以壓縮並大大減小大小,但在 MySQL 中似乎有所不同。

我查找儲存在/var/lib/mysql/文件夾中的 MySQL (InnoDB) 文件。每個數據庫都有文件(我不能分享),這三個文件似乎包含數據

-rw-rw---- 1 mysql mysql 50M Feb 24 16:17 ibdata1
-rw-rw---- 1 mysql mysql 48M Feb 24 16:17 ib_logfile0
-rw-rw---- 1 mysql mysql 48M Feb 22 23:49 ib_logfile1

首先,我不確定是否所有數據庫數據都保存在一個文件中,即 ibdata1,其次我的一些數據庫很大(其中一個為 1.4 GB),但這些文件非常小。我想知道如何在 MySQL 中維護數據。

這是我的查詢以查找我的數據庫大小引擎明智

SELECT Engine "DB Engine",
       ROUND(SUM(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB" 
FROM information_schema.tables 
GROUP BY engine;

結果

+--------------------+---------------+
| DB Engine          | DB Size in MB |
+--------------------+---------------+
| NULL               |          NULL |
| CSV                |           0.0 |
| InnoDB             |        3695.8 |
| MEMORY             |           0.0 |
| MyISAM             |        3120.5 |
| PERFORMANCE_SCHEMA |           0.0 |
+--------------------+---------------+

顯然,我的數據庫比儲存該數據的數據文件大得多。附帶說明一下,我還想知道是否可以像在 SQL Server 中一樣在 mySQL 中分離數據庫。部分問題是因為我想優化我的數據庫,刪除不再使用的數據庫。目前這個驅動器上只有 30GB,我也想釋放一些空間。注意我的 Linux (centos) 伺服器上還有額外的驅動器(額外的)。謝謝

簡化答案(不包括PARTITIONing,TRIGGERs等):

innodb_file_per_table = 1

ibdata1  -- some meta info
dbname/tblname.frm  -- schema for `tblname`
dbname/tblname.ibd  -- data and indexes for `tblname`
... (for each table in each database)

innodb_file_per_table = 0

ibdata1  -- meta info, table data, table indexes
dbname/tblname.frm  -- schema for `tblname`
... (for each table in each database)

MySQL 8.0 改變了這一切。

1.4GB 是一個很小的數據庫。

要刪除不再使用的,請使用 mysqldump 和DROP DATABASE.

關於文件: - ib_log 文件是重做日誌

引用自:https://dba.stackexchange.com/questions/230610