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';(如果指定的数据文件和日志文件不在默认的mysql数据目录下的话)然后在my.cnf配置好toku的参数后重启即可
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相应的日志文件和回滚文件等,需要删除
推荐参数:
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 ;另外进入数据目录删除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;
并且注释掉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:很明显是数据库插件目录没有ha_tokudb.so 共享库,做一个软连接或拷贝ha_tokudb.so到percoan mysql的plugin目录下即可
cannot open shared object file: No such file or directory)
如:
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引擎
或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 备份或者停机物理备份,貌似官方的物理备份工具要收费。
之后有时间再补充TokuDB的压测报告 。
网上有一篇对tokudb性能测试的文章请参考:http://www.tuicool.com/articles/vAbIFjb