收到微信报警说是数据库ssd盘快满了,空间还有100G了…  对于原本3.8T磁盘现在只剩下100G,麻烦事。 现在相关业务的数据库里面有几个表都已经达到800G+了, 这可不是个好现象,所以我考虑把这些innodb的大表全部改成Tokudb的引擎,这样就可以省下不少的空间。  

    业务的架构原本是计划去除Mysql ,重心转移到Elasticsearch上。 但这Elasticsearch经常因为产品的变更把数据都清理掉,重新导入….  这也太不靠谱了。  我们这曾经依赖的Hbase也渐渐被我们放弃了。 


文章写的不是很严谨,欢迎来喷,另外该文后续有更新的,请到原文地址查看更新。

http://xiaorui.cc/2016/02/02/mysql%E4%BB%8Einnodb%E5%88%B0tokudb%E5%BC%95%E6%93%8E%E6%97%B6%E9%81%87%E5%88%B0%E7%9A%84%E9%97%AE%E9%A2%98/


这次的操作环境:

系统: centos 6.7

数据库: percona mysql server

对于TokuDB的压缩算法的选择,我们选择了压缩比率最大的lzma算法.

tokudb_zlib:表启用zlib压缩,压缩效果偏中,CPU消耗偏中,这是默认的选项

tokudb_quicklz:表启用quicklz压缩,压缩效果差,CPU消耗低下,这个不怎么推荐使用,使用tokudb不就是为了压缩; 

tokudb_lzma:表启用lzma压缩,压缩效果好,CPU消耗高,强烈推荐大家用这个,毕竟花费了少量的时间和多数的cpu计算罢了。

我们的Mysql架构是标准的主从方式,然后用keepalived做主从的切换. 

第一个问题是提示空间不够,原本以为innodb 1T的表,转成tokudb只需要300G左右,所以我们只是预留了400G左右,结果就变成下面的情况了. 

这是mysql的错误日志,我们通过日志可以明确看到是空间不够引起的.

google了些文档,说是 ERROR 1030 (HY000): Got error 28 from storage engine 这类的问题是临时空间引起的,最后通过实际配置,发现这跟临时空间不是一回事。  alter修改表引擎,或者是增改字段都是在datadir目录进行的。 所以还是想法设法加大datadir数据空间。

这是我自己的mysql空间不足的解决方案:

  1. 加入skip-slave-start参数暂停同步.
  2. 停止/etc/init.d/mysql stop
  3. 把一个大的库mv出去然后必须软连接回来,不然mysql启动的时候回出错。 
  4. 这样我们就空出了datadir的空间,启动mysql,进行alter table 修改表引擎。
  5. 可以根据情况把这些步骤反推下。

话说percona tokudb引擎的压缩效果还是很好的,一般1000G的数据可以压缩到200G,当然这也牺牲了不少cpu消耗.

第二个问题是alter修改tokudb表引擎失败后产生了大文件, 这是个很坑爹的事。  

你能确定下面以tokudb为后缀的文件哪些是成功的,哪些是失败的?   通过这些文件名我只能确定所属数据库,但确定不了他所属那个表。
我后来是根据改动时间确认哪个是失败的文件.  

以前都是使用pt-online-change来alter操作表有时也会失败,但他的失败的表在show tables时轻易看到,不怪我这么整tokudb.

第三个问题, 从innodb转到tokudb的消耗时间…  我这边的为了后期优化性能,mysql直接都上ssd,结果一个1000T的表从innodb到tokudb,一共花费了20个小时…    16个核心的cpu,跑满了10个… 


alter table xxx engine=TokuDb其实是分两个步骤的

第一步是做数据整理,会把innodb里的数据fetch出来放到一个tokudbxxx文件里

第二步是把tokudbxxx临时文件加载并加索引啥的. 

Tokudb对于那种写多读少的业务还是很适合的,至于性能? 我们这没啥感觉,通过metric监控数值对比没什么明显差异.     我现在对于Tokudb唯一的焦虑就是备份, 不能热备份呀.  搜狐那边的tokudb使用的是lvm磁盘快照。 

END….



对Python及运维开发感兴趣的朋友可以加QQ群 : 478476595 !!!
{ 2000人qq大群内有各厂大牛,常组织线上分享及沙龙,对高性能及分布式场景感兴趣同学欢迎加入该QQ群 }

另外如果大家觉得文章对你有些作用!   帮忙点击广告. 一来能刺激我写博客的欲望,二来好维护云主机的费用.
如果想赏钱,可以用微信扫描下面的二维码. 另外再次标注博客原地址  xiaorui.cc  ……   感谢!

由于未加载tokudb引起造成Mysql主从同步失败

聊聊,由于未加载tokudb引起造成Mysql主从同步失败的问题. 先听我说,我是个程序员,兼职部门的Mysql DBA . 部门里有好几个Mysql主从服务,每次做...

阅读全文

关于Percona tokudb引擎的主从复制同步文档

mysql的tokudb引擎可以解决数据库占用硬盘空间大的问题,虽然舍弃了部分的读写应能,但因为我们的myql磁盘都是ssd的,所以这都不是事。 tokudb有几个压缩比率,...

阅读全文

1则回应给“mysql从innodb到tokudb引擎时遇到的问题”

  1. percona 现在有tokudb 备份工具了.

发表评论