技术分享 | MySQL InnoDB Redo Log Archiving归档功能

原创
2024/11/21 15:00
阅读数 47

本文为墨天轮数据库管理服务团队原创内容,如需转载请联系小墨(VX:modb666)并注明来源。


作者:崔虎龙

墨天轮数据库管理服务MySQL技术顾问

长期服务于金融游戏、物流等行业数据中心。擅长MySQL、Redis、MongoDB高可用设计和运维故障处理、备份恢复、升级迁移、性能优化。

数据库处理机制中,Redo日志用于确保数据持久性与一致性,并且提高数据库恢复能力。在MySQL中Redo文件是循环使用的,当Redo日志填满时,会采取覆盖写入。当发生故障,需要用到Redo进行恢复时,因为缺失覆盖掉的Redo日志,无法恢复。如存在归档Redo日志,就可以通过归档Redo日志进行恢复。按照官方说明,归档Redo目前配合mysqlbackup(企业版备份工具)结合使用。备份操作期间,Redo写入时间比备份时间大时,Redo日志归档功能将启动后台线将Redo日志记录顺序写入归档文件 中,来解决此备份失败问题。

Redo归档设置

启用Redo日志归档需要为innodb_redo_log_archive_dirs参数设置值。

1.设置和查看方式


   
   
   
#my.cnf配置:
innodb_redo_log_archive_dirs=arch1:/redo_archive/arch1;arch2:/redo_archive/arch2

#命令行设置:
SET GLOBAL innodb_redo_log_archive_dirs=arch1:/redo_archive/arch1;arch2:/redo_archive/arch2

#查看设置:
mysql > show variables like '%redo%';
+------------------------------+--------------------------------------------+
| Variable_name | Value |
+------------------------------+--------------------------------------------+
| innodb_redo_log_archive_dirs | arch1:/redo_archive/arch1;
arch2:/redo_archive/arch2 |
| innodb_redo_log_capacity | 104857600 |
| innodb_redo_log_encrypt | OFF |
+------------------------------+--------------------------------------------+
3 rows in set (0.0047 sec)

2.Redo归档设置和使用当中注意事项

  • 目录必须存在:

   
   
   
ERROR 3846 (HY000): Redo log archive directory 'redo_archive' is accessible to all OS users
  • 目录不能所有访问:


   
   
   
ERROR 3846 (HY000): Redo log archive directory '/redo_archive/arch1' is accessible to all OS users

