• mysql的innodb中事务日志ib_logfile


    ib_logfile正如你所说,它是INNODB的REDO、UNDO日志,并不是备份用的日志。
    MYSQL可以通过BINLOG来恢复,但这个ib_logfile没什么恢复的作用,它主要是在事务中起一个前滚或后滚的作用。

    mysql的innodb中事务日志ib_logfile
    事务日志或称redo日志,在mysql中默认以ib_logfile0,ib_logfile1名称存在,可以手工修改参数,调节
    开启几组日志来服务于当前mysql数据库,mysql采用顺序,循环写方式,每开启一个事务时,
    会把一些相关信息记录事务日志中(记录对数据文件数据修改的物理位置或叫做偏移量);
    作用:在系统崩溃重启时,作事务重做;在系统正常时,每次checkpoint时间点,会将之前写入事务
    应用到数据文件中。
    引入一个问题:在m/s环境中,innodb写完ib_logfile后,服务异常关闭,会不会主库能用ib_logfile恢复数据,而
    binlog没写导致从库同步时少少这个事务?从而导致主从不一致;
    redo日志写入方式:
    1.ib_logfile写入当前事务更新数据,并标上事务准备trx_prepare
    2.写入bin-log
    3.ib_logfile当前事务提交提交trx_commit
    恢复方式:
    如果ib_logfile已经写入事务准备,那么在恢复过程中,会依据bin-log中该事务是否存在恢复数据。
    假设:
    1)结束后异常,因没有写入bin-log,从库不会同步这个事务,主库上,重启时,在恢复日志中这个
    事务没有commit,即rollback这个事务.
    2)结束后异常,这会bin-log已经写入,从库会同步这个事务。主库依据恢复日志和bin-log,也正常恢复此事务
    综上描述:bin-log写入完成,主从会正常完成事务;bin-log没有写入,主从库rollback事务;不会出现主从库不一致问题.
    相关参数(全局&静态):
    innodb_log_buffer_size
    innodb_log_file_size
    innodb_log_files_in_group
    innodb_log_group_home_dir
    innodb_flush_log_at_trx_commit
    innodb_log_buffer_size:事务日志缓存区,可设置1M~8M,默认8M,延迟事务日志写入磁盘,
    把事务日志缓存区想象形如"漏斗"状,会不停向磁盘记录缓存的日志记录,而何时写入通过参数
    innodb_flush_log_at_trx_commit控制,稍后解释,启用大的事务日志缓存,可以将完整运行大事
    务日志,暂时存放在事务缓存区中,不必(事务提交前)写入磁盘保存,同时也起到节约磁盘空间占用;
    innodb_log_file_size:控制事务日志ib_logfile的大小,范围5MB~4G;所有事务日志ib_logfile0+
    ib_logfile1+..累加大小不能超过4G,事务日志大,checkpoint会少,节省磁盘IO,但是大的事务日
    志意味着数据库crash时,恢复起来较慢.
    引入问题:修改该参数大小,导致ib_logfile文件的大小和之前存在的文件大小不匹配
    解决方式:在干净关闭数据库情况下,删除ib_logfile,而后重启数据库,会自行创建该文件;
    innodb_log_files_in_group:DB中设置几组事务日志,默认是2;
    innodb_log_group_home_dir:事务日志存放目录,不设置,ib_logfile0...存在在数据文件目录下
    innodb_flush_log_at_trx_commit:控制事务日志何时写盘和刷盘,安全递增:0,2,1
    事务缓存区:log_buffer;
    0:每秒一次事务缓存区刷新到文件系统,同时文件系统到磁盘同步,但是事务提交时,不会触发log_buffer到文件系统同步;
    2:每次事务提交时,会把事务缓存区日志刷新到文件系统中去,且每秒文件系统到磁盘同步;
    1:每次事务提交时刷新到磁盘,最安全;
    适用环境:
    0:磁盘IO能力有限,安全方便较差,无复制或复制延迟可以接受,如日志性业务,mysql损坏丢失1s事务数据;
    2:数据安全性有要求,可以丢失一点事务日志,复制延迟也可以接受,OS损坏时才可能丢失数据;
    1:数据安全性要求非常高,且磁盘IO能力足够支持业务,如充值消费,敏感业务;

  • 相关阅读:
    找出数组中最长的连续数字序列(JavaScript实现)
    从数组中选出和等于固定值的n个数(JavaScript实现)
    比较任意两个JSON串是否相等(比较对象是否相等)JAVA版
    freshcodecolor纯正则实现的在线代码着色(高亮)
    最新QQ强制聊天代码,同时可判断好友关系
    (转)spring异常抛出触发事务回滚策略
    (转)Java回收对象的标记 和 对象的二次标记过程
    (转)调用System.gc没有立即执行的解决方法
    java线程池与五种常用线程池策略使用与解析
    (转)Spring事务管理详解
  • 原文地址:https://www.cnblogs.com/xuan52rock/p/4551830.html
Copyright © 2020-2023  润新知