本文为墨天轮数据库管理服务团队原创内容,如需转载请联系小墨(VX:modb666)并注明来源。
作者:崔虎龙
墨天轮数据库管理服务MySQL技术顾问
长期服务于金融游戏、物流等行业数据中心。擅长MySQL、Redis、MongoDB高可用设计和运维故障处理、备份恢复、升级迁移、性能优化。
数据库处理机制中,Redo日志用于确保数据持久性与一致性,并且提高数据库恢复能力。在MySQL中Redo文件是循环使用的,当Redo日志填满时,会采取覆盖写入。当发生故障,需要用到Redo进行恢复时,因为缺失覆盖掉的Redo日志,无法恢复。如存在归档Redo日志,就可以通过归档Redo日志进行恢复。按照官方说明,归档Redo目前配合mysqlbackup(企业版备份工具)结合使用。备份操作期间,Redo写入时间比备份时间大时,Redo日志归档功能将启动后台线将Redo日志记录顺序写入归档文件 中,来解决此备份失败问题。
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功能验证
shell> mysqlbackup --defaults-file=/etc/my9.0.cnf -uroot -p******
--backup-dir=/opt/backup1/backup-tmp backup --number-of-buffers=100M
mysqlbackup默认检查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
mysql> SELECT innodb_redo_log_archive_start('arch1','20241113');
+---------------------------------------------------+
| innodb_redo_log_archive_start('arch1','20241113') |
+---------------------------------------------------+
| 0 |
+---------------------------------------------------+
1 row in set (0.05 sec)
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
mysql> SELECT innodb_redo_log_archive_stop();
+--------------------------------+
| innodb_redo_log_archive_stop() |
+--------------------------------+
| 0 |
+--------------------------------+
THE END

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

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