TokuDB存储引擎

TokuDB是一个高度可扩展,零维护的停机MySQL存储引擎,可提供基于索引的查询加速,改进的复制性能,无与伦比的压缩和实时架构修改。该TokuDB存储引擎是一个可扩展的,酸,MVCC兼容的存储引擎,提供基于索引的查询改进,可以在线修改架构,减少了从滞后两个硬盘驱动器和闪存。此存储引擎专为在写入密集型工作负载上实现高性能而设计,可通过分形树索引实现。
 
安装: 
安装percona mysql 仓库
yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
yum install Percona-Server-server-57
Percona-Server-tokudb-57-5.7.18-15.1.el6.x86_64
yum install jemalloc 
或者二进制包:
wget https://www.percona.com/downloads/Percona-Server-LATEST/Percona-Server-5.7.18-15/binary/tarball/Percona-Server-5.7.18-15-Linux.x86_64.ssl100.tar.gz
可能会缺少依赖库文件等:ldd ./mysqld查看一下。如:
ln -s /usr/lib64/libcrypto.so.10 libcrypto.so.1.1
ln -s  /usr/lib64/libssl.so.10 libssl.so.1.1
配置项目依赖:
[mysqld_safe] 
malloc-lib=/usr/lib64/libjemalloc.so.1
 
引擎项启动
ps_tokudb_admin –enable -uroot -p  --socket 
输入Mysql的root帐号密码,完成启动。命令字符都是英文输入法下的短横杠。
此脚本用于安装和卸载Percona Server 5.7的TokuDB插件。
 
安装后相关需要的目录:
/usr/bin/jemalloc.sh
/usr/lib64/libjemalloc.so.1
/usr/lib64/mysql/plugin/
TokuDB存储引擎_SQL
启动:
/usr/local/mysql_5.7/bin/mysqld_safe --defaults-file=/data1/mysql_5.7/my.cnf --user=mysql --disable-partition-engine-check
/usr/local/mysql_5.7/bin/mysqld ...

tokudb参数
tokudb_analyze_delete_fraction   控制在 对TokuDB表执行操作期间是否将分形树中已删除的行报告给客户端和MySQL错误日志 、值为0-1.设置为1时表示不报告任何错误。0.1表示10%删除的行尚未进行垃圾回收则报错到日志中。
 
tokudb_directio  启用后,TokuDB使用直接I / O而不是缓冲I / O进行写入。使用直接I / O时,请考虑tokudb_cache_size从其默认的1/2物理内存增加。
 
tokudb_disable_prefetching 预取
tokudb_enable_fast_update  tokudb_enable_fast_upsert 快速更新和插入功能。 快速更新涉及查询优化,以避免在执行期间进行随机读取。    
tokudb_fs_reserve_percent   此变量控制允许插入必须可用的文件系统的百分比。默认情况下,此设置为5。我们建议此保留至少是物理内存大小的一半。有关详细信息,请参阅完整磁盘
tokudb_hide_default_row_format  是否隐藏show create table 的行压缩格式 例如 ROW_FORMAT=TOKUDB_ZLIB。
tokudb_max_lock_memory  此变量指定PerconaFT锁定表的最大内存量。
tokudb_prelock_empty 默认情况下,TokuDB抢占式地抢占空表的整个表锁。如果一个事务正在进行加载,例如当用户将表加载到空表中时,此默认值会提供相当大的加速。但是,如果多个事务尝试对空表执行并发操作,则除了一个事务之外的所有事务都将被锁定。tokudb_prelock_empty通过关闭抢占式预锁定来禁用 此多事务案例的优化。
innodb_use_native_aio 如果使用TokuBackup备份InnoDB表,则必须禁用InnoDB异步IO 。否则,您将拥有不一致,不可恢复的备份。适当的设置是。innodb_use_native_aio=0

tokudb热备:
1、拷贝libHotBackup.so 到/usr/lib 或/usr/lib64
2、配置文件中添加:
[mysqld_safe]
preload-hotbackup
3、执行
ps_tokudb_admin --enable-backup --host=127.0.0.1 --user=root--password='123456' --port=3306
4、备份相关先选:
tokudb_backup_allowed_prefix  备份目录前缀
tokudb_backup_dir  在session指定该参数开始备份
innodb_use_native_aio  如果使用TokuBackup备份InnoDB表,则必须禁用InnoDB异步IO 。 否则备份不一致。innodb_use_native_aio=0
tokudb_backup_exclude  正则表达式排除某些文件和目录 
注意:发起备份只备份 tokudb_backup_dir  tokudb_log_dir  datadir参数指定的目录。备份结果没有二进制日志点。需要手动找出。
 
5、备份:
配置文件:
innodb_use_native_aio = OFF
重启实例
set tokudb_backup_dir='/data1/backup'; 即开始备份。
6、还原, tokudbback 的还原只是cp 备份结果到 参数指定相应目录就可以启动。启动的时候数据库自动做tokudb innodb的恢复。
 

tokudb文件:
tokudb目录下的文件说明:
TokuDB存储引擎_通用实践_02
tokudb.environment   此文件是Percona FT文件集的根目录,包含有关系统的各种元数据,例如创建时间,当前文件格式版本等。
tokudb.rollback   Percona FT中的每个事务都维护自己的事务回滚日志。这些日志一起存储在单个Percona FT字典文件中,占用Percona FT缓存表中的空间 类似undo。
tokudb.directory toku文件映射
__tokudb_lock_dont_*  锁定文件  这些空文件仅用作进程间的信号量。只要当前没有服务器实例正在运行并使用数据集,就可以安全地删除/忽略它们。
表文件tablename_*:
tablename_status_xxxx 表元数据文件
tablename_main_xxxx 是表数据主文件
tablename_key_indexname_xxxx  索引文件
启动的时候,tokudb通过  tokudb.directory 来找到表对应的元数据文件,索引文件,表文件。并写入到  information_schema.tokudb_file_map(内存表)。