前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL8.0 redo log归档功能

MySQL8.0 redo log归档功能

作者头像
AsiaYe
发布2020-07-16 10:07:19
1.1K0
发布2020-07-16 10:07:19
举报
文章被收录于专栏:DBA随笔DBA随笔

我们知道,在MySQL中,redo log是一个文件组,一般是3个文件,循环写入,写满的时候会做redo log层面的checkpoint,然后覆盖之前的redo log;而binlog是有归档功能的,每个binlog写满之后,都会重新开启下一个binlog开始写入,这也是为什么可以使用binlog来进行数据恢复的一个原因,就是因为它的归档功能。

MySQL8.0.17中引入了redo log的归档功能,如果我们开启归档功能,redo log会持续不断的生成,而不会覆盖掉之前的redo log。这个功能主要在哪种场景下应用呢?

试想这样一种情况,在对一个高并发的数据库进行备份的时候,备份速度很慢而redo log生成的速度很快,备份的速度跟不上redo log的生成速度,导致redo log被覆盖了,此时备份的一致性就无法得到保证了。有了redo log的归档功能,就可以在备份启动的时候同步启动redo log 归档,而在备份结束的时候同步停止redo log归档,这样就可以避免这个备份的问题了。备份结束之后,依旧可以利用这个期间产生的redo log进行数据恢复。

redo log归档功能的启用方法是设置innodb_redo_log_archive_dirs参数,该参数支持动态修改,可以使用set global + 参数的方法进行修改。

代码语言:javascript
复制
mysql--dba_admin@127.0.0.1:(none) 23:32:01>>show variables like '%archive%';
+------------------------------+-------+
| Variable_name                | Value |
+------------------------------+-------+
| innodb_redo_log_archive_dirs |       |
+------------------------------+-------+
1 row in set (0.00 sec)

redo log的归档路径有如下限制:

1、目录必须存在,而且其他用户不可访问,最好是700的权限模式

2、该用户目录不能和datadir、innodb_tmpdir、以及其他mysqld的运行目录重合,需要单独创建

开启redo log的归档的过程:

代码语言:javascript
复制
# 动态设置参数
mysql >>set global innodb_redo_log_archive_dirs='tmp_redo_dir:
/tmp' ;
Query OK, 0 rows affected (0.00 sec)

# 创建redo log文件组,发现权限不够,需要INNODB_REDO_LOG_ARCHIVE 权限
mysql >>do innodb_redo_log_archive_start('tmp_redo_dir','2020071
3');
ERROR 1227 (42000): Access denied; you need (at least one of) the INNODB_REDO_LOG_ARCHIVE privilege(s) for this operation

# 不创建目录的情况下,MySQL提示目录不存在
mysql >>do innodb_redo_log_archive_start('tmp_redo_dir','20200713'); 
ERROR 3844 (HY000): Redo log archive directory '/tmp/20200713' does not exist or is not a directory

# 创建目录,MySQL发现目录权限过大,对所有user可见
mysql >>system mkdir /tmp/20200713
mysql >>do innodb_redo_log_archive_start('tmp_redo_dir','20200713')
;
ERROR 3846 (HY000): Redo log archive directory '/tmp/20200713' is accessible to all OS users

# 修改权限为mysql这个用户,并修改用户属性为700
sudo chown -R mysql.mysql /tmp/20200713
mysql >>system chmod 700 /tmp/20200713
mysql >>do innodb_redo_log_archive_start('tmp_redo_dir','20200713') ;
Query OK, 0 rows affected (0.07 sec)

# 查看生成的redo log文件
mysql >>system sudo ls -l /tmp/20200713
total 0
-r--r----- 1 mysql mysql 0 Jul 13 23:42 archive.ff33ed53-94cc-11ea-9a62-005056b71124.000001.log

其中参数tmp_redo_dir表示路径,20200713表示子路径。

一般情况下,redo log的归档功能,对性能的影响比较小,在高并发事务场景下,可能对性能的影响会有点大。具体数据有待测试。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档