background image
5 分钟了解 MySQL5.7 的 undo log 在线收缩新特性
Part1:写在最前
在 MysQL5.6 版本中,可以把 undo log 回滚日志分离到一个单独的表空间里;其缺点是不
能回收空间大小,until MysQL5.7,but MariadDB10.1 暂不支持。
本文介绍并演示 MysQL5.7 是如何在线收缩 undo log 的。
undo log 日志是保存在共享表空间 ibdata1 文件中的,随着数据库的运行时间的不断增长,
ibdata1 文件会越来越大,在以往的 MySQL 数据库版本中,如果我们想要回收 ibdata1 文件
所占空间,会非常的复杂和困难,必须先将 mysqldump -A 全库导出,然后删掉 data 目录,
再重新对数据库进行初始化,最后导入全库备份,方可实现 ibdata1 的回收。
MySQL 全库备份方式可参考:
http://suifu.blog.51cto.com/9167728/1758022
MySQL5.7 的安装方式可参考:
http://suifu.blog.51cto.com/9167728/1855415
首先我们需要调整 my.cnf 参数
1
2
3
4
5
6
innodb_undo_directory=/data/undolog
innodb_undo_tablespaces=4
innodb_undo_logs=128
innodb_max_undo_log_size=1G
innodb_purge_rseg_truncate_frequency
innodb_undo_log_truncate=1
Warning:警告
其中 innodb_undo_directory 参数要在数据库初始化时就需要写入 my.cnf,否则会报如下
错误:
Expected to open 4 undo tablespaces but was able to find only 0 undo tablespaces.
Set the innodb_undo_tablespaces parameter to the correct value and retry. Suggested
value is 0
Part2:MySQL5.7 在线回收 undolog