Mysql
MySQL如何儲存數據,我可以分離一個mysql數據庫嗎?
我過去使用過 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 文件是重做日誌