mysql的tokudb引擎可以解决数据库占用硬盘空间大的问题,虽然舍弃了部分的读写应能,但因为我们的myql磁盘都是ssd的,所以这都不是事。 tokudb有几个压缩比率,我们这边2.8个T的innodb,换用tokudb压缩db后才350G左右。
文章写的不是太严谨,后期会不断更新修改补充该文章,标注下原文地址:
这边就简单说下,tokudb引擎的主从复制是怎么建立的? 在做mysql tokudb主从复制之前,我还以为会有些麻烦,真正做了后发现和innodb的做法是一样一样的。 因为都是通过binlog来进行主从传输,而binlog就是复制了被执行的sql语句。
Tokudb做主从不能像innodb那样,可以选择innobackupex Xtrabackup备份。但是Tokudb就没有这种热备份,并且记录pos file偏移量的工具 percona的企业版貌似是有这样的一个组件。
我这里选用的是Percona with tokudb的版本.
主:
在my.cnf配置一个server-id
SET TOKUDB_CHECKPOINT_LOCK=ON;
开始拷贝TokuDB的数据文件(不包含日志文件),或者索性直接都copy mysql目录也是可以的
FLUSH TABLES WITH READ LOCK; #锁库锁表
show master status 记录binlog位置,拷贝最新的binlog和TokuDB的日志文件(*.tokulog)
UNLOCK TABLES;
SET TOKUDB_CHECKPOINT_LOCK=OFF;
TOKUDB_CHECKPOINT_LOCK,它的作用是允许拿到checkpoint锁,此时TokuDB的checkpoint会一直block到该锁释放(执行前要把tokudb_checkpoint_on_flush_logs关掉),目的是防止拷贝TokuDB数据文件的过程中做sharp checkpoint(注意:由于不做checkpoint,TokuDB的日志文件会逐渐增多),从而导致数据文件内部不一致(已拷贝的文件被修改)。
整个热备过程中,只有步骤4是阻塞写的,但耗时较短。
从:
把备份出来的数据库文件拖过来,然后在my.cnf配置一个跟master不一样的server-id就可以了. 然后我们需要在mysql建立主从复制连接。
CHANGE MASTER TO MASTER_HOST='主的ip地址', MASTER_USER='账号', MASTER_PASSWORD='密码', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000072', MASTER_LOG_POS=131451465, MASTER_CONNECT_RETRY=10;
这里再简单说下tokudb的备份方案,看了下资料现在的备份方案我这么几种。
1. 利用lvm磁盘进行mysql备份,简单高效,缺点是需要对于lvm的掌握。
2. 使用percona的hot backup插件, 缺点是不怎么好用, 没有官方介绍的牛叉。 https://github.com/percona/tokudb-backup-plugin
3. 我现在用的方法,在从上进行锁表操作,然后进行copy数据
END….