• TokuDB调研文档



    另见链接:http://note.youdao.com/share/?id=77dd1e9cc139b57586665f702467c56a&type=note
     
    安装
    安装主要包括两种方法:1)rpm安装  2)源码编译
     
    1. rpm安装
    此方式是比较简单的方式,按照Percona安装说明文档指示的方法操作即可。
    首先安装Percona yum repository  : 
    sudo rpm -i percona-release-0.0-1.x86_64.rpm
    接下来安装Percona-Server-tokudb-56.x86_64
    sudo yum install Percona-Server-tokudb-56.x86_64
    在这一步安装过程中,安装程序会向屏幕输出很多信息,可根据具体信息查找问题或直接success。tokudb和mysqld存在冲突,强烈建议使用rpm包安装时机器上不存在mysqld,否则会报错。
     
    安装好后,就可以启动mysqld_safe,然后可以正常访问mysqld。
     
    2.  源码编译
    Percona的tokudb是以一个单独的包进行发布的,因此源码编译需要分别安装Percona 5.6.19和tokudb 
    5.6.19我们已经在gitlab上放了一份代码(内部地址,略去)
    选择其中的percona-server-5.6.17-66.0.tokudb.tar.gz,下载后解压缩,将其中的storage/tokudb放到Mysql相关目录。
     
    编译时cmake需要指定DWITH_TOKUDB_STORAGE_ENGINE=1,然后执行make /make install。
     
    编译tokudb需要gcc版本大于4.8,cmake版本大于2.8.9,请自行折腾。
     
     
    使用TokuDB存储引擎
    tokuDB默认是使用Module方式编译的,因此在使用前需要首先Install,具体方式如下:
    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';
    后续通过
    show engines/show plugins/ select @@tokudb_version 就可以看到tokudb相关的内容。
     
     
    建表
    在install相关so之后,可以直接创建tokudb类型的表,Percona给出了一个例子,看起来和创建innodb的表没有什么区别。
    mysql> CREATE TABLE `City` (
     `ID` int(11) NOT NULL AUTO_INCREMENT,
     `Name` char(35) NOT NULL DEFAULT '',
     `CountryCode` char(3) NOT NULL DEFAULT '',
     `District` char(20) NOT NULL DEFAULT '',
     `Population` int(11) NOT NULL DEFAULT '0',
     PRIMARY KEY (`ID`),
     KEY `CountryCode` (`CountryCode`)
    ) ENGINE=TokuDB
    也可以将其他存储引擎的表修改成tokudb:
    mysql> ALTER TABLE City ENGINE=TokuDB;
    经确认可以在innodb和tokudb两个存储引擎之间相互转换。
     
     
    同一事务内对不同存储引擎表进行操作
    经测试,同一个事务内可以对innodb/tokudb分别进行操作,如下:
    mysql> insert into City_tokudb(ID) values(1);
    Query OK, 1 row affected (0.00 sec)
     
    mysql> insert into City_innodb(ID) values(1);
    Query OK, 1 row affected (0.00 sec)
     
    mysql> begin;
    Query OK, 0 rows affected (0.00 sec)
     
    mysql> insert into City_innodb(ID) values(2);
    Query OK, 1 row affected (0.00 sec)
     
    mysql> insert into City_tokudb(ID) values(2);
    Query OK, 1 row affected (0.00 sec)
     
    mysql> commit;
    Query OK, 0 rows affected (0.00 sec)
     
    mysql> select * from City_innodb;
    +----+------+-------------+----------+------------+
    | ID | Name | CountryCode | District | Population |
    +----+------+-------------+----------+------------+
    | 1 | | | | 0 |
    | 2 | | | | 0 |
    +----+------+-------------+----------+------------+
    2 rows in set (0.00 sec)
     
    mysql> select * from City_tokudb;
    +----+------+-------------+----------+------------+
    | ID | Name | CountryCode | District | Population |
    +----+------+-------------+----------+------------+
    | 1 | | | | 0 |
    | 2 | | | | 0 |
    +----+------+-------------+----------+------------+
    2 rows in set (0.00 sec)
     
    复制相关
    由于binlog和存储引擎是相互独立的,因此理论上复制不应受到TokuDB的影响。此处,以常规的主备搭建为基础,在主库上对TokuDB的表分别执行建表,增删改查操作,并在备库上确认复制数据无误。
    常规的主备搭建流程参见:
     
    主库执行的操作:
    mysql> CREATE TABLE `City_repl` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `Name` char(35) NOT NULL DEFAULT '', `CountryCode` char(3) NOT NULL DEFAULT '', `District` char(20) NOT NULL DEFAULT '', `Population` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`ID`), KEY `CountryCode` (`CountryCode`) ) ENGINE=TokuDB;
    Query OK, 0 rows affected (0.01 sec)
     
    mysql> insert into City_repl(ID) values(1);
    Query OK, 1 row affected (0.00 sec)
     
    mysql> insert into City_repl(ID) values(2);
    Query OK, 1 row affected (0.00 sec)
     
    mysql> delete from City_repl where ID=1;
    Query OK, 1 row affected (0.00 sec)
     
    mysql> update City_repl set ID=3 where ID=2;
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1 Changed: 1 Warnings: 0
    相应的备库同步执行查询结果如下:
    mysql> show tables;
    +----------------+
    | Tables_in_test |
    +----------------+
    | City_repl |
    +----------------+
    1 row in set (0.00 sec)
     
    mysql> select * from City_repl;
    +----+------+-------------+----------+------------+
    | ID | Name | CountryCode | District | Population |
    +----+------+-------------+----------+------------+
    | 1 | | | | 0 |
    | 2 | | | | 0 |
    +----+------+-------------+----------+------------+
    2 rows in set (0.00 sec)
     
    mysql> select * from City_repl;
    +----+------+-------------+----------+------------+
    | ID | Name | CountryCode | District | Population |
    +----+------+-------------+----------+------------+
    | 2 | | | | 0 |
    +----+------+-------------+----------+------------+
    1 row in set (0.00 sec)
     
    mysql> select * from City_repl;
    +----+------+-------------+----------+------------+
    | ID | Name | CountryCode | District | Population |
    +----+------+-------------+----------+------------+
    | 3 | | | | 0 |
    +----+------+-------------+----------+------------+
     
    可见简单的针对TokuDB的增删改查操作,备份是可以正常工作的。
     
    备份相关
    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进行备份。
     
    参考链接
    1)Percona版本安装说明文档:
    2)Official TokuDB Documentation
    3)TokuDB在网易生产环境中的应用实践
    4)TokuDB一些源码分析(from @淘宝一工)
    5)Percona Server 5.6.16-64.0 with TokuDB engine now available
    http://www.mysqlperformanceblog.com/2014/03/03/percona-server-5-6-16-64-0-with-tokudb-engine-now-available/
  • 相关阅读:
    configure: error: invalid variable name: `'
    [bzoj2002][Hnoi2010]Bounce弹飞绵羊——分块
    [bzoj2049][Sdoi2008]Cave 洞穴勘测——lct
    [bzoj4765]普通计算姬——分块
    [bzoj4766]文艺计算姬——完全二分图生成树个数
    [bzoj2243][SDOI2011]染色——树链剖分+线段树
    [bzoj3306]树——树上倍增+dfs序+线段树
    [bzoj1977][BeiJing2010组队]次小生成树 Tree——树上倍增+lca
    [bzoj3697]采药人的路径——点分治
    小蒟蒻的天坑
  • 原文地址:https://www.cnblogs.com/liuhao/p/3836126.html
Copyright © 2020-2023  润新知