mysqlredolog路径_MySQL基础教程(10)Redolog与
Undolog
box free实例分割⼀、MySQL常⽤存储引擎
存储引擎可以理解为是数据库⾃⼰的⽂件系统,不同类型的存储引擎有不同的特点。存储引擎位于表级别,也就是说可以为每张表设置不同的存储引擎进⾏使⽤。常见的存储引擎有MyISAM、InnoDB、Memory、TokuDB、CSV等。
· MyISAM:数据存放在.frm、.MYD、.MYI三种类型的⽂件中,可以直接拷贝表⽂件到其他数据库中进⾏使⽤。表级锁、不⽀持热备,最关键不⽀持事务,因此从MySQL 8.0开始对该引擎进⾏了淘汰。
· MEMROY:数据存放在内存中,不会持久化
· TokuDB:压缩⽐可以达到25倍,对数据的插⼊和删除速度也很快。适⽤于有⼤量插⼊或者删除操作的场景,如Zabbix
· InnoDB:MySQL 5.5版本以后默认的存储引擎。⽀持MVCC(多版本并发控制)、集索引(聚簇索引)、事务、⾏级锁、热备。数据存放在.frm、.ibd两种类型的⽂件中,5.6开始默认会开启独⽴表空间,每张
表都会有⼀个独⽴.ibd⽂件。由于InnoDB还依赖共享表空间⽂件ibdata1存放undo log,以及ib_logfile存放redo log,所以不能直接拷贝.ibd到其他数据库进⾏使⽤。
show engines #查看当前MySQL所⽀持与默认的存储引擎
set global default_storage_engine=innodb #在线修改全局配置
#写⼊到配置⽂件中的配置
[mysqld]
交换机的作用与功能default_storage_engine=innodb
⼆、Redo log(事务重做⽇志)
1、Redo log作⽤
InnoDB引擎独有的物理级别⽇志,记录了数据页上所做的修改。当MySQL遇到数据需要更新的时候,InnoDB会先把更新记录顺序写到redo log的buffer内存空间(这种也叫WAL⽇志先⾏机制)。由于内存速度远⾼于磁盘,此刻如果有客户端请求数据时会把内存⾥更新的数据返回给客户端。随后InnoDB会在
合适的时机将这些脏页(内存页数据和磁盘页数据不⼀致的时候,内存页的数据就叫脏页)按照随机写的⽅式flush到磁盘,让内存和磁盘中的数据保持⼀致,成为⼲净页。如果⼀切正常会写⼊到binlog中传递给从库。当数据库异常重启需要crash-recovery时会通过Redo log将已经提交事务的更改写到数据⽂件(这也是为什么强烈建议配置双1参数的原因,保证了数据的安全),实现数据库宕机的⾃动恢复(crash-safe)。如果在写binlog之前数据库发⽣了崩溃(crash),此刻数据状态不满⾜两阶段提交,事务会被回滚。由于binlog还没写也不会传到从库。总结下来就是MySQL进⾏数据更新的时候会先修改buffer pool缓存、然后修改undo log、redo log buffer。当提交事务的时候⼀定会把redo log、binlog刷盘,最后完成redo log中的事务commit标记;最后IO线程把脏数据刷⼊磁盘。
2、flush脏页的⼏种场景
· 当Redo log写满时,系统会停⽌数据库所有更新操作,开始flush内存数据到磁盘,flush完成后Redo log继续滚动写⼊。此刻flush操作会让所有更新都阻塞,如果有监控的话,更新数基本为0
· 当系统内存不太够但⼜出现⼀个查询操作需要申请内存时也会触发flush操作。此刻如果需要淘汰的脏页太多也会影响服务性能。
· 当MySQL空闲时⾃动flush,默认每秒⼀次
· 停⽌MySQL服务时会⾃动flush内存中的数据到磁盘
3、Redo log参数配置项
innodb_flush_log_at_trx_commit=1 #redolog写⼊策略,双1参数之⼀。0表⽰不主动将redolog buffer落盘,⽽是依靠Innodb每秒刷新到磁盘,存在丢失⼀秒数据的风险;1表⽰每次事务提交时都将redo log刷到磁盘;2表⽰每次事务提交时把redo log写到系统缓存,由系统决定落盘时间,系统宕机的话会丢失部分数据
innodb_log_file_size=6G #设置redo log⽂件⼤⼩,⽂件会⾃动命名为ib_logfile0~ib_logfileN,如果设置太⼩会导致数据库因为经常flush⽽间歇性性能下降
innodb_log_files_in_group=2 #设置redo log⽂件个数
innodb_log_group_home_dir=./ #设置redo log⽂件路径
# innodb_io_capacity=2000 #设置脏页刷新速度,单位为页。磁盘速度越快就设置越⼤,建议和磁盘IOPS⼀样
# innodb_flush_neighbors=0 #刷脏页时是否把数据页旁边的脏页也刷掉,1为⼀起刷,SSD磁盘建议为0,8.0开始默认为0
三、Undo log(事务回滚⽇志)
jsp运行环境1、Undo log作⽤
mysql入门基础教程Undo log记录了每个事务的反向操作,当数据库发⽣异常错误时可以根据Undo log回滚到事务之前的数据状态,保证了事务的原⼦性。另外MVCC特性也是通过Undo log来计算出历史版本的数据。Undo log会写⼊到ibdata和ibtmp⽂件中。当数据库重启进⾏crash-recovery时会通过Redo log将已经提交事务的更改写到数据⽂件,⽽还没有提交的就通过Undo log进⾏roll back。
2、undo log相关参数配置
linux系统运维面试题innodb_data_home_dir = /data/mysql/ #共享表空间⽂件存放路径,⽂件名为ibdata1
innodb_data_file_path = ibdata1:1024M:autoextend #共享表空间⽂件⼤⼩,可以写多个⽂件进⾏拆分华为前端开发工程师工资
3、
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论