TokuDB· HA方案·TokuDB热备

最后更新于:2022-04-01 10:43:49

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-1/)   [http://www.tokutek.com/2013/09/tokudb-hot-backup-part-2/](http://www.tokutek.com/2013/09/tokudb-hot-backup-part-2/)  社区版如何实现热备呢? 官方推荐的方式是mylvmbackup,不过可能会有一些"坑"。 Percona的Vadim同学写过一篇[TokuDB tips](http://www.percona.com/blog/2014/07/15/tokudb-tips-mysql-backups/),介绍了Percona在使用mylvmbackup热备TokuDB中遇到的"坑"及解决方法: 不能只备份TokuDB自身的数据以及日志文件,还要备份最新的binlog,否则启动的时候可能就"跪"了! 还有一个比较geek的方式,直接基于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; ~~~ "大杀器"就是[TOKUDB_CHECKPOINT_LOCK](https://github.com/Tokutek/tokudb-engine/wiki/Checkpoint-Lock),它的作用是允许拿到checkpoint锁,此时TokuDB的checkpoint会一直block到该锁释放(执行前要把tokudb_checkpoint_on_flush_logs关掉),目的是防止拷贝TokuDB数据文件的过程中做sharp checkpoint(注意:由于不做checkpoint,TokuDB的日志文件会逐渐增多),从而导致数据文件内部不一致(已拷贝的文件被修改)。 整个热备过程中,只有步骤4是阻塞写的,但耗时较短。
';