新特性速递 | InnoDB redo log archiving(归档)

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDSClaw,2核4GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 新特性速递 | InnoDB redo log archiving(归档)

导读

MySQL 8.0.17开始支持的redo log归档能干嘛用呢,好吃吗

今天,MySQL 8.0.17发布了,看了下release note,发现果真如之前预期的那样,恢复了redo log归档(redo log archiving)功能。之所以说是“恢复”,那是因为在InnoDB非常古老的版本(MySQL 4.0.6之前的版本)才存在,之后就取消了,当时还支持redo log mirror,老一点的MySQL DBA可能都还有印象,不过这两个功能当时没什么卵用,所以取消了。

此次,InnoDB重启redo log归档功能,按照开发团队的说法,主要是为了解决备份一致性的问题。文档里是这么写的:

Backup utilities that copy redo log records may sometimes fail to keep pace
with redo log generation while a backup operation is in progress, resulting
in lost redo log records due to those records being overwritten. The redo
log archiving feature addresses this issue by sequentially writing redo log
records to an archive file. Backup utilities can copy redo log records from
the archive file as necessary, thereby avoiding the potential loss of data.

简言之,就是备份速度跟不上redo log生成的速度,结果导致redo log被覆盖了,然后备份就无法保证一致性。有了redo log归档,就可以在备份启动时同步启动redo log归档,备份结束时同步停止redo log归档,这样就可以避免这个问题了,备份结束后可以利用这期间生成的redo log进行数据恢复。

想要启用redo log归档功能,只需设置innodb_redo_log_archive_dirs选项即可,该选项可支持在线动态修改,例如:

[root@yejr.me]> SET GLOBAL innodb_redo_log_archive_dirs = "redolog-archiving-for-backup:/data/mysql8-redologs/";

指定 /data/mysql8-redologs/ 目录作为redo log归档存放路径,并且指定label为 "redolog-archiving-for-backup",也就是这是专用于备份的redo log归档存放目录。

我们还可以指定另一个目录用于未来基于redo log的物理复制用途(我瞎猜的,可能没那么快实现)。

[root@yejr.me]> SET GLOBAL innodb_redo_log_archive_dirs = "redolog-archiving-for-backup:/data/mysql8-redologs1/;redolog-archiving-for-repl:/data/mysql8-redologs2";

选项innodb_redo_log_archive_dirs可以指定多个目录作为归档redo log存放位置。不过这个选项有几个限制:

  • 该目录必须事先创建好
  • 该目录其他用户不可访问,最好设置成 0700 权限模式
  • 该目录不能是datadir、innodb_data_home_dir、innodb_directories、innodb_log_group_home_dir、innodb_temp_tablespaces_dir、innodb_tmpdir、innodb_undo_directory、secure_file_priv这些目录的父目录或子目录。简言之,归档目录不要和mysqld的运行目录有任何重合

设置完后,就可以开始进行redo log归档了。


第一个参数是我们之前定义过的一个label,第二个参数是该label对应目录下的子目录,也就是 "/data/mysql8-redologs/20190722"。我们在相应目录下就可以看到这样的redo log归档文件了:

[root@yejr.me]> DO innodb_redo_log_archive_start("redolog-archiving-for-backup","20190722");
Query OK, 0 rows affected (0.02 sec)

文件名中常常的那串字符,就是本实例的UUID。此时文件的大小是0字节。

我们在另一个session发动一个sysbench oltp测试。执行完sysbench测试结束后,我们停止redo log归档工作:

[root@yejr.me]> ls -l /data/mysql8-redologs/20190722
-r--r-----. 1 mysql mysql 0 Jul 22 20:54 archive.f0ff5743-97be-11e9-a5d6-0050568bba82.000001.log

我分别记录了测试前后redo log LSN的变化如下:

# 测试前的LSN
LOG
---
Log sequence number          27938813989
...
# 测试后的LSN
LOG
---
Log sequence number          27945024531

两次LSN的差值是:6210542 字节。

然后我们查看redo log归档文件大小是多少:

[root@yejr.me]> ls -l /data/mysql8-redologs/20190722
-r--r-----. 1 mysql mysql 6213632 Jul 22 21:19 archive.f0ff5743-97be-11e9-a5d6-0050568bba82.000001.log

可以看到文件大小是 6213632 字节,和上面的 6210542 字节只相差了 3090 字节,和本次测试产生的redo log日志大小相当。后面我们就可以利用这个redo log做数据恢复之用了(不过,相应的官方工具还没开发出来,拭目以待吧)。

