一.MVCC (1)mvcc主要undo日志版本链和read-view一致性视图来保证多事务的并发控制,mvcc是innodb的一种特殊机制,他保证了事务四大特性之一的隔离性(原子性,一致性,隔离性). (2)不同事务的隔离级别mvcc的作用机制不一样,当隔离级别是读已提交的时候,他会第一次执行select语句的时候会生成一个read-view,基于undo日志版本链的一致性试图,之后整个事务每当有select执行的时候就会去更新read-view,当事务的隔离级别是可重复读的时候,mvcc机制…
MySQL的存储引擎是以插件形式工作的,这应该是MySQL的一大特色了吧! 依据<深入理解MySQL>的内容,5.1版本号时存储引擎的插件化都还不是彻底,确切的说是刚加入的特性.为MySQL加入一个存储引擎时,须要更改一些上层代码,零散的更改本来就有点麻烦,同一时候project也要又一次编译一次.我听别人说,已经能够不改C/C++代码就直接加入引擎了.这种话,折腾存储引擎的话就更方便了! 这段代码来自ha_innodb.cc,这是MySQL中申明存储引擎插件的标准过程.这段代码利用了宏.在p…
分析下MySql中innodb存储引擎是如何通过日志来实现事务的? Mysql会最大程度的使用缓存机制来提高数据库的访问效率,但是万一数据库发生断电,因为缓存的数据没有写入磁盘,导致缓存在内存中的数据丢失而导致数据不一致怎么办? Innodb主要是通过事务日志实现ACID特性,事务日志包括:重做日志redo和回滚日志undo. Redo记录的是已经全部完成的事务,就是执行了commit的事务,记录文件是ib_logfile0 ib_logfile1 Undo记录的是已部分完成并且写入硬盘的未完成…
说明: 线上的一台MySQL数据库服务器突然断电,造成系统故障无法启动,重新安装系统后,找到之前的MySQL数据库文件夹. 问题: 通过复制文件的方式对之前的MySQL数据库进行恢复,发现在程序调用时找不到数据库中的表,造成网站无法正常访问. 分析: 1.MySQL数据库,使用拷贝文件方式来恢复数据库,只支持MyISAM引擎: 2.如果有数据库或数据表使用了InnoDB引擎,恢复的时候,必须连同MySQL数据库目录下的ibdata1文件一起拷贝过来. 解决办法: 1.停止MySQL服务 serv…
前言 如果面试官问的是,为什么Mysql中Innodb的索引结构采取B+树?这个问题时,给自己留一条后路,不要把B树喷的一文不值.因为网上有些答案是说,B树不适合做文件存储系统的索引结构.如果按照那种答法,自己就给自己挖了一个坑,很难收场.因此,就有了这篇文章的诞生~ 正文 这里的Mysql指的是Innodb的存储引擎下的索引结构,其他存储引擎我们暂时不讨论. B树和B+树 开头,我们先回忆一下,B树和B+树的结构以及特点,如下所示:B树 注意一下B树的两个明显特点 树内的每个节点都存储数据 叶…
MySQL中InnoDB锁不住表是因为如下两个参数的设置: mysql> show variables like '%timeout%'; +-----------------------------+----------+ | Variable_name               | Value    | +-----------------------------+----------+ | connect_timeout             | 10       | | delaye…
mysql 中 innoDB 与 MyISAM 的特点 --ENGINE = innodb 1.提供事务处理,支持行锁: 2.不加锁读取,增加并发读的用户数量和空间: 3. insert/update 优秀,不支持全文索引: 4.支持事务. --ENGINE =  myisam 1.mysql默认值 2.支持全文检索: 3.事务安全,不支持外键: 4.select 优秀: 5.不支持事务,原子操作.…
一.事务(数据库的事务都通用的定义) 1.1 事务定义 事务是由一步或几步数据库操作序列组成逻辑执行单元,这系列操作要么全部执行,要么全部放弃执行.事务通常以 BEGIN TRANSACTION 开始,以COMMIT 或 ROLLBACK 操作结束: COMMIT 即提交,提交事务中所有的操作.事务正常结束: ROLLBACK 即回滚,撤销已做的所有操作,回滚到事务开始的状态. 1.2 事务的四种特性 ACID: 原子性,一致性,隔离性,持久性. ACID属性 含义 原子性(Atomicity)…
我们知道InnoDB采用Write Ahead Log策略来防止宕机数据丢失,即事务提交时,先写重做日志,再修改内存数据页,这样就产生了脏页.既然有重做日志保证数据持久性,查询时也可以直接从缓冲池页中取数据,那为什么还要刷新脏页到磁盘呢?如果重做日志可以无限增大,同时缓冲池足够大,能够缓存所有数据,那么是不需要将缓冲池中的脏页刷新到磁盘.但是,通常会有以下几个问题: 服务器内存有限,缓冲池不够用,无法缓存全部数据 重做日志无限增大成本要求太高 宕机时如果重做全部日志恢复时间过长 事实上,当数据库…
MyISAM引擎中,为了提高io效率以及读取效率,将对磁盘频繁读取的索引数据加载至内存中操作. MyISAM设计了一个在存放在内存中的索引缓冲池Key Cache.Key Cache只缓存索引数据,通过LRU算法将读取频繁的索引加载到Key Cache中来. 通过系统变量 key_buffer_size 来控制Key Cache的大小,这个变量关乎到缓存的性能. InnoDB引擎中,同样设置了缓存池buffer pool,与MyISAM有所区别的是,buffer pool不仅仅缓存了索引数据,同…