mysql undo001_Mysql5.7 在线收缩undo log

undo log日志保存在共享表空间ibdata1文件中,是MVCC多版本控制的核心模块,一直以来undo log都存储在ibdata系统表空间中,随着数据库的运行时间增长,ibdata1文件会越来越大,在MySQL5.7版本之前的数据库中,如果我们想要回收ibdata1文件所占空间,是比较复杂的,必须先将mysqldump -A全库导出,然后删掉data目录,再重新对数据库进行初始化,最后导入全库备份,方可实现ibdata1的回收。

直到MySQL5.7 ,才支持在线收缩,收缩后变成10M。

如何在线回收,主要是以下几个参数,记住:初始化的时候,或docker容器创建的时候就指定,在my.cnf配置文件中加上如下:

##################### undo log在线收缩新特性######################################

#用于设定创建的undo表空间的个数,在mysql_install_db时初始化后,就再也不能被改动了;默认值为0,

#表示不独立设置undo的tablespace,默认记录到ibdata中;否则,则在undo目录下创建这么多个undo文件,

#例如假定设置该值为4,那么就会创建命名为undo001~undo004的undo tablespace文件,每个文件的默认大小为10M。

#修改该值会导致Innodb无法完成初始化,数据库无法启动,但是另两个参数可以修改

innodb_undo_tablespaces=4

#undo回滚段的数量, 至少大于等于35,默认128

innodb_undo_logs=128

#当超过这个阀值(默认是1G),会触发truncate回收(收缩)动作,truncate后空间缩小到10M

innodb_max_undo_log_size=1G

#是否开启在线回收(收缩)undo log日志文件,支持动态设置

innodb_undo_log_truncate = 1

#undo 表空间一般不能直接truncate,需要在所有回滚段释放完后,才能truncate,

#purge system每128次释放一次回滚段,可以通过参数

#innodb_purge_rseg_truncate_frequency 来加速释放回滚段,默认128是最大值

innodb_purge_rseg_truncate_frequency=128

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值