【INNODB存储引擎】上
1,介绍
类似于Linux中的存储文件
2,功能
数据读写
数据安全和一致性
提高性能
热备份
自动故障恢复
高可用方面支持 等
3,种类
InnoDB
MyISAM
MEMORY
ARCHIVE
CSV
4,存储引擎是建立在表上面的,不同表可以使用不同的存储引擎
5,其他的存储引擎支持,以下三种存储类型的共同点:压缩比较高差不多是INNODB的三倍,1:5,数据插入性极高现在很多的newSQL使用比较多的功能特性
tokuDB
rocksDB
myrocks
6,INNODB存储引擎介绍

7,INNODB核心特性
事务(transaction)
MVCC(multi-version concurrcy control 多版本并发控制)
行级锁(row-level look)
热备份(hot backup)
ACSR(auto crash safety recovery)自动的故障安全恢复
复制 replication:group commit,GITD(Global Transaction ID),多线程(multi-threads-SQL)
8,使用当前会话查询存储引擎
select @@default_storage_engine;

9,如何修改存储引擎
set只会影响到当前的会话
set default_storage_engine=myisam;
set global不影响当前和历史会话,只会影响到新开的会话
set global default_storage_engine=myisam;
以上两种方法重启数据库失效,除非参数添加至my.cnf
9.1最直观的存储方式
ibdata1:系统数据字典信息(统计信息),回滚UNDO表空间等数据 ib_logfile0 :这是REDO(重做日志)日志文件,事务日志文件
ib_logfile1 :这是REDO(重做日志)日志文件,事务日志文件
ibtmp1:临时表空间磁盘位置,存储临时表
frm:存储表的列的信息
ibd:表的数据行和索引信息
10,表空间
各版本的共享表空间区别:
5.5:版本出现的管理模式,也是默认的管理模式他将数据字典,undo,临时表,索引,表数据都存放在ibdeta文件里
5.6:共享表空间保留,只用来存储数字字典信息,undo,临时表
5.7:临时表被独立出来
8.0:oudu也被独立出来了
10.1共享表空间设置
共享表空间设置(在搭建MySQL数据库时,在初始化之前将参数写进my.cnf中)
select @@innodb_file_per_table; 查看当前默认的表空间模式 show variables like '%extend%'; 查看表空间每一次扩展是多少,默认每一次扩展64M select @@innodb_data_file_path; 查看当前表空间的名称,大小,mysql第一次分配表空间时12M,autoextent是自增的,每扩展一次是64M
innodb_data_file_path=ibdata1:512M:ibdata2:512M:autoextend 设置两个ibdata表空间都是512M且自增的
innodb_autoextend_increment=64 设置每次扩展的大小
set global innodb_file_per_table=0; 设置表空间模式(=1代表frm文件和ibd文件单独存在,=0则代表将ibd文件存到ibdeta里面只有frm文件单独存放)
10.2独立表空间
受这个下面这个参数控制=1就是独立表空间
set global innodb_file_per_table=0; 设置表空间模式(=1代表frm文件和ibd文件单独存在,=0则代表将ibd文件存到ibdeta里面只有frm文件单独存放)
从5.6以后默认的表空间不在使用共享表空间,替换为独立表空间
主要存储的是用户数据
存储特点为:一个表一个ibd文件,存储数据行和索引信息
基本表结构元数据存储:xxx.frm
最终的结论:mysql表数据=(ibdetaX+frm)+ibd(段区页)缺一不可
mysql 存储引擎日志:
redo log:ib_logfile0 ib_logfile1,重做日志
undo log:ibdate1 ibdate2(存储在共享表空间中),回滚日志
临时表:ibtmp1,在座join union 操作产生的临时数据,用完就自动丢弃
单个表空间恢复用以下两条命令
alter table t1 discard tablespace;(删除ibd文件也就是数据行和索引信息)
alter table t1 import tablespace; (让ibdeta重新统计一下ibd文件就可以使用了,注意文件权限属主属组)
多个表恢复使用information_schema.tables配合concat语句
1.discard拼接语句,将语句导入到tmp目录下
2.登录到数据中source一下/tmp/*.sql
3.有外键会报错需要跳过外键:set foreign_key_checks=0; 然后在source一下
4.将备份的ibd文件拷贝到数据库下
5.import拼接语句,将语句导入到/tmp/*.sql
6.登录到数据中source一下/tmp/*.sql
11,事务的ACID特性
11.1 作用
影响了DML语句(insert,update,delete,一部分select)
Atomic(原子性)
所有语句作为一个单元全部成功执行或全部取消,不能出现中间状态
Consistent(一致性)
如果数据库在事务开始时处于一致状态,则在执行该事物期间将保留一致状态
Isolated(隔离性)
事务之间互不影响
Durable(持久性)
事务成功完成之后,所做的所有更改都会准确地记录在数据库中,所做的更改不会丢失
11.2事务的控制语句
一个事务的开始:begin;
一个事务的结束:commit;
回滚事务,将内存中已经执行的事务回滚回去:rollbak
11.3自动提交策略(autocommit)
查询当前事务是否开启自动提交,0为关闭1为开启:select @@autocommit;
临时关闭:set autocommit=0;
全局临时关闭:set global autocommit=0;
注意:自动提交是否打开,一般在有事务需求的MySQL中,将其关闭,不管有没有事务需求,建议设置为0,可以很大程度上提高数据性能
(1)set autocommit=0;
(2)vim /etc/my.cnf
set autocommit=0
事务的隐式控制特性
kill掉连接会话可以断开事务
begin之后没有提交在begin,上一个begin默认提交
第一个begin之后没有提交在使用DDL,DCL之后也会默认提交
11.4redo在ACID中的一个作用
重做日志,前滚日志。主要完成ACID中的D的特性,对AC也有一定的作用
LSN号数据页也就是数据行的一个编号,TXID事务id号,主要是redobuffer里面存着数据行的一个变化过程,用来构建脏叶,将变化后数据写入到磁盘中,ib_logfile0这个是一条语句的变化过程存储位置,也叫做前滚日志
11.5 undo在ACID的一个作用
回滚日志,撤销日志,主要完成ACID中A的特性,对CI也有一定的作用
undo buffer是将磁盘中的数据页调入到内存时同时写进undobuffer,内存数据页有一个个槽位id是和undobuffer的槽位id相对应的,最终会写进ibdata1里面,将来用于做数据页的回滚操作也就是恢复到原数据

浙公网安备 33010602011771号