MYSQL 初识Innodb存储引擎

Innodb存储引擎:
InnoDB存储引擎自Mysql5.5以后,为Mysql默认存储引擎,特性如下:
1.支持事务,遵循ACID。
2.支持行级锁,并且引入类似Oracle数据库中的一致性读特性,以提升多用户并发时的读写特性。
3.InnoDB支持主外键约束.
4.InnoDB存储引擎由于具备日志体系所以也具备Oracle的实例恢复特性
5.InnoDB拥有自己独立的缓冲池(对应innodb_buffer_pool_size,类似于Oracle数据库中的SGA_TARGET),常用数据 (含索引)都在缓存中。
6.对于insert update delete操作,会被一种称为change buffering的机制自动优化.
7.InnoDB不仅仅提供了一致性读,而且还能够缓存变更的数据,以减少磁盘I/O.

InnoDB物理存储结构分为两种:
1.共享表空间
即为InnoDB引擎只对应一个表空间,即系统表空间,所有InnoDB引擎表的数据(含索引)都存储在该表空间中,注意仅仅是保存数据,表对象的结构则仍然需要保存在与表对象同名的.frm文件中。

InnoDB的表空间则支持多个数据文件.
控制参数:
Innodb_data_file_path=xxx.dbf:2048M:autoextend:max:100G

mysql> show variables like ‘%Innodb_data_file_path%’;
±----------------------±-----------------------+
| Variable_name | Value |
±----------------------±-----------------------+
| innodb_data_file_path | ibdata1:12M:autoextend |
±----------------------±-----------------------+
1 row in set (0.00 sec)

[root@mysql57 data]# pwd
/mysql/app/data

[root@mysql57 data]# ll ibdata1
-rw-r----- 1 mysql mysql 12582912 Jan 17 12:05 ibdata1

2.独立表空间
每个表具有一个表空间 (.ibd文件),这个文件就是表空间文件.

例如:
test表为独立表空间,test4为共享表空间
-rw-r----- 1 mysql mysql 8556 Jan 17 11:36 test3.frm
-rw-r----- 1 mysql mysql 98304 Jan 17 11:36 test3.ibd
-rw-r----- 1 mysql mysql 8556 Jan 17 11:46 test4.frm

是否启用独立表空间,由系统变量innodb_file_per_table来控制的.

mysql> show variables like ‘innodb_file_per_table’;
±----------------------±------+
| Variable_name | Value |
±----------------------±------+
| innodb_file_per_table | ON |
±----------------------±------+
1 row in set (0.01 sec)

关闭独立表空间:
mysql> set global innodb_file_per_table=0;

再次查询:
mysql> show variables like ‘innodb_file_per_table’;
±----------------------±------+
| Variable_name | Value |
±----------------------±------+
| innodb_file_per_table | OFF |
±----------------------±------+
1 row in set (0.01 sec)

注意:
不管Innodb_file_per_table如何设置,系统表空间都是必须要有的,InnoDB自身需要使用系统表空间,存储内部数据字典及UNDO日志等。
另外需要注意的是,即使是独立表空间,对象同名的.ibd文件不能被随意移动,因为表结构,所属数据库等信息存在于InnoDB的系统表空间,直接移动ibd不仅无法实现快速迁移数据的目的,反倒可能造成对象无法访问。

Innodb日志体系:
redo日志:
与Oracle数据库中的redo极为相似,并且同样也有日志文件组的概念.只不过,Oracle数据库中的REDOLOG文件全局有效,而InnoDB的REDOLOG文件则仅针对InnoDB引擎,其他引擎用不到的

默认情况下,InnoDB引擎会创建两组大小均为5MB的日志文件,分别命名为ib_logfile0和ib_logfile1,日志文件保存在datadir变量指定的路径下.
mysql> show variables like “%datadir%”;
±--------------±-----------------+
| Variable_name | Value |
±--------------±-----------------+
| datadir | /mysql/app/data/ |
±--------------±-----------------+
1 row in set (0.00 sec)

-rw-r----- 1 mysql mysql 50331648 Jan 17 11:46 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 Jan 16 12:13 ib_logfile1

控制日志文件参数:
Innodb_log_group_home_dir:指定InnoDB的REDOLOG日志文件保存路径。
Innodb_log_file_size:用于指定日志文件的大小,默认为5M.
Innodb_log_files_in_group:用于指定日志文件组的数量,默认为2个.

调整日志配置:
调整日志配置前先了解下innodb_fast_shutdown参数:(控制InnoDB的关闭模式,共有0,1,2三种.默认为1)

1模式:
InnoDB将关闭会话中止连接,将已提交的数据刷新至数据文件,未提交的事务进行回滚
(类似Oracle数据库中关闭数据库时的shutdown immediate)

0模式:
要等到会话关闭,所有事务结束,缓存区中的数据被刷新到磁盘等
(类似于Oracle数据库中的shutdown normal)

2模式:
这种模式将忽略当前执行的所有操作,直接关闭.下次启动时Innodb需要执行实例恢复.
(类似Oracle数据库中的shutdown abort)

若想要修改日志文件配置,那么首先检查innodb_fast_shutdown系统参数的值:

mysql> show variables like ‘innodb_fast_shutdown’;
±---------------------±------+
| Variable_name | Value |
±---------------------±------+
| innodb_fast_shutdown | 1 |
±---------------------±------+
1 row in set (0.00 sec)

调整日志流程如下:
1.确定innodb_fast_shutdown值为1,若当前值为2,则必须先将其修改为1
2.停止Mysql服务
3.将旧的日志文件移动走
4.修改my.cnf中innodb_log_file_size参数
5.重启mysql数据库.

undo日志:
即被修改数据库的前映像,用于事务回滚,类比于Oracle的undo表空间.
在Mysql数据库中,回滚段默认都是保存在系统表空间中,但是从Mysql5.6版本开始,InnoDB引擎中的undo日志也可以单独设置表空间,将InnoDB的undo日志从系统表空间中移出,转移至一个独立的表空间内保存,于是就有了undo表空间,但是切记配置单独undo表空间,需要在建库时配置.后续不可配置,这也是Innodb的undo机制不够灵活的主要原因。

相关参数:
mysql> show variables like ‘%innodb_undo%’;
±-------------------------±------+
| Variable_name | Value |
±-------------------------±------+
| innodb_undo_directory | ./ |
| innodb_undo_log_truncate | OFF |
| innodb_undo_logs | 128 |
| innodb_undo_tablespaces | 0 |
±-------------------------±------+

innodb_undo_directory 用于指定保存undo日志的物理文件位置。
Innodb_undo_tablespaces:用于指定undo表空间的数量,每个undo表空间都是独立的.idb文件,因此这里也可以理解为undo数据文件的数量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值