mysql redo log 路径_MySQL基础教程(10)Redo log与Undo log

一、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(事务回滚日志)

1、Undo log作用

Undo log记录了每个事务的反向操作,当数据库发生异常错误时可以根据Undo log回滚到事务之前的数据状态,保证了事务的原子性。另外MVCC特性也是通过Undo log来计算出历史版本的数据。Undo log会写入到ibdata和ibtmp文件中。当数据库重启进行crash-recovery时会通过Redo log将已经提交事务的更改写到数据文件,而还没有提交的就通过Undo log进行roll back。

2、undo log相关参数配置

innodb_data_home_dir = /data/mysql/ #共享表空间文件存放路径,文件名为ibdata1

innodb_data_file_path = ibdata1:1024M:autoextend #共享表空间文件大小,可以写多个文件进行拆分

3、

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值