1. 程式人生 > >tokuDB儲存引擎的安裝、配置、使用及注意事項

tokuDB儲存引擎的安裝、配置、使用及注意事項

平臺支援:

TokuDB 只能在 64-bit Linux 下使用.

最小記憶體要求: TokuDB 需要至少1GB 的實體記憶體,當然這裡建議最好是 2GB .

1、安裝mysql(可以是mariadb、percona或oracle mysql)

 安裝percona的源

   yum install http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm  
 
 測試是否可用
 yum list | grep percona
 然後選擇合適的版本 [這裡選擇5.6.17 ]安裝即可,很簡單這裡就不多廢話。

2、安裝tokuDB

  tokuDB記憶體分配需要jemalloc支援(一般安裝percona mysql以後自己就有,如果沒有則需要額外安裝)    

(1)、 安裝jemalloc

  yum install jemalloc

(2)、安裝tokudb 二進位制包安裝 cd /usr/local/src wget -c http://www.percona.com/redir/downloads/Percona-Server-5.6/LATEST/binary/tarball/Percona-Server-5.6.17-rel66.0- 608.TokuDB.Linux.x86_64.tar.gz tar -zxvf Percona-Server-5.6.17-rel66.0-608.TokuDB.Linux.x86_64.tar.gz mv Percona-Server-5.6.17-rel66.0-608.TokuDB.Linux.x86_64 percona-Server-5.6.17-rel66.0-608.TokuDB.Linux.x86_64

   然後將/usr/local/src/percona-Server-5.6.17-rel66.0-608.Linux.x86_64/lib/mysql/plugin下的ha_tokudb.so 連結或拷貝到mysql

   的plugin目錄[/database1/mysql/Percona-Server-5.6.17-rel66.0-608.Linux.x86_64/lib/mysql/plugin/]下即可

  或者你也可以使用rpm二進位制包安裝,這個也簡單不多解釋
   yum -y install Percona-Server-tokudb-56.x86_64

 修改系統引數

echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag 建議寫到 /etc/rc.local 中,重啟後也可生效

登陸mysql執行:

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’; INSTALL PLUGIN tokudb SONAME ‘ha_tokudb.so’; ###安裝這個後會生成toku相應的日誌檔案和回滾檔案等,需要刪除 (如果指定的資料檔案和日誌檔案不在預設的mysql資料目錄下的話)然後在my.cnf配置好toku的引數後重啟即可

推薦引數:

tokudb_commit_sync=ON
tokudb_cache_size=10G ##指定tokuDB可使用的快取類似innodb 的innodb_buffer_pool_size 預設是實體記憶體的50%
tokudb_directio=ON          ##寫操作不經過快取,直接寫入磁碟
row_format=tokudb_fast   ##指定行格式預設是tokudb_zlib
tokudb_tmp_dir=/database1/mysql_tmpdir
tokudb_write_status_frequency =1
tokudb_read_status_frequency=1    
tokudb_data_dir=/xxx/yyy
tokudb_log_dir=/xxx /yyy
注意指定的目錄必須存在並且具有可訪問的許可權


如果要解除安裝

UNINSTALL PLUGIN tokudb ; UNINSTALL PLUGIN tokudb_file_map ; UNINSTALL PLUGIN tokudb_fractal_tree_info; UNINSTALL PLUGIN tokudb_fractal_tree_block_map; UNINSTALL PLUGIN tokudb_trx ; UNINSTALL PLUGIN tokudb_locks; UNINSTALL PLUGIN tokudb_lock_waits; 另外進入資料目錄刪除tokudb相關的檔案 並且註釋掉my.cnf toku相關的配置引數即可

安裝當中可能的報錯