一般情况下,redo log归档对性能的影响比较小(顺序写入),在大量高并发事务的场景下,可能对性能影响会稍大点,不过也不用太担心,以后有机会我再做个性能对比测试吧。

发车前,月月提醒我,MySQL企业版的备份工具已经提前支持redo归档了,希望Percona Xtrabackup也能尽快支持哈。

最后,再多说一句。大家也能注意到,MySQL 8.0版本之后,和ORACLE是越来越像了。有ORACLE这个最成功的商业数据库大哥在前面,我们完全有理由不用担心MySQL的未来。

Enjoy MySQL 8.0 :)

延伸阅读

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
7月前
|
存储 关系型数据库 MySQL
介绍MySQL的InnoDB引擎特性
总结而言 , Inno DB 引搞 是 MySQL 中 高 性 能 , 高 可靠 的 存 储选项 , 宽泛 应用于要求强 复杂交易处理场景 。
295 15
|
数据库 文件存储 数据安全/隐私保护
YashanDB redo日志文件管理
YashanDB的redo日志文件用于记录数据库物理日志,支持宕机重演和主备复制。 redo日志有4种状态:NEW(新创建)、CURRENT(当前写入)、ACTIVE(未归档或未写盘)和INACTIVE(可复用)。可通过V$LOGFILE视图或直接查看$YASDB_DATA/dbfiles目录来管理redo日志。此外,支持添加、切换和删除redo日志以优化性能或应对磁盘故障等情况,但需注意仅能删除INACTIVE或NEW状态的日志以确保数据安全。
|
SQL 存储 关系型数据库
简单聊聊MySQL的三大日志(Redo Log、Binlog和Undo Log)各有什么区别
在MySQL数据库管理中,理解Redo Log(重做日志)、Binlog(二进制日志)和Undo Log(回滚日志)至关重要。Redo Log确保数据持久性和崩溃恢复;Binlog用于主从复制和数据恢复,记录逻辑操作;Undo Log支持事务的原子性和隔离性,实现回滚与MVCC。三者协同工作,保障事务ACID特性。文章还详细解析了日志写入流程及可能的异常情况,帮助深入理解数据库日志机制。
1649 0
|
存储 SQL 关系型数据库
mysql的undo log、redo log、bin log、buffer pool
MySQL的undo log、redo log、bin log和buffer pool是确保数据库高效、安全和可靠运行的关键组件。理解这些组件的工作原理和作用,对于优化数据库性能和保障数据安全具有重要意义。通过适当的配置和优化,可以显著提升MySQL的运行效率和数据可靠性。
233 4
|
存储 SQL 关系型数据库
mysql的undo log、redo log、bin log、buffer pool
MySQL的undo log、redo log、bin log和buffer pool是确保数据库高效、安全和可靠运行的关键组件。理解这些组件的工作原理和作用,对于优化数据库性能和保障数据安全具有重要意义。通过适当的配置和优化,可以显著提升MySQL的运行效率和数据可靠性。
321 16
|
11月前
|
监控 容灾 算法
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
1071 54
|
监控 Java 应用服务中间件
Tomcat log日志解析
理解和解析Tomcat日志文件对于诊断和解决Web应用中的问题至关重要。通过分析 `catalina.out`、`localhost.log`、`localhost_access_log.*.txt`、`manager.log`和 `host-manager.log`等日志文件,可以快速定位和解决问题,确保Tomcat服务器的稳定运行。掌握这些日志解析技巧,可以显著提高运维和开发效率。
1478 13
|
缓存 Java 编译器
|
存储 缓存 关系型数据库
图解MySQL【日志】——Redo Log
Redo Log(重做日志)是数据库中用于记录数据页修改的物理日志,确保事务的持久性和一致性。其主要作用包括崩溃恢复、提高性能和保证事务一致性。Redo Log 通过先写日志的方式,在内存中缓存修改操作,并在适当时候刷入磁盘,减少随机写入带来的性能损耗。WAL(Write-Ahead Logging)技术的核心思想是先将修改操作记录到日志文件中,再择机写入磁盘,从而实现高效且安全的数据持久化。Redo Log 的持久化过程涉及 Redo Log Buffer 和不同刷盘时机的控制参数(如 `innodb_flush_log_at_trx_commit`),以平衡性能与数据安全性。
819 5
图解MySQL【日志】——Redo Log
下一篇
开通oss服务