TokuDB · 让Hot Backup更完美

很久很久以前,内核君发表了一篇HA方案·TokuDB热备的文章,方法很简单:

 1) SET TOKUDB_CHECKPOINT_LOCK=ON;
 2) 开始拷贝TokuDB的数据文件(不包含日志文件)
 3) FLUSH TABLES WITH READ LOCK;
 4) 记录binlog位置,拷贝最新的binlog和TokuDB的日志文件(*.tokulog)
 5) UNLOCK TABLES;
 6) SET TOKUDB_CHECKPOINT_LOCK=OFF;

这些步骤可以很方便的嵌入到Percona XtraBackup中,与InnoDB一起工作,目前看是一个比较简单可行的方案。

问题来了。
当某个实例的数据量达到TB级,你会发现备库(基于备份)重搭后,启动会灰常灰常慢,因为他们都在recover redo-log,为什么呢?

 1) SET TOKUDB_CHECKPOINT_LOCK=ON;
 2) 开始拷贝TokuDB的数据文件(不包含日志文件)
     -- 由于拷贝TB级的数据非常耗时,redo log持续增加甚至上万个

当TokuDB启动后,扫描和recover这几万个redo log将是灾难性的。

解决这个问题比较简单,我们稍微调整下热备的顺序即可:

 1) SET TOKUDB_CHECKPOINT_LOCK=ON;
 2) FLUSH TABLES WITH READ LOCK;
 3) 记录binlog位置,拷贝最新的binlog和TokuDB的日志文件(*.tokulog)
 4) UNLOCK TABLES;
 5) 开始拷贝TokuDB的数据文件(不包含日志文件)  --移动到这里
 6) SET TOKUDB_CHECKPOINT_LOCK=OFF;

这样在拷贝TokuDB数据文件的时候,就跟redo-log没半毛钱关系了,而且拷贝的redo-log数也大大减少!

本以为这样就可以早点下班回家,但问题还是来。

某实例有几十万个TokuDB文件(分区表文件),使用热备的数据备库重搭后,复制过程中偶尔会出现"Duplicate entry ... for key 'PRIMARY'"错误。

引起这个错误的原因比较深,触发自TokuDB内部机制。

TokuDB每个分区表有数个文件组成(想了解TokuDB数据库文件的请轻戳这里),当分区表非常多的时候,打开的文件句柄数会非常多,受限于open_files_limit配置,TokuDB底层会触发句柄关闭机制,对当前文件进行checkpoint操作(新数据被刷到磁盘且生效)再做close,这样即使拿到checkpoint锁后,还是有数据被写入,就引发了以上问题。

为了解决这个问题,我们在热备的过程中引入一个状态:in_backup = true,防止文件关闭做checkpoint操作,具体的patch见这里:
https://github.com/percona/PerconaFT/pull/331/files

这样TokuDB的热备就比较完美了,整个热备过程中,所有的数据文件均处于一个“一致性”状态,所有的操作都在redo-log里,不再污染数据文件。

时间: 2024-07-30 06:30:39

TokuDB · 让Hot Backup更完美的相关文章

MySQL · TokuDB · 让Hot Backup更完美

前言 很久很久以前,内核君发表了一篇HA方案·TokuDB热备的文章,方法很简单: SET TOKUDB_CHECKPOINT_LOCK=ON; 开始拷贝TokuDB的数据文件(不包含日志文件): FLUSH TABLES WITH READ LOCK; 记录binlog位置,拷贝最新的binlog和TokuDB的日志文件(*.tokulog): UNLOCK TABLES; SET TOKUDB_CHECKPOINT_LOCK=OFF; 这些步骤可以很方便的嵌入到Percona XtraBac

阿里数据库内核月报:2015年12月

