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表,而网易在《程序员》上发表的一篇文章中提到其使用mysqldump对TokuDB进行备份。