背景:
TokuDB引擎是有Tokutek开发的一个数据库存储引擎,在设计之初便引入了独特的索引算法,在其官网测试的文章中看到TokuDB性能比InnoDB高出很多。
MySQL是一个插件式的数据库,在MySQL5.5版本之前MyISAM是MySQL的默认存储引擎,在之后的版本中默认的存储引擎变成了InnoDB。其特点是它支持事务,具有完善的崩溃恢复机制,具体的特点这里不说明,可以自行的寻找资料。这里介绍的TokuDB和InnoDB有很多相似之处:一个高性能,支持事务、MVCC、聚簇索引等。最大的不同在于TokuDB采用了一种叫做Fractal Tree的索引结构,使其在随机写数据的处理上有很大提升。一般来说数据库的索引结构都采用B+Tree或则类似的数据结构,InnoDB也是如此。InnoDB是以主键组织的B+Tree结构,数据按照主键顺序排列。对于顺序的自增主键有很好的性能,但是不适合随机写入,大量的随机I/O会使数据页分裂产生碎片,索引维护开销很多大。而TokuDB的Fractal Tree的索引结构很好的解决了这个问题。
TokuDB解决随机写入的问题得益于其索引结构,Fractal Tree 和 B-Tree的差别主要在于索引树的内部节点上,B-Tree索引的内部结构只有指向父节点和子节点的指针,而Fractal Tree的内部节点不仅有指向父节点和子节点的指针,还有一块Buffer区。当数据写入时会先落到这个Buffer区上,该区是一个FIFO结构,写是一个顺序的过程,和其他缓冲区一样,满了就一次性刷写数据。所以TokuDB上插入数据基本上变成了一个顺序添加的过程。
TokuDB另一个特点是压缩性能和低CPU消耗,TokuDB存储引擎默认的块大小是4M,这使其有更好的压缩效率。默认支持压缩功能,不需要配置其他的东西。压缩选项有:TokuDB_Quicklz、TokuDB_Lzma、TokuDB_Zlib,同时也支持非压缩选项。TokuDB_Zlib支持的默认压缩格式。一般压缩都需要消耗更多的CPU。但TukuDB消耗的CPU资源较少。
安装:
首先查看自己服务器的信息
输入:cat /proc/version
显示Linux内核为Red Hat,根据官网的安装步骤进行安装
1.安装Percona MySQL的仓库
$ yum install http://repo.percona.com/centos/7/RPMS/x86_64/Percona-Server-selinux-57-5.7.31-rel84.2.el7.noarch.rpm
之后点击y
2 .测试仓库
输入:
yum list | grep percona
得到如下信息,说明正常可用
3. 安装Percona MySQL
yum install Percona-Server-server-57
安装Percona Mysql5.7,一路输入y,安装成功如下:
4.安装MySQL服务
4.1 运行适用于MySQL的Percona Server
- 启动MySQL服务:service mysql start
- 确认MySQL服务是否正常:service mysql status
- 停止MySQL服务:service mysql stop
- 重启MySQL服务:service mysql restart
4.2 使用临时密码登录并修改密码
grep 'temporary password' /var/log/mysqld.log
找到该文件中的临时密码,并以此登录mysql,由于这个密码中含有特殊字符所以我们需要先数登录命令再输入密码
mysql -u root -p
MySQL TokuDB设置密码:
set password=password('C123!@#');
4.3 修改编码
编辑/etc/my.cnf文件,在[mysqld]下面添加一行(没有[mysqld]就添加一行),不能再写以前的default_character_set了,必须是default-character-set=utf8 。
[mysqld]
character_set_server=utf8
4.4 设置外网可以访问
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'CXMlog_toku_123!@#' WITH GRANT OPTION;
FLUSH PRIVILEGES;
5 . 安装TokuDB
5.1 安装jemalloc,并查看安装信息:
yum install jemalloc
rpm -qa |grep jemalloc
rpm -ql jemalloc-3.6.0-1.el7.x86_64
第一步完成后,执行第二步,得到安装的版本信息,再执行第三步,找到安装文件的信息如下:
5.2 配置依赖
编辑/etc/my.cnf,添加jemalloc的地址,就是上图.so.1后缀文件全路径。(官网的路径为malloc-lib= /path/to/jemalloc,百度才得到真正的值是上图的文件路径)
[mysqld_safe]
malloc-lib=/usr/lib64/libjemalloc.so.1
5.3 检查Transparent huge pages
关闭操作:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
5.4 安装TokuDB
版本必须和Percona的版本一致,我们前面安装的是Percona5.7,所以此处也需要安装toku5.7,否则提示版本冲突
yum install Percona-Server-tokudb-57.x86_64
安装完成如下
6. TokuDB引擎启动
ps_tokudb_admin --enable -uroot -p
引擎插件安装成功,截图如下:
查看引擎
show engines;
至此,终于成功安装了tokuDB插件了。