MySQL修改預設儲存引擎
mysql儲存引擎:
MySQL伺服器採用了模組化風格,各部分之間保持相對獨立,尤其體現在儲存架構上。儲存引擎負責管理資料儲存,以及MySQL的索引管理。通過定義的API,MySQL伺服器能夠與儲存引擎進行通訊。目前使用最多的是MyISAM和InnoDB。InnoDB被Oracle收購後,MySQL自行開發的新儲存引擎Falcon將在MySQL6.0版本引進。
MyISAM引擎是一種非事務性的引擎,提供高速儲存和檢索,以及全文搜尋能力,適合資料倉庫等查詢頻繁的應用。MyISAM中,一個table實際儲存為三個檔案,.frm儲存表定義,.MYD儲存資料,.MYI儲存索引。
InnoDB則是一種支援事務的引擎。所以的資料儲存在一個或者多個數據檔案中,支援類似於Oracle的鎖機制。一般在OLTP應用中使用較廣泛。如果沒有指定InnoDB配置選項,MySQL將在MySQL資料目錄下建立一個名為ibdata1的自動擴充套件資料檔案,以及兩個名為ib_logfile0和ib_logfile1的日誌檔案。
建立table時可以通過engine關鍵字指定使用的儲存引擎,如果省略則使用系統預設的儲存引擎:CREATE TABLE t (i INT) ENGINE = MYISAM;
檢視系統中支援的儲存引擎型別:
1 |
mysql>
show engines;| Engine | Support | Comment || MyISAM | YES | Default engine as of MySQL 3.23 with greatperformance | |
2 |
|
MEMORY | YES | Hash based, stored in memory, useful for temporarytables | |
3 |
|
InnoDB | DEFAULT | Supports transactions, row-level locking, andforeign keys | |
4 |
|
BerkeleyDB | NO | Supports transactions and page-level locking| |
5 |
|
BLACKHOLE | NO | /dev/null storage engine (anything you write toit disappears) | |
6 |
|
EXAMPLE | NO | Example storage engine | |
7 |
|
ARCHIVE | YES | Archive storage engine | |
8 |
|
CSV | NO | CSV storage engine | |
9 |
|
ndbcluster | NO | Clustered, fault-tolerant, memory-based tables| |
10 |
|
FEDERATED | NO | Federated MySQL storage engine | |
11 |
|
MRG_MYISAM | YES | Collection of identical MyISAM tables | |
12 |
|
ISAM | NO | Obsolete storage engine |12 rows in set (0.00 sec) |
標準安裝程式中只提供部分引擎的支援,如果需要使用其他的儲存引擎,需要使用原始碼加不同的引數重新編譯。其中DEFAULT表明系統的預設儲存引擎,可以通過修改配置引數來變更:
default-storage-engine=MyISAM
檢視某個儲存引擎的具體資訊
1 |
mysql>
show engine InnoDB status\G; |
一般安裝系統預設是INNODB
default-storage-engine=INNODB
1.可以在啟動資料庫伺服器時在命令列後面加上–default-storage-engine或–default-table-type選項。
2.更靈活的方式是在隨MySQL伺服器釋出同時提供的MySQL客戶端時指定使用的儲存引擎。最直接的方式是在建立表時指定儲存引擎的型別,向下面這樣:
1 |
CREATE
TABLE mytable (id int, titlechar(20)) ENGINE = INNODB |
修改表的儲存引擎:
1 |
ALTER
TABLE engineTest ENGINE = INNODB; |
修改預設儲存引擎:
在mysql配置檔案(linux下為/etc/my.cnf),在mysqld後面增加default-storage-engine=INNODB即可。
但是如果表建立的時候是MyISAM,要更改整個資料庫表的儲存引擎,一般要一個表一個表的修改,比較繁瑣,可以採用先把資料庫匯出,得到SQL,把MyISAM修改成INNODB,再匯入的方式。