当前位置:首页 > 技术文章 > 数据库 > Mysql

tokuDB存储引擎的安装、配置、使用及注意事项

发布时间:2017-12-09 17:25:40 作者:freedom3959 来源:网络 点击量:

平台支持:
    TokuDB 只能在 64-bit linux 下使用.
最小内存要求:
    TokuDB 需要至少1GB 的物理内存,当然这里建议最好是 2GB .


1、安装mysql(可以是mariadb、percona或oracle mysql)

     安装percona的源

       yum install http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm  
     
     测试是否可用
     yum list | grep percona

     然后选择合适的版本 [这里选择5.6.17 ]安装即可,很简单这里就不多废话。


2、安装tokuDB   

      tokuDB内存分配需要jemalloc支持(一般安装percona mysql以后自己就有,如果没有则需要额外安装)    

    (1)、 安装jemalloc

      yum install jemalloc
   
   (2)、安装tokudb
       二进制包安装
       cd /usr/local/src
       wget -c http://www.percona.com/redir/downloads/Percona-Server-5.6/LATEST/binary/tarball/Percona-Server-5.6.17-rel66.0-  608.TokuDB.linux.x86_64.tar.gz
       tar -zxvf Percona-Server-5.6.17-rel66.0-608.TokuDB.linux.x86_64.tar.gz 

       mv Percona-Server-5.6.17-rel66.0-608.TokuDB.linux.x86_64 percona-Server-5.6.17-rel66.0-608.TokuDB.linux.x86_64

       然后将/usr/local/src/percona-Server-5.6.17-rel66.0-608.linux.x86_64/lib/mysql/plugin下的ha_tokudb.so 链接或拷贝到mysql

       的plugin目录[/database1/mysql/Percona-Server-5.6.17-rel66.0-608.linux.x86_64/lib/mysql/plugin/]下即可

      或者你也可以使用rpm二进制包安装,这个也简单不多解释
       yum -y install Percona-Server-tokudb-56.x86_64

     修改系统参数

echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag
echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag 
建议写到 /etc/rc.local 中,重启后也可生效


    登陆mysql执行:

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';
INSTALL PLUGIN tokudb 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引擎
     
                                                                                                   图1
 或SHOW PLUGINS;也可以
 


(3)使用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 操作。

 

吐槽:

     该引擎现在一般用于大量历史数据的归档存储,但是最致命的还是没有一款合适的备份工具,只能使用mysqldump 备份或者停机物理备份,貌似官方的物理备份工具要收费。    

(来自:freedom3959)

本文链接:http://www.topjishu.net/article/63.html,如有转载,请注明出处!


关键词:tokuDB,存储引擎


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表