# 01 MySQL · 引擎特性 · InnoDB 事务子系统介绍 # 02 PgSQL · 特性介绍 · 全文搜索介绍 # 03 MongoDB · 捉虫动态 · Kill Hang问题排查记录 # 04 MySQL · 参数优化 ·RDS MySQL参数调优最佳实践 # 05 PgSQL · 特性分析 · 备库激活过程分析 # 06 MySQL · TokuDB · 让Hot Backup更完美 # 07 PgSQL · 答疑解惑 · 表膨胀 # 08 MySQL · 特性分析 · Ind

MySQL内核月报 2014.09-TokuDB· HA方案·TokuDB热备

TokuDB企业版提供热备功能(与社区版唯一的区别). 该功能以plugin方式提供,当backup plugin加载后,它会拦截所有的文件操作(比如文件读写/目录操作等),从而实现在备份的过程中增量同步,具体原理请看: http://www.tokutek.com/2013/09/tokudb-hot-backup-part-1/ http://www.tokutek.com/2013/09/tokudb-hot-backup-part-2/  社区版如何实现热备呢? 官方推荐的方式是mylv

TokuDB · Cachetable 的工作线程和线程池

介绍 TokuDB也有类似InnoDB的buffer pool叫做cachetable,存储数据节点(包括叶节点和中间节点)和rollback段,本文中为了表达简单,叶节点,中间节点和rollback段统称数据节点.Cachetable是全局唯一的,它与MySQL实例存在一一对应的关系.TokuDB没有采用常见的BTREE(BTREE+,BTREE*)表示索引,而是采用Fractal Tree,简称FT.FT跟BTREE+类似,维护了一个树形的有序结构,中间节点存储pivot(TokuDB的中间

MySQL · TokuDB · Cachetable 的工作线程和线程池

介绍 TokuDB也有类似InnoDB的buffer pool叫做cachetable,存储数据节点(包括叶节点和中间节点)和rollback段,本文中为了表达简单,叶节点,中间节点和rollback段统称数据节点.Cachetable是全局唯一的,它与MySQL实例存在一一对应的关系.TokuDB没有采用常见的BTREE(BTREE+,BTREE*)表示索引,而是采用Fractal Tree,简称FT.FT跟BTREE+类似,维护了一个树形的有序结构,中间节点存储pivot(TokuDB的中间

安装Windows Server Backup功能

接下来呢,我们继续前面的内容,为前面内容介绍时提到的DC-01及DC-02安装Windows Server Backup功能,这个可是必要的哦,如果未安装,在后边做保护组时将会报错哦. 安装Windows Server Backup功能只需要执行如下操作即可: 更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/OS/server/

MySQL内核月报 2014.08-TokuDB·社区八卦·TokuDB团队

第一期先介绍下TokuDB团队吧. TokuDB自从开源后(更赞的是开源了所有的commits),逐渐被大家所熟悉,MariaDB 5.5系列和Percona Server 5.6的GA版本中,都以plugin的方式集成. 3位(Tokutek)创始人: Michael A. Bender , Martín Farach-Colton , Bradley C. Kuszmaul  2012年他们合发了一篇208页的pdf[Data Structures and Algorithms for Bi

如何让自己的反向链接做的更完美

大家好,今天为大家讲讲如何让自己的反向链接做的更完美?生活中经常会听到一句话:"只要你努力了就会成功",如果这句话运用到seo中来,那是不对的,因为做seo即使你努力了也不一定能成功,你关键词不一定能排上去,比如:我们做了10000个反向链接,如果我们的反向链接真实有效的只有1%的话,那么我们反向链接有效的就只有100个,其实很多排名很好大型的网站,他们的反向链接都达不到30%,也就是说平均没做100个链接,有效的才30个,那么下面就来说说如何识别这些有效的链接,以尽量减少我们的宝贵时

如何利用Windows Server Backup功能备份活动目录

安装 Windows Server Backup 工具 1)登录DC-01: 2) 单击"开始",然后单击"服务器管理器". 3) 在"功能摘要"中,单击"添加功能". 4) 在功能列表中,双击"Windows Server Backup 功能",然后依次单击 Windows Server Backup."命令行工具"和"下一步". 5) 在"确认安装&qu