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;">高并发

相关文章
相关标签/搜索