前言

TokuDB 是非常有效的数据库引擎,在阿里、腾讯均有广泛的运用,MySQL 的变种 Percona Server 和 AliSQL 均推荐启用 TokuDB 并作为默认引擎。其以优异的压缩性能和储存表现,被广泛的应用,颇有代替 InnoDB 之势。

介绍

TokuDB 是一个支持事务的“新”引擎,有着出色的数据压缩功能,由美国 TokuTek 公司(现在已经被 Percona 公司收购)研发。拥有出色的数据压缩功能,如果您的数据写多读少,而且数据量比较大,强烈建议您使用TokuDB,以节省空间成本,并大幅度降低存储使用量和IOPS开销,不过相应的会增加 CPU 的压力。 注意:(哈哈,上一篇用过,继续复制,蛤)
1. TokuDB引擎 不支持外键(foreign key)功能,如果您的表有外键,切换到 TokuDB引擎 后,此约束将被忽略。 如果数据库过分依赖外键的话,个人建议要有壮士断腕的决心,早点处理掉,不过数据库业务也会外键缩连累的!
2. TokuDB 不适用于大量读取的场景

设置

这里以 Percona Server 的二进制包为例,源码编译方式下次写。

RHEL、Centos 安装 Percona

yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm -y
yum install Percona-Server-server-57 -y
systemctl start mysql.service #启动 Percona
systemctl enable mysql.service #设置开机启动

查看安装是临时生成的密码:

cat /var/log/mysqld.log | grep "temporary password"

Debian、Ubuntu 安装 Percona

wget https://repo.percona.com/apt/percona-release_0.1-4.$(lsb_release -sc)_all.deb
dpkg -i percona-release_0.1-4.$(lsb_release -sc)_all.deb
rm -rf /etc/apt/percona-release.list
cat >> /etc/apt/percona-release.list <<EOF
deb https://mirror.tuna.tsinghua.edu.cn/percona/apt jessie main
EOF
apt-get update
apt-get install percona-server-server-5.7 -y
service mysql start #启动 Percona

进行安全设置

mysql_secure_installation # 进行安全设置,除了重置密码其他全部 y 即可

Enter current password for root (enter for none):
解释:输入当前 root 用户密码,输入上面的 root 临时面膜。
Set root password? [Y/n]  y
解释:要设置 root 密码吗?输入 y 表示愿意。
Remove anonymous users? [Y/n]  y
解释:要移除掉匿名用户吗?输入 y 表示愿意。
Disallow root login remotely? [Y/n]  y
解释:不想让 root 远程登陆吗?输入 y 表示愿意。
Remove test database and access to it? [Y/n]  y
解释:要去掉 test 数据库吗?输入 y 表示愿意。
Reload privilege tables now? [Y/n]  y
解释:想要重新加载权限吗?输入 y 表示愿意。

设置 jemalloc

jemalloc 是一个很好的内存管理软件,目前普遍应用于数据库类软件,性能表现普遍好于 glibc 的 maloc,例如 MSSQL、Redis 都是默认使用 jemalloc 作为内存管理软件。开启 TokuDB 必须依赖 jemalloc。

REHL、CentOS 安装:

yum install epel-release # 已经安装的直接跳过即可
yum install jemalloc -y

启用 jemalloc 优化

修改 /etc/percona-server.conf.d/mysqld_safe.cnf 添加malloc-lib = /usr/lib64/libjemalloc.so.1

重启即可 service mysql restart

Debian、Ubuntu 安装:

apt-get install libjemalloc1 libjemalloc-dev -y

启用 jemalloc 优化

修改 /etc/mysql/percona-server.conf.d/mysqld_safe.cnf 添加 malloc-lib = /usr/lib/x86_64-linux-gnu/libjemalloc.so.1

重启即可 service mysql restart

关闭 THP

THP(Transparent Huge Pages) 在有数据库服务(Mysql、Redis、MongoDB)的机器上都是建议关闭的 不然总会发生莫名其妙的事情,TokuDB 也是一定要关闭的。

/etc/rc.local 加入如下语句,这样就算重启系统也会自动关闭 THP

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

安装 TokuDB

为了安装这货前面做的准备也是真不少。

REHL、CentOS 安装

yum install Percona-Server-tokudb-57

Debian、Ubuntu 安装

apt-get install percona-server-tokudb-5.7

开启 TokuDB 引擎

ps_tokudb_admin --enable -uroot -`root密码`

然后就大功告成了,我们就可以看见数据库引擎有如下了:

mysql> SHOW PLUGINS;
...
| TokuDB                        | ACTIVE   | STORAGE ENGINE     | ha_tokudb.so | GPL     |
| TokuDB_file_map               | ACTIVE   | INFORMATION SCHEMA | ha_tokudb.so | GPL     |
| TokuDB_fractal_tree_info      | ACTIVE   | INFORMATION SCHEMA | ha_tokudb.so | GPL     |
| TokuDB_fractal_tree_block_map | ACTIVE   | INFORMATION SCHEMA | ha_tokudb.so | GPL     |
| TokuDB_trx                    | ACTIVE   | INFORMATION SCHEMA | ha_tokudb.so | GPL     |
| TokuDB_locks                  | ACTIVE   | INFORMATION SCHEMA | ha_tokudb.so | GPL     |
| TokuDB_lock_waits             | ACTIVE   | INFORMATION SCHEMA | ha_tokudb.so | GPL     |
| TokuDB_background_job_status  | ACTIVE   | INFORMATION SCHEMA | ha_tokudb.so | GPL     |
...

修改表,使用新引擎

一、修改表 ,运行 SQL 语句

ALTER TABLE `表名称` ENGINE=TokuDB 

即可完成修改。

二、修改压缩算法:

ALTER TABLE `表名称` ENGINE=TokuDB ROW_FORMAT=`压缩算法`;

TokuDB的压缩算法如何选择: • tokudb_zlib:表启用zlib压缩,压缩效果偏中,CPU消耗偏中,建议使用(默认) • tokudb_quicklz:表启用quicklz压缩,压缩效果差,CPU消耗低 • tokudb_lzma:表启用lzma压缩,压缩效果好,CPU消耗高