CentOS 7 上升级 MariaDB 并支持 TokuDB 引擎

网上有一堆采用源码编译, 或者直接 so 文件替代,或者用 install plugin 之类的安装办法。
在我看来实在有点 low。 我们直接搜索怎么用 yum repository 安装 MariaDB,就可以去页面:

https://downloads.mariadb.org/mariadb/repositories

按照里面的选择,我们会得到如下几行,在 /etc/yum.repos.d 目录下创建一个 mariadb.repo 的文件内容如下:

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

然后运行

yum -y install MariaDB-tokudb-engine

就会自动升级 MariaDB 的版本, 并安装这个新的引擎以及相关的依赖包。

然后,  systemctl stop mariadb (可能会存在不能 stop 的情况, 那就 kill -9 了)。

再启动 mariadb.

在操作系统里, 运行 mysql , 在交互界面下,输入 \s,查看系统信息, 可以看到服务器的最新版本号,  输入 show engines, 可以看到: “| TokuDB | YES | Percona TokuDB Storage Engine with Fractal Tree(tm) Technology | YES ”

用 alter table tablename engine=tokudb,就可以把某一张表的引擎修改成 tokudb 了。

整个流程简单顺畅,没有拖泥带水。搞不懂外面那些小朋友的安装方法为什么要如此复杂。

以下是一张 800多万行的表迁移(InnoDB 到 TokuDB)前后的 select count(*) 比较:

MariaDB [stock]> select count(*) from dayline;
+———-+
| count(*) |
+———-+
| 8622272 |
+———-+
1 row in set (1 min 17.31 sec)

MariaDB [stock]> alter table dayline engine=’tokudb’;
Stage: 1 of 2 ‘Fetched about 1622000 rows, loading data still remains’ 18.8% of stage done
(中间居然还网络断开了!幸亏回来以后发现迁移算成功了)

MariaDB [stock]> select count(*) from dayline;
+———-+
| count(*) |
+———-+
| 8622272 |
+———-+
1 row in set (4.84 sec)

=======================

2017.12.4 后记:
升级到 MariaDB 后,由于 PHP MySQL 库头文件版本的不匹配会导致所有的 PHP 会报警:
PHP Warning: mysqli_connect(): Headers and client library minor version mismatch. Headers:50556 Library:100126 in
解决办法是: 卸载 php56w-mysql,安装 php56w-mysqlnd

===========

2018.3.12 后记:

外国的源很慢, 阿里和清华的源实际上上有的, 但是去 Web 网站都转去官网。
清华的正确路径是:

baseurl = https://mirrors.tuna.tsinghua.edu.cn/mariadb/yum/10.2/centos7-amd64
gpgkey = https://mirrors.tuna.tsinghua.edu.cn/mariadb/yum//RPM-GPG-KEY-MariaDB

再后记, 安装完后, show engines 发现 tokudb  没有在列表里, 查看数据库错误日志发现:

2018-03-12 23:42:50 140254380386432 [ERROR] TokuDB will not run with transparent huge pages enabled.
2018-03-12 23:42:50 140254380386432 [ERROR] Please disable them to continue.
2018-03-12 23:42:50 140254380386432 [ERROR] (echo never > /sys/kernel/mm/transparent_hugepage/enabled)

根据提示运行 # echo never > /sys/kernel/mm/transparent_hugepage/enabled 然后重启 MariaDB,就可以看到 tokudb 的引擎了。

再再后记:

日志里发现错误“
”Mar 13 23:40:34   [ERROR] Missing system table mysql.roles_mapping; please run mysql_upgrade to create it

根据要求运行 mysql_upgrade 即可。 由于 socket 不是常规的 /var/lib/mysql/mysql.sock,导致报错, 去 .my.cnf  设置 socket=/opt/mysql/mysql.sock  正确的路径即可。

作者: 甬洁网络

--移动互联网&物联网技术提供商