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的壓測報告 。