mysql undo log管理

发布时间 2023-04-23 18:56:08作者: zibuyu886

MySQL undo log 管理

在InnoDB存储引擎中,undo log是采用分段(segment)的方式进行存储的。rollback segment称为回滚段,每个回滚段中有1024个undo log segment。在MySQL5.5之前,只支持1个rollback segment,也就是只能记录1024个undo操作。在MySQL5.5之后,可以支持128个rollback segment,分别从resg slot0 - resg slot127,每一个resg slot,也就是每一个回滚段,内部由1024个undo segment 组成,即总共可以记录128 * 1024个undo操作。

不仅存放着数据更新前的记录,还记录着RowID、事务ID、回滚指针。其中事务ID每次递增,回滚指针第一次如果是insert语句的话,回滚指针为NULL,第二次update之后的undo log的回滚指针就会指向刚刚那一条undo log日志,依次类推,就会形成一条undo log的回滚链,方便找到该条记录的历史版本。

在MySQL5.6中开始支持把undo log分离到独立的表空间,并放到单独的文件目录下;这给我们部署不同IO类型的文件位置带来便利,对于并发写入型负载,我们可以把undo文件部署到单独的高速存储设备上.

MySQL从8.0开始undo 表空间管理已经发生了改变:

在5.7版本中一旦MySQL初始化以后,就不能再改变undo表空间了,所以我们在5.7版本中都是在初始化的时候对undo表空间进行一些设置,类似这样:在my.cnf文件中加入innodb_undo_directory= /data/mysql/undologs 和 innodb_undo_tablespaces=5 这两个参数,之所以这么改,是因为我们想把undo表空单独从系统表空间idbdata中分离出来,这样就可以消除因undo的问题造成对ibdata系统表空间的影响,所以上面的参数配置在5.7版本中是我们对MySQL初始化做的一个常规的最佳实践设置,如果不设置,那么在5.7版本中,undo还是默认会放在ibdata中

从MySQL8.0版本开始,MySQL默认对undo进行了分离操作,也就是说,不需要在初始化中手动配置参数,默认会在datadir目录下生成两个10兆大小的undo表空间文件undo_001 和 undo_002 并且可以在线的增加和删除undo表空间文件进行动态扩容和收缩,这在之前的版本都是不被准许的。

8.0在线增加undo tablespace

  • undo tablespace 文件名必须以.ibu结尾。
  • tablespace名字不能以innodb_开头。
mysql> create undo tablespace innodb_undo_003  ADD DATAFILE 'undo_003';
ERROR 3119 (42000): InnoDB: Tablespace names starting with `innodb_` are reserved.
mysql> create undo tablespace undo_003  ADD DATAFILE 'undo_003';
ERROR 3121 (HY000): The ADD DATAFILE filepath must end with '.ibu'.
mysql> create undo tablespace undo_003  ADD DATAFILE 'undo_003.ibu';
Query OK, 0 rows affected (0.49 sec)

8.0在线删除表空间

ALTER UNDO TABLESPACE tablespace_name SET INACTIVE;

DROP UNDO TABLESPACE tablespace_name;

mysql> alter undo tablespace undo_003 set inactive;
Query OK, 0 rows affected (0.00 sec)

mysql> drop undo tablespace undo_003;
Query OK, 0 rows affected (0.01 sec)

8.0 查看表空间的状态

5.7是没有这个视图的。

mysql> SELECT NAME, STATE FROM INFORMATION_SCHEMA.INNODB_TABLESPACES;
+---------------------------------------------+--------+
| NAME                                        | STATE  |
+---------------------------------------------+--------+
| mysql                                       | normal |
| innodb_temporary                            | normal |
| innodb_undo_001                             | active |
| innodb_undo_002                             | active |
| sys/sys_config                              | normal |
| flinktest/products                          | normal |
| eo_oscomment/comment_like                   | normal |
| eo_oscomment/comment_content                | normal |
| eo_oscomment/comment_relation               | normal |
| eo_oscomment/comment_user_set               | normal |
| eo_oslms/lms_feature_guid                   | normal |
| eo_oslms/lms_grade_display                  | normal |
| eo_oslms/learning_materials                 | normal |
| eo_oslms/lms_summary_score                  | normal |
| eo_oslms/lms_activity_student_ability_score | normal |
| eo_oslms/lms_activity_do                    | normal |
| eo_oslms/lms_activity                       | normal |
| eo_oslms/lms_activity_ability               | normal |
| eo_oslms/lms_ability_summary_score          | normal |
| eo_oslms/learning_materials_students        | normal |
| eo_oslms/lms_system_grade_rule              | normal |
| eo_oslms/lms_activity_extension             | normal |
| eo_oslms/lms_ability_group                  | normal |
| eo_oslms/lms_activity_student               | normal |
| eo_oslms/lms_teacherIn_import_record        | normal |
| eo_oslms/lms_unit                           | normal |
| eo_oslms/lms_unit_student_summary           | normal |
| eo_oslms/record_class_student_videos        | normal |
| eo_oslms/record_class                       | normal |
| eo_oslms/lms_activity_teacher               | normal |
| eo_oslms/lms_ability                        | normal |
| eo_oslms/record_class_students              | normal |
| eo_oscomment/comment_group                  | normal |
| eo_oslms/lms_evaluation_setting             | normal |
| eo_oslms/discuss                            | normal |
| eo_oslms/discuss_students                   | normal |
| ptest/record_class_students                 | normal |
| ptest/_eeo_course_class_del                 | normal |
| ptest/eeo_course_class                      | normal |
+---------------------------------------------+--------+