tokuDB部署

一、安装包下载

       Percona-Server-5.6.22-rel71.0-726.Linux.x86_64.tar.gz:

http://www.percona.com/downloads/Percona-Server-5.6/Percona-Server-5.6.22-72.0/binary/tarball/Percona-Server-5.6.22-rel71.0-726.Linux.x86_64.tar.gz

       Percona-Server-5.6.22-rel72.0-738.TokuDB.Linux.x86_64.tar.gz:

http://www.percona.com/downloads/Percona-Server-5.6/Percona-Server-5.6.22-72.0/binary/tarball/Percona-Server-5.6.22-rel72.0-738.TokuDB.Linux.x86_64.tar.gz

       使用的是:

       https://www.percona.com/downloads/Percona-Server-5.6/LATEST/binary/tarball/

       Percona-Server-5.6.24-rel72.2-Linux.x86_64

       Percona-Server-5.6.24-rel72.2-TokuDB.Linux.x86_64.ssl100.tar.gz

     

       停止mysql server;

 

二、相关目录  mysql存放目录

       BASEDIR=/opt/freeware/Percona-Server-5.6.24-rel72.2-Linux.x86_64

三、配置文件 添加

     [mysqld_safe]

      malloc-lib= /opt/freeware/Percona-Server-5.6.24-rel72.2-Linux.x86_64/lib/mysql/libjemalloc.so

      plugin-dir = /opt/freeware/Percona-Server-5.6.24-rel72.2-Linux.x86_64/lib/mysql/plugin/

      plugin-load=ha_tokudb.so

