innodb是支援事務的儲存引擎,支援acid特性的acid(指資料庫事務正確執行的四個基本要素的縮寫)
包含:原子性(atomicity)、一致性(consistency)、隔離性(isolation)、永續性(durability)
更適合處理大量的小事務,小事務正常都會被提交,很少會被回滾,在資料儲存的方式上也有很大不同
innodb有自己的表空間,資料儲存在自己的表空間中的,儲存在什麼樣的表空間中,主要由innodb_file_per_table
這個引數決定,如果這個引數為on,則建立獨立表空間,則為每個innobd表建立乙個以.idb為副檔名的系統檔案,如果為off則建立共享(系統)表空間,儲存為ibdatax(x為數字)
1.set global innodb_file_per_table=off; 設定為off
2.show variable like 'innodb_file_per_table'; 檢視表空間
3.create table myinnodb_g(id int,c1 varchar(10)) engine='innodb'; 當關閉innodb表時就會發現儲存為idbdata1,共享表空間
系統表空間和獨立表空間如何選擇
在mysql5.5之前是預設關閉innodb_file_per_table的,儲存在系統表空間中,
1.系統表空間無法簡單的收縮檔案大小,產生磁碟碎片,空間浪費,降低系統效能
系統表空間產生io瓶頸,獨立表空間可以同時向多個檔案重新整理資料
2.獨立表空間可以通過optimize table 命令收縮系統檔案。mysql5.6後預設開啟
1.將原來存在於系統表空間中的表轉移到獨立表空間中的方法:
1.1、使用mysqldump匯出所有資料庫資料,如果有儲存過程、觸發器,計畫事件等要一起匯出
1.2、停止mysql服務,(主從架構先從從進行操作)修改my.cnf檔案並加入innodb_file_per_table=on引數(修改引數,並刪除原來innodb表空間相關檔案)
如果之前做過備份,這裡可以重建data目錄,使用mysql的初始化start指令碼
1.3、重啟mysql服務,重建innodb系統表空間
1.4、重新匯入資料
2.系統表空間中的資料字典
innodb資料字典:是資料庫物件結構的源資料的資訊,儲存表、列、索引
frm檔案是伺服器所產生的檔案,可以理解為伺服器層的資料字典,簡單二進位制檔案
innodb內部資料字典,引擎相關的一些內容
undo回滾段:mysql5.6 就已經支援啦
3、innodb是如何實現完全支援事務的acid特性的
實現原子性、永續性、一致性使用了兩個日誌型別,
redo log 重做日誌:實現事務的永續性,記憶體中的重做日誌緩衝區,重做日誌檔案
show variables like 'innodb_log_buffer_size';
以位元組為單位的大小,不需要太大,data目錄下看到ib_logfil0/1,有兩個,show variables like 'innodb_log_files_in_group'; 看到預設兩個,儲存已提交事務
undo log 回滾日誌:幫助未提交事務進行回滾和實現mvcc多版本併發控制,儲存未提交的事務
20 筆記 MySQL學習 InnoDB儲存引擎
20.筆記 mysql學習 innodb儲存引擎 innodb儲存引擎是mysql的預設引擎。有幾項功能 n 其表在執行提交和回滾操作時是事務安全的。n 在系統崩潰後可以自動恢復 n 外來鍵和引用完整性支援,包括級聯刪除和更新 n 基於行級別的鎖定和多版本化 n 從mysql 5.6開始,innod...
Mysql中MyISAM與InnoDB引擎的區別
innodb mysql 5.5.5版本之後為預設儲存引擎。innodb 是乙個事務安全 與 acid 相容 的mysql儲存引擎,它具有提交 回滾和崩潰恢復功能來保護使用者資料。innodb 行級鎖 不公升級為更粗粒度的鎖 和 oracle風格的一致非鎖讀提高了多使用者併發性和效能。innodb ...
MySQL中MyISAM和InnoDB引擎的區別
區別 1.innodb支援事務,myisam不支援,對於innodb每一條sql語言都預設封裝成事務,自動提交,這樣會影響速度,所以最好把多條sql語言放在begin和commit之間,組成乙個事務 2.innodb支援外來鍵,而myisam不支援。對乙個包含外來鍵的innodb表轉為myisam會...