图片由 通义万相生成
一 前言
前几天有客户测试使用云数据库的时候提出要禁止mydumper 关闭redo log的操作 (说白了就是导入数据时保持MySQL 实例的redo logging功能), 这才想起 在 MySQL 8.0.21 版本中,开启了一个新特性 “Redo Logging 动态开关”。
在新实例导入数据的场景下,通过关闭 redo logging ,写入操作的事务可以跳过记录 redo日志和 doublewrite buffer,从而加快导入数据的速度。但是也有负面作用付出的代价是短时间牺牲了数据库的ACID保障。
官方文档特别强调该功能不能使用在生产环境,仅仅用于新实例的加速 数据导入,不知道客户之前经历了什么,特别强调支不支持禁用这个功能。
官方文档如是说:
As of MySQL 8.0.21, you can disable redo logging using the
ALTER INSTANCE DISABLE INNODB REDO_LOG statement.
This functionality is intended for loading data into a new MySQL instance.
既然官方说了不建议在生产库使用,我们就学习一下吧,万一以后用的着呢。。
为了支持 redo logging 开关功能 ,MySQL 增加新的 SQL语法:
ALTER INSTANCE {ENABLE|DISABLE } INNODB REDO_LOG;
具备 INNODB_REDO_LOG_ENABLE
权限的用户,才能被允许执行 Redo Logging 动态开关的操作,所以如果需要禁用该操作,可以通过控制用户的权限,云数据库实例应该不会开放该权限,但是自建的数据库的 具有super权限的用户就不好控制了。
新增状态值 Innodb_redo_log_enabled
,用于显示当前 Redo Logging 开关状态。
为用户赋权
GRANT INNODB_REDO_LOG_ENABLE ON . to
the_bad_gay
;
关闭redo logging,检查redo logging是否成功关闭
导数据
重新开启redo logging
2.3 使用限制
写这篇文章的时候,搜集了一下 资料发现, mydumper 紧跟 MySQL 8.0 的技术发展,在新的版本中 增加了新的参数 --disable-redo-log
Disables the REDO_LOG and enables it after, doesn't check initial status.
对于客户的诉求,我估计是有人在生产库使用 mydumper 导入数据时,加上上面的参数,导致某些的故障。
have fun with your MySQL instance。另外看到这里的朋友,打开本期的次条 ,关注 中国MySQL 生态年会在厦门盛大开启,大神云集,干活满满,去不了滴现场也没有关系,可以看看直播。
#MySQL #性能优化 #新特性