四、安装步骤

      1. 解压tokudb的包

          tar -zxf   Percona-Server-5.6.24-rel72.2-TokuDB.Linux.x86_64.ssl100.tar.gz

      2. 解压后,目录如下:

          # ls Percona-Server-5.6.24-rel72.2-Linux.x86_64.ssl100

          bin  lib  mysql-test  README-TOKUDB

      3. 把相关目录放到BASEDIR下

          cp -r Percona-Server-5.6.24-rel72.2-Linux.x86_64.ssl100/* /opt/freeware/Percona-Server-5.6.24-rel72.2-Linux.x86_64/

      4. 启动之前,停用transparent huge pages 

          修改系统参数

          echo never > /sys/kernel/mm/transparent_hugepage/enabled

          echo never > /sys/kernel/mm/transparent_hugepage/defrag

          echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled

          echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag

  建议写到 /etc/rc.local 中,重启后也可生效

      5. 启动数据库

      6. 手动添加plugin

           INSTALL PLUGIN tokudb SONAME 'ha_tokudb.so';

INSTALL PLUGIN tokudb_file_map SONAME 'ha_tokudb.so';

INSTALL PLUGIN tokudb_fractal_tree_info SONAME 'ha_tokudb.so';

INSTALL PLUGIN tokudb_fractal_tree_block_map SONAME 'ha_tokudb.so';

INSTALL PLUGIN tokudb_trx SONAME 'ha_tokudb.so';

INSTALL PLUGIN tokudb_locks SONAME 'ha_tokudb.so';

INSTALL PLUGIN tokudb_lock_waits SONAME 'ha_tokudb.so';

###安装这个后会生成toku相应的日志文件和回滚文件等,需要删除

(如果指定的数据文件和日志文件不在默认的mysql数据目录下的话)然后在my.cnf配置好toku的参数后重启即可

 

    推荐参数:

    tokudb_commit_sync=ON

    tokudb_cache_size=10G ##指定tokuDB可使用的缓存类似innodb 的innodb_buffer_pool_size 默认是物理内存的50%

    tokudb_directio=ON          ##写操作不经过缓存,直接写入磁盘

    row_format=tokudb_fast   ##指定行格式默认是tokudb_zlib

    tokudb_tmp_dir=/database1/mysql_tmpdir

    tokudb_write_status_frequency =1

    tokudb_read_status_frequency=1   

    tokudb_data_dir=/xxx/yyy

    tokudb_log_dir=/xxx /yyy

    注意指定的目录必须存在并且具有可访问的权限

 

 

    如果要卸载

UNINSTALL PLUGIN  tokudb ;

UNINSTALL PLUGIN  tokudb_file_map ;

UNINSTALL PLUGIN  tokudb_fractal_tree_info;

UNINSTALL PLUGIN  tokudb_fractal_tree_block_map;

UNINSTALL PLUGIN  tokudb_trx ;

UNINSTALL PLUGIN  tokudb_locks;

UNINSTALL PLUGIN  tokudb_lock_waits;

      另外进入数据目录删除tokudb相关的文件

      并且注释掉my.cnf toku相关的配置参数即可

 

   安装当中可能的报错

'/database1/mysql/percona-sever-4005/lib/mysql/plugin/ha_tokudb.so' (errno: 13 /database1/mysql/percona-sever-4005/lib/mysql/plugin/ha_tokudb.so:

cannot open shared object file: No such file or directory)

    很明显是数据库插件目录没有ha_tokudb.so 共享库,做一个软连接或拷贝ha_tokudb.so到percoan mysql的plugin目录下即可

    如:

    ln -s /usr/local/src/percona-Server-5.6.17-rel66.0-608.Linux.x86_64/lib/mysql/plugin/ha_tokudb.so /database1/mysql/percona-sever-4005/lib/mysql/plugin/ha_tokudb.so

 

 

     最后show engines;即可查看到tokudb引擎

 

      7. 检查添加结果

          show engines;

          show plugins;

 

使用tokudb创建表 

   CREATE TABLE `toku` (

  `pid` varchar(32) NOT NULL DEFAULT '',

  `CREATETIME` datetime NOT NULL,

  `UPDATETIMES` datetime NOT NULL,

  `USER_ID` bigint(20) NOT NULL,

  `HOMEWORK_ID` varchar(255) DEFAULT NULL,

  `COMPLETE_PRACTICE` int(11) NOT NULL DEFAULT '0',

  `note` varchar(256) NOT NULL DEFAULT '',

  `CLAZZ_ID` bigint(20) NOT NULL DEFAULT '0',

  `score` bigint(20) NOT NULL DEFAULT '0',

  `NOTE_CHECKEDS` bit(1) NOT NULL DEFAULT b'0',

  PRIMARY KEY (`pid`)

) ENGINE=TokuDB

(4)、 一些注意事项

     1、alter table xxx engine=tokudb 的情况会加metadata锁阻塞插入更新, 而myql-5.6.17 innodb引擎则不会导致阻塞。    

     2、只有char, varchar, varbinary, and integer  字段类型的扩展才支持online  ddl【缩减不支持online 操作】,注意修改的时候字段属性不能发生变化,同时也不能是任何主键或二级索引的字段【二级索引的话,可以先删除二级索引,不过tokuDB创建索引二级索引并不快】,否则会导致copy表。

     3、 修改列名的时候必须是单个列修改,如果是一条语句同时修改多条语句则会copy表。

     4、这些字段TIME, ENUM, BLOB, TINYBLOB, MEDIUMBLOB, LONGBLOB类型不支持online ddl。   

     其他的一些限制详情可参考官网

 

(5)、tokuDB事物、锁信息查看

      查看事物情况:

       SELECT * FROM information_schema.tokudb_trx,

        information_schema.processlist

        WHERE trx_mysql_thread_id = id;

     

       查看锁的情况

        SELECT id FROM information_schema.tokudb_locks,

        information_schema.processlist

        WHERE locks_mysql_thread_id = id;

     

     警告:

       不要移动任何TokuDB相关的文件、否则会导致数据库崩溃并且需要使用备份才能进行恢复。

 

(6)、 关于TokuDB行格式

    tokudb_row_format 可以设置如下的几个值:

    tokudb_default: 设置默认的压缩行为。在 TokuDB 7.1.0版本,默认使用zlib 库进行压缩,未来版本可能会改变。

    tokudb_fast: 使用quicklz 库的压缩模式。

    tokudb_small: 使用 lzma 库的压缩模式。

    tokudb_zlib: 使用 zlib 库的压缩模式,提供了中等级别的压缩比和中等级别的CPU消耗。

             

             tokudb_quicklz: 使用 quicklz 库的压缩模式, 提供了轻量级的压缩比和较低基本的CPU消耗。

             tokudb_lzma: 使用lzma库压缩模式,提供了高压缩比和高CPU消耗。

             tokudb_uncompressed: 不使用压缩模式。

    可以使用如下命令修改行格式:

     ALTER TABLE table_name ROW_FORMAT=row_format; 

     注意修改行格式的操作也是online 操作。

 [

#tokudb

malloc-lib= /opt/freeware/Percona-Server-5.6.24-rel72.2-Linux.x86_64/lib/mysql/libjemalloc.so

plugin-dir = /opt/freeware/Percona-Server-5.6.24-rel72.2-Linux.x86_64/lib/mysql/plugin/

plugin-load=ha_tokudb.so

 

 

tokudb-data-dir = /data/users/mysusr01/mysql/tokudbData

tokudb-log-dir = /data/users/mysusr01/mysql/tokudbLog

tokudb_tmp_dir=/data/users/mysusr01/mysql/tokudbTMP

 

#TokuDB的行模式,建议用 FAST 就足够了,如果磁盘空间很紧张,建议用 SMALL

#tokudb_row_format = tokudb_small

tokudb_row_format = tokudb_fast

tokudb_cache_size = 2G

 

#其他大部分配置其实可以不用修改的,只需要几个关键配置即可

tokudb_commit_sync = 0     #放入mysqld参数下面

tokudb_directio = 1       #放入mysqld参数下面

tokudb_read_block_size = 128K

tokudb_read_buf_size = 128K

 

tokudb_write_status_frequency =1

tokudb_read_status_frequency=1   

]


 


tokudb存在的问题:

  • 官方分支还没很好的支持

  • 热备方案问题,目前只有企业版才有

  • 还是有bug的,版本更新比较快,不建议在核心业务上用


备份相关

Percona Xtrabackup当前并不支持TokuDB tables的备份,从Percona官方观点来看,其在近期内也并没有支持TokuDB的计划。

TokuDB企业版提供Hot Backup的方案,其实现原理参见:TokuDB Hot Backup – Part 1  TokuDB Hot Backup – Part 2, 当然这不会是我们考虑的方案。

Percona推荐使用LVM或是mysqldumper来备份TokuDB表,而网易在《程序员》上发表的一篇文章中提到其使用mysqldumpTokuDB进行备份。