5分钟了解MySQL5.7的undo log在线缩短新特性51CTO博客 - 亚美娱乐

5分钟了解MySQL5.7的undo log在线缩短新特性51CTO博客

2019年03月04日09时39分42秒 | 作者: 鑫鹏 | 标签: 在线,收回,日志 | 浏览: 1366


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全库备份方法可参阅:

>MySQL5.7的装置方法可参阅:


首要咱们需求调整my.cnf参数

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

首要对一张100万行的表进行整表更新

mysql> show variables like innodb_undo%;
++-+
| Variable_name            | Value         |
++-+
| innodb_undo_directory    | /data/undolog |
| innodb_undo_log_truncate | ON            |
| innodb_undo_logs         | 128           |
| innodb_undo_tablespaces  | 4             |
++-+
4 rows in set (0.00 sec)


mysql> update helei set c1=1;
Query OK, 1000000 rows affected (45.48 sec)
Rows matched: 1000000  Changed: 1000000  Warnings: 0

mysql> update helei set c2=222;
Query OK, 1000000 rows affected (43.25 sec)
Rows matched: 1000000  Changed: 1000000  Warnings: 0

mysql> update helei set c4=heleiheleiheleiheleihel;
Query OK, 1000000 rows affected (10.28 sec)
Rows matched: 1000000  Changed: 1000000  Warnings: 0



②留意undolog的日志巨细

[root@HE3 undolog]# ls -lshrt

total 412M

128M -rw-r- 1 mysql mysql 128M Sep 26 16:56 undo004

 76M -rw-r- 1 mysql mysql  76M Sep 26 16:56 undo003

136M -rw-r- 1 mysql mysql 136M Sep 26 16:56 undo001

 72M -rw-r- 1 mysql mysql  72M Sep 26 16:56 undo002


③error.log日志

2016-09-26T23:51:06.062828Z 0 [Note] InnoDB: Truncating UNDO tablespace with space identifier 1
2016-09-26T23:51:06.159077Z 0 [Note] InnoDB: Completed truncate of UNDO tablespace with space identifier 1
2016-09-26T23:51:06.159101Z 0 [Note] InnoDB: Truncating UNDO tablespace with space identifier 2
2016-09-26T23:51:06.242355Z 0 [Note] InnoDB: Completed truncate of UNDO tablespace with space identifier 2
2016-09-26T23:51:06.242378Z 0 [Note] InnoDB: Truncating UNDO tablespace with space identifier 3
2016-09-26T23:51:06.313036Z 0 [Note] InnoDB: Completed truncate of UNDO tablespace with space identifier 3
2016-09-26T23:51:06.313060Z 0 [Note] InnoDB: Truncating UNDO tablespace with space identifier 4
2016-09-26T23:51:06.403003Z 0 [Note] InnoDB: Completed truncate of UNDO tablespace with space identifier 4


④调查物理文件

[root@HE3 undolog]# ls -lshrt

total 168M

76M -rw-r- 1 mysql mysql 76M Sep 26 16:56 undo003

10M -rw-r- 1 mysql mysql 10M Sep 26 16:56 undo001

10M -rw-r- 1 mysql mysql 10M Sep 26 16:56 undo004

72M -rw-r- 1 mysql mysql 72M Sep 26 16:56 undo002

能够看到超越100M设定值的undo日志现已收回,默以为10M,undo log空间得以开释



Part3:含义

该功用降低了磁盘的使用率,而且能够进步比如Xtrabackup这类物理备份软件的备份速度。




——总结——

MySQL5.7的undo log在线收回功用,比较MySQL5.6愈加灵敏和有用,DBA们再也不必因为ibdata1文件越来越大,导致磁盘空间被占、物理备份越来越慢而头疼了。因为笔者的水平有限,编写时刻也很匆促,文中难免会呈现一些过错或许不精确的当地,不当之处恳请读者批评指正。

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表亚美娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章