innodb存儲引擎

Mysql存儲引擎介紹

  MySQL引擎:能夠理解爲,MySQL的「文件系統」,只不過功能更增強大。
  MySQL引擎功能:除了能夠提供基本的存取功能,還有更多功能事務功能、鎖定、備份和恢復、優化以及特殊功能。mysql

1. MySQL存儲引擎種類

MySQL 提供如下存儲引擎
  InnoDB 經常使用
  MyISAM 經常使用
  MEMORY
  ARCHIVE
  FEDERATED
  EXAMPLE
  BLACKHOLE
  MERGE
  NDBCLUSTER
  CSV 
  還可使用第三方存儲引擎(TokuDB)sql

2.innodb功能總覽

 

3.查看數據庫引擎設置

一、使用 SELECT 確認會話存儲引擎:
SELECT @@default_storage_engine;
二、使用 SHOW 確認每一個表的存儲引擎:
show engines;
show create table city;
show table status like 'city'\G
三、使用 INFORMATION_SCHEMA 確認每一個表的存儲引擎:
select table_schema,table_name,engine from information_schema.tables where table_schema='world';
select table_schema,table_name,engine from information_schema.tables where table_schema='mysql';
select table_schema,table_name,engine from information_schema.tables where engine='csv';
四、在啓動配置文件中設置服務器存儲引擎:
[mysqld]
default-storage-engine=<Storage Engine>
五、使用 SET 命令爲當前客戶機會話設置:
SET @@storage_engine=<Storage Engine>;
六、在 CREATE TABLE 語句指定:
CREATE TABLE t (i INT) ENGINE = <Storage Engine>;

4.innodb體系結構---物理存儲結構(表空間)

 


共享表空間:主要存放系統元數據等
獨立表空間:主要存放用戶數據數據庫

4.1 innodb---共享表空間

InnoDB系統表空間:
  默認狀況下,InnoDB 元數據、撤消日誌和緩衝區存儲在系統「表空間」中。
  這是單個邏輯存儲區域,能夠包含一個或多個文件。
  每一個文件能夠是常規文件或原始分區。
  最後的文件能夠自動擴展。 安全

 



InnoDB系統表空間配置服務器

經過添加數據文件增長表空間大小。
在 my.cnf 文件中使用 innodb_data_file_path 選項。 
[mysqld]
innodb_data_file_path=datafile_spec1[;datafile_spec2]...
配置示例:建立一個表空間,其中包含一個名爲 ibdata1 且大小爲 50 MB(固定)的數據文件和一個名爲 ibdata2 且大小爲 50 MB(自動擴展)的數據文件:
[mysqld]
innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend
默認狀況下將文件放置在 data 目錄中。
若是須要,顯式指定文件位置。

4.2 innodb---獨立表空間

除了系統表空間以外,InnoDB 還在數據庫目錄中建立另外的表空間,用於每一個 InnoDB 表的 .ibd 文件。
InnoDB 建立的每一個新表在數據庫目錄中設置一個 .ibd 文件來搭配表的 .frm 文件。
可使用 innodb_file_per_table 選項控制此設置
更改該設置僅會更改已建立的新表的默認值。
mysql> show variables like '%per_table';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON    |
+-----------------------+-------+
1 row in set (0.00 sec)
永久生效須要在my.cnf配置文件添加innodb_file_per_table={0|1},而後重啓mysql服務
注:在mysql5.6開始,默認的配置爲:
| innodb_file_per_table | ON    |

4.3 Innodb存儲引擎——事務ACID

Atomic(原子性)
  全部語句做爲一個單元所有成功執行或所有取消。
Consistent(一致性)
  若是數據庫在事務開始時處於一致狀態,則在執行該事務期間將保留一致狀態。
Isolated(隔離性)
  事務之間不相互影響。
Durable(持久性)
  事務成功完成後,所作的全部更改都會準確地記錄在數據庫中。所作的更改不會丟失。併發

4.4 Innodb存儲引擎——事務SQL控制語句

START TRANSACTION(或 BEGIN):顯式開始一個新事務
COMMIT:永久記錄當前事務所作的更改
ROLLBACK:取消當前事務所作的更改
SAVEPOINT:分配事務過程當中的一個位置,以供未來引用
ROLLBACK TO SAVEPOINT:取消在 savepoint 以後執行的更改
RELEASE SAVEPOINT:刪除 savepoint 標識符
SET AUTOCOMMIT:爲當前鏈接禁用或啓用默認 autocommit 模式

4.5 Innodb存儲引擎——Autocommit模式設置

在MySQL5.5開始,開啓事務時再也不須要begin或者start transaction語句。而且,默認是開啓了Autocommit模式,做爲一個事務隱式提交每一個語句。
在有些業務繁忙企業場景下,這種配置可能會對性能產生很大影響,但對於安全性上有很大提升。
未來,咱們須要去權衡咱們的業務需求去調整是否自動提交。
咱們能夠經過如下命令進行修改關閉(0是關閉,1是開啓):
    SET GLOBAL AUTOCOMMIT=0;  #全部新建會話
    SET SESSION AUTOCOMMIT=0; #當前會話
    SELECT @@AUTOCOMMIT;      #查看設置結果
咱們也能夠修改配置文件讓其永久生效:
    vi /etc/my.cnf    
    [mysqld]
    AUTOCOMMIT=0

4.6 Innodb存儲引擎——其餘觸發隱式commit的狀況

用於隱式提交的 SQL 語句:
    START TRANSACTION
    SET AUTOCOMMIT = 1 
致使提交的非事務語句:
    DDL語句:    (ALTER、CREATE 和 DROP)
    DCL語句:    (GRANT、REVOKE 和 SET PASSWORD)
    鎖定語句:(LOCK TABLES 和 UNLOCK TABLES)
致使隱式提交的語句示例:
    TRUNCATE TABLE
    LOAD DATA INFILE
    SELECT FOR UPDATE

4.7 Innodb存儲引擎——事務日誌

Redo是什麼?    
    redo,顧名思義「重作日誌」,是事務日誌的一種。
做用是什麼?
    在事務ACID過程當中,實現的是「D」持久化的做用。
undo是什麼?    
undo,顧名思義「回滾日誌」,是事務日誌的一種。
做用是什麼?
在事務ACID過程當中,實現的是「A、C」原子性和一致性的做用
什麼是「鎖」?
「鎖」顧名思義就是鎖定的意思。
「鎖」的做用是什麼?
在事務ACID過程當中,「鎖」和「隔離級別」一塊兒來實現「I」隔離性的做用
鎖的粒度:
一、MyIasm:低併發鎖——表級鎖
二、Innodb:高併發鎖——行級鎖
四種隔離級別:
READ UNCOMMITTED
    容許事務查看其餘事務所進行的未提交更改
READ COMMITTED
    容許事務查看其餘事務所進行的已提交更改
REPEATABLE READ******
    確保每一個事務的 SELECT 輸出一致
    InnoDB 的默認級別
SERIALIZABLE
    將一個事務的結果與其餘事務徹底隔離

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">高併發

相關文章
相關標籤/搜索