- 文件目录权限必须需要700,权限设置如下:
```language
chmod 700 /redo_archiv/arch1 /redo_archiv/arch2
  • 目录不能是由datadir,innodb_data_home_dir等,也不能是这些目录的父目录或子目录:


   
   
   
ERROR 3845 (HY000): Redo log archive directory 'directory_path1' is in, under, or over server directory 'datadir' - '/path/to/data_directory'
  • mysqlbackup备份时,无法使用root账号:


   
   
   
WARNING: MySQL query 'DO innodb_redo_log_archive_start('arch1','20241113');': 3847, Cannot create redo log archive file '/redo_archive/arch1/17313911639993745/archive.442f4c85-9825-11ef-8da0-00163e23e2cc.000001.log' (OS errno: 13 - Permission denied)

3.对于归档Redo日志监控

可以通过采集器配置项进行查看。默认是打开的。
  • 归档Redo配置项如下所示:

   
   
   
mysql> SELECT NAME,ENABLED,TIMED,PROPERTIES
FROM performance_schema.setup_instruments where name like '%redo%';
+------------------------------------------------+---------+-------+------------+
| NAME | ENABLED | TIMED | PROPERTIES |
+------------------------------------------------+---------+-------+------------+
| wait/io/file/innodb/meb::redo_log_archive_file | YES | YES | |
| stage/innodb/clone (redo copy) | YES | YES | progress |
+------------------------------------------------+---------+-------+------------+

  • 是否运行Redo归档,可通过系统threads表进行查看:


   
   
   
mysql> SELECT thread_id, name, type
FROM performance_schema.threads WHERE name like '%redo_log_archive%';
+-----------+-----------------------------------------------------+------------+
| thread_id | name | type |
+-----------+-----------------------------------------------------+------------+
| 59 | thread/innodb/meb::redo_log_archive_consumer_thread | BACKGROUND |
+-----------+-----------------------------------------------------+------------+
1 row in set (0.00 sec)

  • Redo归档日志内容file_instances表进行查看:


   
   
   
mysql> SELECT * FROM performance_schema.file_instances
WHERE event_name like '%::redo_log_archive_file'\G
*************************** 1. row ***************************
FILE_NAME: /redo_archive/arch1/17313914361335647/archive.442f4c85-9825-11ef-8da0-00163e23e2cc.000001.log
EVENT_NAME: wait/io/file/innodb/meb::redo_log_archive_file
OPEN_COUNT: 1
*************************** 2. row ***************************
FILE_NAME: /redo_archive/arch1/17313915135239748/archive.442f4c85-9825-11ef-8da0-00163e23e2cc.000001.log
EVENT_NAME: wait/io/file/innodb/meb::redo_log_archive_file
OPEN_COUNT: 1
2 rows in set (0.00 sec)

按照mysqlbackup 验证Redo功能验证

通过mysqlbakcup和general日志查看具体执行的命令:

   
   
   
shell> mysqlbackup --defaults-file=/etc/my9.0.cnf -uroot -p******
--backup-dir=/opt/backup1/backup-tmp backup --number-of-buffers=100M

mysqlbackup默认检查Redo情况,是否开始,大小,创建归档日志:

general日志启动归档Redo日志:

手动归档

1.手动创建Redo归档根目录:

   
   
   
[mysql@arch1]$ mkdir -p 20241113
drwxrwxr-x 2 mysql mysql 6 Nov 13 14:07 20241113

2.手动赋予权限720


   
   
   
[mysql@arch1]$ chmod 720 20241113/
[mysql@arch1]$ ll
total 0
drwx-w---- 2 mysql mysql 6 Nov 13 14:07 20241113

3.启动归档Redo

通过调用innodb_redo_log_archive_start()函数激活重做日志归档。传递’label’名和子目录名需要跟上面【20241113】对齐:

   
   
   
mysql> SELECT innodb_redo_log_archive_start('arch1','20241113');
+---------------------------------------------------+
| innodb_redo_log_archive_start('arch1','20241113') |
+---------------------------------------------------+
| 0 |
+---------------------------------------------------+
1 row in set (0.05 sec)
验证Redo归档是否生效:
执行操作目前设置redo大小的大事务。 查看归档Redo生成的文件。 大小在变化。

   
   
   
shell$ ll
total 4
-r--r----- 1 mysql mysql 4096 Nov 13 14:12 archive.442f4c85-9825-11ef-8da0-00163e23e2cc.000001.log
shell$ ll
total 20
-r--r----- 1 mysql mysql 20480 Nov 13 14:17 archive.442f4c85-9825-11ef-8da0-00163e23e2cc.000001.log
shell$ ll
total 16384
-r--r----- 1 mysql mysql 11014144 Nov 13 14:17 archive.442f4c85-9825-11ef-8da0-00163e23e2cc.000001.log
shell$ ll
total 16384
-r--r----- 1 mysql mysql 11018240 Nov 13 14:18 archive.442f4c85-9825-11ef-8da0-00163e23e2cc.000001.log
。。。

通过Linux ps线程显示,归档Redo采取后台使用ib_meb_rl线程


   
   
   
[root@schouse bin]# ps -Lp 1875075 -o tid,cmd,comm
TID CMD COMMAND

。。。
1899304 /opt/idc/mysql9.0/bin/mysql ib_meb_rl
4.停止归档Redo
通过调用InnoDB_redo_log_archive_stop()函数来停用重做日志归档。

   
   
   
mysql> SELECT innodb_redo_log_archive_stop();
+--------------------------------+
| innodb_redo_log_archive_stop() |
+--------------------------------+
| 0 |
+--------------------------------+
之后就可以利用归档Redo做数据恢复之用。不过,相应的官方接口或工具还没开放出来。只能拭目以待。

总 结

归档Redo功能是MySQL 8.0.17版本发布的,最新版本目前已经到8.0.40,9.1版本, 因为没有对外开放归档文件使用功能,无法在实际环境中使用。
归档Redo功能是创建新文件顺序写入,因此整体影响很小。目前只有MySQL企业版备份工具具备归档Redo的支持。希望官方开放出使用归档Redo的接口,也希望Percona Xtrabackup支持,这样MySQL又多了一个数据恢复的手段。


THE END

墨天轮从乐知乐享的数据库技术社区蓄势出发,全面升级,提供多类型数据库管理服务。墨天轮数据库管理服务旨在为用户构建信赖可托付的数据库环境,并为数据库厂商提供中立的生态支持。

服务官网:https://www.modb.pro/service

点击进入作者个人主页

本文分享自微信公众号 - 墨天轮(enmocs)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部