‘/database1/mysql/percona-sever-4005/lib/mysql/plugin/ha_tokudb.so’ (errno: 13 /database1/mysql/percona-sever-4005/lib/mysql/plugin/ha_tokudb.so: cannot open shared object file: No such file or directory) 很明顯是資料庫外掛目錄沒有ha_tokudb.so 共享庫,做一個軟連線或拷貝ha_tokudb.so到percoan mysql的plugin目錄下即可 如: ln -s /usr/local/src/percona-Server-5.6.17-rel66.0-608.Linux.x86_64/lib/mysql/plugin/ha_tokudb.so /database1/mysql/percona-sever-4005/lib/mysql/plugin/ha_tokudb.so

 最後show engines;即可檢視到tokudb引擎
                                                                                                    圖1

或SHOW PLUGINS;也可以

(3)使用tokudb建立表

CREATE TABLE toku (

pid varchar(32) NOT NULL DEFAULT ‘’,

CREATETIME datetime NOT NULL,

UPDATETIMES datetime NOT NULL,

USER_ID bigint(20) NOT NULL,

HOMEWORK_ID varchar(255) DEFAULT NULL,

COMPLETE_PRACTICE int(11) NOT NULL DEFAULT ‘0’,

note varchar(256) NOT NULL DEFAULT ‘’,

CLAZZ_ID bigint(20) NOT NULL DEFAULT ‘0’,

score bigint(20) NOT NULL DEFAULT ‘0’,

NOTE_CHECKEDS bit(1) NOT NULL DEFAULT b’0’,

PRIMARY KEY (pid)

) ENGINE=TokuDB

(4)、 一些注意事項

 1、alter table xxx engine=tokudb 的情況會加metadata鎖阻塞插入更新, 而myql-5.6.17 innodb引擎則不會導致阻塞。     
 2、只有char, varchar, varbinary, and integer  欄位型別的擴展才支援online  ddl【縮減不支援online 操作】,注意修改的時候欄位屬性不能發生變化,同時也不能是任何主鍵或二級索引的欄位【二級索引的話,可以先刪除二級索引,不過tokuDB建立索引二級索引並不快】,否則會導致copy表。
 3、 修改列名的時候必須是單個列修改,如果是一條語句同時修改多條語句則會copy表。
 4、這些欄位TIME, ENUM, BLOB, TINYBLOB, MEDIUMBLOB, LONGBLOB型別不支援online ddl。    
 其他的一些限制詳情可參考官網

(5)、tokuDB事物、鎖資訊檢視

  檢視事物情況:

   SELECT * FROM information_schema.tokudb_trx,
    information_schema.processlist
    WHERE trx_mysql_thread_id = id; 
  
   檢視鎖的情況
    SELECT id FROM information_schema.tokudb_locks,
    information_schema.processlist
    WHERE locks_mysql_thread_id = id; 
  
 警告:
   不要移動任何TokuDB相關的檔案、否則會導致資料庫崩潰並且需要使用備份才能進行恢復。

(6)、 關於TokuDB行格式

tokudb_row_format 可以設定如下的幾個值:
tokudb_default: 設定預設的壓縮行為。在 TokuDB 7.1.0版本,預設使用zlib 庫進行壓縮,未來版本可能會改變。
tokudb_fast: 使用quicklz 庫的壓縮模式。
tokudb_small: 使用 lzma 庫的壓縮模式。
tokudb_zlib: 使用 zlib 庫的壓縮模式,提供了中等級別的壓縮比和中等級別的CPU消耗。
          

         tokudb_quicklz: 使用 quicklz 庫的壓縮模式, 提供了輕量級的壓縮比和較低基本的CPU消耗。

         tokudb_lzma: 使用lzma庫壓縮模式,提供了高壓縮比和高CPU消耗。
         tokudb_uncompressed: 不使用壓縮模式。
可以使用如下命令修改行格式:
 ALTER TABLE table_name ROW_FORMAT=row_format;  
 注意修改行格式的操作也是online 操作。

吐槽:

 該引擎現在一般用於大量歷史資料的歸檔儲存,但是最致命的還是沒有一款合適的備份工具,只能使用mysqldump 備份或者停機物理備份,貌似官方的物理備份工具要收費。      

之後有時間再補充TokuDB的壓測報告 。