Percona TokuDB. 1
1. TokuDB說明... 1
2. TokuDB安裝... 1
3. 使用TokuDB. 1
3.1 快速插入和富索引... 1
3.2 聚集secondary索引... 1
3.3 在線索引創建... 1
3.4 在線添加,刪除,擴展,重命名列... 1
3.5 壓縮細節... 1
3.6 修改表的壓縮... 1
3.7 無io讀復制... 1
3.8 事務和ACID兼容恢復... 1
3.9 管理Log大小... 1
3.10 恢復... 1
3.11 關閉寫緩存... 1
3.12 進度跟蹤... 1
3.13 遷移到TokuDB. 1
4 TokuDB後台 ANALYZE TABLE. 1
4.1 後台作業... 1
4.2 自動分析... 1
4.3 系統變量... 1
4.4 information_schema相關表... 1
5 TokuDB變量... 1
6 TokuDB Troubleshooting. 1
6.1 得知問題... 1
6.2 TukoDB鎖... 1
6.2.1 TOKUDB_TRX表... 1
6.2.2 TOKUDB_LOCKS表... 1
6.2.3 TOKUDB_LOCK_WAITS表... 1
6.3 引擎狀態... 1
6.4 全局狀態變量... 1
7 Percona TokuBackup.. 1
7.1 從binary安裝... 1
7.2 備份... 1
7.3 還原... 1
7.4 推薦配置... 1
7.4.1 監控進度... 1
7.4.2 排除源文件... 1
7.4.3 備份率閥值... 1
7.4.4 限制備份目標... 1
7.4.5 錯誤報告... 1
7.4.6 限制和已知的問題... 1
8 FAQ.. 1
具體看:
https://www.percona.com/doc/percona-server/5.7/tokudb/tokudb_intro.html
Percona Server兼容獨立可用的TokuDB存儲引擎包。TokuDB引擎必須分開下載然後以插件的形式啟用。這個包可以獨立安裝,不需要任何特定的版本的Percona Server。
TokuDB存儲引擎是可擴展,ACID,MVCC的存儲引擎,提供基於索引查詢,提供online的框架修改和減少slave延遲。這個存儲引擎設計師為了寫入性能,是基於fractal tree的。
警告:
目前percona提供的TokuDB被使用在Percona Server 5.7。TokuDB引擎從其他地方下載的不能被兼容。TokuDB文件格式和MySQL變種不是一樣的。從一個變種到另外一個可能需要做數據導入導出。
前置需要
Libjemalloc庫
ToKuDB需要libjemalloc 3.3.0或者更高版本。可以從percona或者其他地方下載。如果libjemalloc,之前沒有安裝,TokuDB存儲引擎在使用apt,yum安裝的時候自動安裝,但是並不會被加載到mysql,可以使用如下配置導入。
[mysqld_safe]
malloc-lib= /path/to/jemalloc
大頁面轉化
TokuDB如果在大頁面轉化啟動的時候不會被啟動。大頁面轉化是新內核版本的功能。可以通過以下語句檢查時候啟動。
$ cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
如果啟動了大頁面轉化,啟動TokuDB引擎會受到錯誤日志裡面有如下信息:
Transparent huge pages are enabled, according to /sys/kernel/mm/redhat_transparent_hugepage/enabled
Transparent huge pages are enabled, according to /sys/kernel/mm/transparent_hugepage/enabled
你也可以關閉大頁面轉化功能,把transparent_hugepage=never傳遞到內核bottloader工具。但是要重啟。也可以使用以下命令關閉:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
安裝
現在TukoDB可以使用Percona的源安裝:
如果為yum:
[root@centos ~]# yum install Percona-Server-tokudb-57.x86_64
如果為apt:
root@wheezy:~# apt-get install percona-server-tokudb-5.7
啟動TokuDB存儲引擎
一旦安裝好TokuDB就會有如下輸出:
* This release of Percona Server is distributed with TokuDB storage engine.
* Run the following script to enable the TokuDB storage engine in Percona Server:
ps_tokudb_admin --enable -u <mysql_admin_user> -p[mysql_admin_pass] [-S <socket>] [-h <host> -P <port>]
* See http://www.percona.com/doc/percona-server/5.7/tokudb/tokudb_installation.html for more installation details
* See http://www.percona.com/doc/percona-server/5.7/tokudb/tokudb_intro.html for an introduction to TokuDB
Percona Server實現了ps_tokudb_admin腳本啟動TokuDB存儲引擎。腳本會自動關閉大頁面轉化。需要sudo 運行一下語句:
ps_tokudb_admin --enable -uroot -pPassw0rd
運行後會輸出:
Checking if Percona server is running with jemalloc enabled...
>> Percona server is running with jemalloc enabled.
Checking transparent huge pages status on the system...
>> Transparent huge pages are currently disabled on the system.
Checking if thp-setting=never option is already set in config file...
>> Option thp-setting=never is not set in the config file.
>> (needed only if THP is not disabled permanently on the system)
Checking TokuDB plugin status...
>> TokuDB plugin is not installed.
Adding thp-setting=never option into /etc/mysql/my.cnf
>> Successfuly added thp-setting=never option into /etc/mysql/my.cnf
Installing TokuDB engine...
>> Successfuly installed TokuDB plugin.
如果腳本沒有返回錯誤,那麼TokuDB被成功安裝,可以使用show engins檢查:
mysql> SHOW ENGINES;
...
| TokuDB | YES | Tokutek TokuDB Storage Engine with Fractal Tree(tm) Technology | YES | YES | YES |
...
手動啟動TokuDB存儲引擎
如果你不想用ps_tokudb_admin腳本,就需要手動安裝存儲引擎,加載plugins:
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';
INSTALL PLUGIN tokudb_background_job_status SONAME 'ha_tokudb.so';
然後獲取當前存儲引擎列表:
mysql> SHOW ENGINES;
...
| TokuDB | YES | Tokutek TokuDB Storage Engine with Fractal Tree(tm) Technology | YES | YES | YES |
...
然後show plugins檢查是否安裝正確:
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 |
...
TokuDB版本
查看TokuDB版本:
mysql> SELECT @@tokudb_version;
+------------------+
| @@tokudb_version |
+------------------+
| 5.7.10-1rc1 |
+------------------+
1 row in set (0.00 sec)
TokuDB使用富索引,讓更快的索引,可以讓查詢更快。比如覆蓋或者聚集索引。
TokuDB允許一個secondary索引定義為聚集索引。以為這所有的表上的列都在這個secondary索引上。Percona Server解析並且查詢優化的時候支持多聚集鍵,當TokuDB被使用的時候。也就是說在特定環境下,查詢優化器會避免主鍵聚集索引讀取,而是使用secondary 聚集索引讀取。
現在解析式支持一下語法:
CREATE TABLE ... ( ..., CLUSTERING KEY identifier (column list), ...
CREATE TABLE ... ( ..., UNIQUE CLUSTERING KEY identifier (column list), ...
CREATE TABLE ... ( ..., CLUSTERING UNIQUE KEY identifier (column list), ...
CREATE TABLE ... ( ..., CONSTRAINT identifier UNIQUE CLUSTERING KEY identifier (column list), ...
CREATE TABLE ... ( ..., CONSTRAINT identifier CLUSTERING UNIQUE KEY identifier (column list), ...
CREATE TABLE ... (... column type CLUSTERING [UNIQUE] [KEY], ...)
CREATE TABLE ... (... column type [UNIQUE] CLUSTERING [KEY], ...)
ALTER TABLE ..., ADD CLUSTERING INDEX identifier (column list), ...
ALTER TABLE ..., ADD UNIQUE CLUSTERING INDEX identifier (column list), ...
ALTER TABLE ..., ADD CLUSTERING UNIQUE INDEX identifier (column list), ...
ALTER TABLE ..., ADD CONSTRAINT identifier UNIQUE CLUSTERING INDEX identifier (column list), ...
ALTER TABLE ..., ADD CONSTRAINT identifier CLUSTERING UNIQUE INDEX identifier (column list), ...
CREATE CLUSTERING INDEX identifier ON ...
定義secondary聚集索引:
CREATE TABLE table (
column_a INT,
column_b INT,
column_c INT,
PRIMARY KEY index_a (column_a),
CLUSTERING KEY index_b (column_b)) ENGINE = TokuDB;
TokuDB可以使用聚集索引是因為它出色的壓縮和很高的索引率。
TokuDB可以讓你在線的添加索引到已經存在的表中。不是使用online 關鍵字,還是使用tokudb_create_index_online的會話系統變量:
mysql> SET tokudb_create_index_online=on;
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE INDEX index ON table (field_name);
也可以使用,alter table命令離線方式的創建索引,不管有沒有開啟tokudb_create_index_online都是離線的。只有create index方式可以在線的創建。
Online創建索引比offline 的滿,和服務繁忙程度有關。創建索引的精度可以通過命令show processlist查看。一旦索引創建完成,新的索引在下個查詢計劃中就會被使用。
如果在同一個表上有多余一個的創建索引,索引會線性的被創建。索引創建會等待另外一個完成,在show processlist中會顯示被鎖定。推薦在創建索引完成之後再來執行下一個。
TokuDB可以讓你添加和刪除已經存在表的列,擴展char,varchar,varbinary,integer類型,或者重命名已經存在的列。HCADER會短暫的鎖定表,修改數據字段。然後當數據從磁盤讀入的時候都會被修改。對於列重命名,所有的工作在幾秒鐘內完成,在磁盤上的數據不會被修改。
獲取HCADER的好性能,的幾點:
Ÿ 添加,刪除或者擴展操作的後續會被認為是fractal tree的一部分。
可以使用optimize table x來一次性處理,optimize
table並不會重建索引,但是會誘發HCADER的運行。
Ÿ 每個HCADER必須獨立的運行。如果想要增刪改多個列,那麼就寫多個語句。
Ÿ 避免HCADER和在線索引操作一起處理。
Ÿ 表鎖的事件有所不同,HCADER的鎖定事件是髒數據刷新的事件,因為mysql會在alter table之後關閉。如果最近發生過檢查點,那麼操作就會很快。如果有太多的髒數據,那麼刷新事件可能會很長。
Ÿ 避免刪除的列是索引的一部分。如果列是索引的一部分,那麼刪除會很慢。
Ÿ 在線擴展只支持char,varchar,varbinary和integer。如果字段是主鍵或者任何secondary索引的一部分也不支持。
Ÿ 重命名只能是一句一個列。
注意所有的列屬性必須制定,alter table change可能會很慢:
Ÿ 在線列重命名不支持以下字段,time,enum,blob,tinyblob,mediumblob,longblob。這些列的重命名會走標准的流程。
Ÿ 臨時表不能使用HCADER。
TokuDB提供不同級別的壓縮,是cpu和壓縮率之間的一些平衡。標准的壓縮使用少量的cpu但是壓縮級別也比較低,高級別的壓縮比較消耗cpu。
TokuDB壓縮發生在後台線程,表示高壓縮率並不會延遲數據庫。事實上,在某些某些情況下,壓縮率越高性能越好。。
注意:
一般在6核一下的推薦標准的壓縮,6核以上的推薦高壓縮
壓縮率的選擇還是取決於數據庫的時候,推薦使用默認配置。
壓縮在create table,alter table的基於每張表設置行格式:
CREATE TABLE table (
column_a INT NOT NULL PRIMARY KEY,
column_b INT NOT NULL) ENGINE=TokuDB
ROW_FORMAT=row_format;
如果在create table 的時候沒有設置行格式,那麼是怎麼壓縮看tokudb_row_format的設置。如果沒有設置tokudb_row_format,那麼壓縮就使用zlib。
Row_format和tokudb_row_format取值如下:
· TOKUDB_DEFUALT:以默認方式壓縮。在TokuDB 7.1,默認的使用zlib進行壓縮,之後可能會改。
· TOKUDB_FAST:這個設置使用quicklz壓縮。
· TOKUDB_SMALL:使用lzma進行壓縮。
另外也可以直接選擇壓縮庫,可用的壓縮庫:
· TOKUDB_ZLIB:使用zlib進行壓縮,提供中等的壓縮和cpu使用率
· TOKUDB_QUICKLZ:使用quicklz進行壓縮,提供輕量級的壓縮和低cpu使用率。
· TOKUDB_LZMA:使用lzma進行壓縮,提供最高的壓縮和cpu使用率。
· TOKUDB_SNAPPY:使用snappy進行壓縮,合理的高速的壓縮。
· TOKUDB_UNCOMPRESSED:這個設置關閉了壓縮,並且表不會被壓縮。
修改表的壓縮語法如下:
ALTER TABLE table
ROW_FORMAT=row_format;
注意:
修改表偶的壓縮至會影響性寫入的數據。修改表壓縮之後可以通過OPTIMZE TABLE把所有的block全部寫一遍。
TokuDB slave可以配置,讓來自master修改可以最小化。通過記錄fractal tree索引:
· Insert/update/delete操作可以控制取消read-modify-write的行為,然後注入消息到合適的fractal tree。
· Update/delete操作可以配置取消需要io的一致性檢查。
為了使用使用無io讀復制,服務需要配置:
· 在replication master:
o 設置為binlog行模式:BINLOG_FORMAT=ROW
· 在replication slave:
o Slave必須為只讀:read_only=1
o 取消一致性檢查:tokudb_rpl_unique_checks=0
o 關閉查找(read-modify-write) :tokudb_rpl_lookup_rows=0
可以在一個或者多個slave上配置。只要master使用了基於行的復制,優化在tokudb slave就可用。也就是說如果master使用innodb或者myisam表也是可用的。
默認,Tokudb檢查所有檢查點之間的打開的表和日志的修改,所以在系統崩潰的,Tokudb會恢復所有的表大ACID兼容狀態。所有的提交事務都會被反應在表上,並且沒有提交的事務都會被回滾。
默認檢查點60秒執行一次,如果檢查點需要更多的執行,那麼下一個檢查點會馬上執行。這個和日志文件截斷的頻率有關。用戶可以使用flush logs命令執行檢查點。當數據庫關閉會執行檢查點並且取消所有的感慨事務。日志在重啟的時候被截斷。
TokuDB保證日志文件能夠會到最後一次檢查點。當日志文件到達100MB,就會啟動一個新的文件。不管是否有檢查點,所有的日志文件比checkpoint老的都會被丟棄。如果檢查點時間被設置了很大的值,log的截斷頻率會減少。默認這個值為60s。
TokuDB為每個打開的事務保存了回滾日志,每個log的文件大小和事務的任務和被壓縮保存到磁盤的大小有關。回滾日志在相關事務完成後會被截斷。
恢復是自動的,TokuDB使用日志文件,和回滾日志來恢復。恢復的時間和和日志文件的大小和未壓縮回滾日志大小有關。因此如果沒有長時間運行的事務,那麼恢復過程是很快的。
但是用任何事務安全的數據庫,都假設在你了解硬件的寫緩存的基礎上。TokuDB提供事務安全的存儲引擎。如果寫入磁盤的行文,操作系統或者硬件沒有真正的寫入到磁盤,那麼crash之後會損壞。
這個時候需要關閉寫緩存,在ATA/SATA上使用以下命令:
$ hdparm -W0 /dev/hda
在某些情況下可以使用寫緩存:
· 寫緩存可以在xfs上,並且保證電池工作正常的情況下使用。如果在/var/log /messages上出現以下信息就不能使用寫緩存:
o Disabling barriers, not supported with external log device
o Disabling barriers, not supported by the underlying device
o Disabling barriers, trial barrier write failed
以下情況就必須關閉寫緩存:
· 如果你使用了ext3文件系統
· 如果使用了LVM
· 如果你使用了軟的RAID
· 如果使用了RAID有battery-backed-up memory
TokuDB有一個系統來跟蹤長運行語句:
· Bluk Load:當使用load data infile導入大量數據,使用show processlist命令可以查看到進度分為2部分,已不是提示為:Inserted about 1000000 rows。另外一部分是百分比,提示為Loading of data about 45% done。
· 增加索引,當使用alter table或者create index命令創建索引,show processlist顯示進度,會提示已經處理的行數。通過這個纖細來驗證進度。和bulk load類似,第一階段顯示行處理進度,第二階段顯示百分比。
· 提交和取消,當提交或者取消一個事務,使用show processlist,會評估事務操作處理。
為了吧表轉化到TokuDB引擎,可以使用alter table engine來修改,如果你想要從文件中導入數據,那麼使用load data infile,不要使用mysqldump,因為有點慢。
TokuDB有一個後台線程根據修改的評估來自動分析表。
後台作業調度是短暫的,如果在關服務的時候有後台作業運行,那麼會被停止。當服務重啟已經運行的都會被忽略,需要重新來,如果手動調用ANALYZE TABLE和後台作業沖突,那麼後台作業會被取消,可以通過表TOKUDB_BACKGROUND_JOB_STATUS查看後台作業是否運行。
新的tokudb_analyze_in_background變量可以用來實現控制時候ANALYZE TABLE是後台運行還是在前台。tokudb_analyze_mode用來控制ANALYZE TABLE的行為。
tokudb_analyze_mode變量用來實現對ANALYZE TABLE的控制:
TOKUDB_ANALYZE_CANCEL:取消在特定表上任何運行的或者應調用的作業。
TOKUDB_ANALYZE_STANDARD:使用已經存在分析算法。
TOKUDB_ANALYZE_RECOUNT_ROWS:重新計算表上的邏輯行並且更新當前的計數。
TOKUDB_ANALYZE_RECOUNT_ROWS 是新的機制,用來執行邏輯重算所有表中的行並且保存,作為表的評估值。這個模式增加是為了從老版本升級的TokuDB問題,老的TokuDB只支持物理行計數,並且沒有一個正確的邏輯行計數。新創建的表或者分區開始以邏輯行,並且不需要被重新計算除非一些邊界條件導致邏輯計數變得不准確。這個分析模式不會影響基數計數。會根據tokudb_analyze_in_background和tokudb_analyze_throttle。job運行後在設置變量不會影響當前job的運行。
取消任何後台線程,可以設置tokudb_analyze_mode=TOKUDBANALYZE_CANCEL並且在表上運行ANALYZE TABLE。
為了實現後台的分析和收集計數統計每個表上都維護了一個增量值,這個值並不是保存的,當服務重啟就會被設置為0.這個記錄了所有的寫操作。當這個值超過了tokudb_auto_analyze設置的值,那麼根據當前會話的設置會執行一個分析。其他對於這個表的分區就會停止,除非這個分析完成。當分析完成,值被設置為0,重新計算。
任何分析完成,狀態值都會被匯報到服務。半時反轉分析,也被實現,也就是說如果超過一半的tokudb_analyze_time時間過去,但是還沒有分析到數據量的一半,那麼分析會重啟,從最後一條數據開始往上分析,並且把分析結構累加到之前的結果上。
對於小表,自動分析可能每次修改都會執行。出發更是如下如果(table_delta >= ((table_rows *tokudb_auto_analyze) / 100))那麼就開始運行ANALYZE TABLE。如果用戶手動調用ANALYZE TABLE並且tokudb_auto_analyze被啟動了並且沒有沖突的後台作業,用戶運行的ANALYZE TABLE會和增量值超過了上線一樣,完成後會吧增量設置為0.
tokudb_analyze_in_background:如果設置為on,那麼任何analyze table都會在後台運行。
tokudb_analyze_mode:
TOKUDB_ANALYZE_CANCEL:取消在特定表上任何運行的或者應調用的作業。
TOKUDB_ANALYZE_STANDARD:使用已經存在分析算法。
TOKUDB_ANALYZE_RECOUNT_ROWS:重新計算表上的邏輯行並且更新當前的計數。
tokudb_analyze_throttle:表示當analyze table的時候最大每秒訪問的key
tokudb_analyze_time:會話變量控制分析操作花費的事件。
tokudb_auto_analyze:會話變量控制超過自動分析的比率,寫入操作到了這個比率就會更新。
tokudb_cardinality_scale_percent:弱化或者強化索引或者表的基數特性,比如innodb寫死50%,在400行數據,40個唯一值,公式如下:(200/40 *tokudb_cardinality_scale) / 100
INFORMATION_SCHEMA.TOKUDB_BACKGROUND_JOB_STATUS
具體看:
https://www.percona.com/doc/percona-server/5.7/tokudb/tokudb_variables.html
復制和binary log:
TokuDB支持binary log和復制,但是有個限制TokuDB,就是auto-increment功能的鎖機制沒有實現,所以並發插入語句可能會導致不確定的,那麼在slave上運行的時候會導致和master不匹配,只有在基於語句復制上才會發生。
在沒有索引或者索引是主鍵子集的表上使用REPLACE INTO或者INSERT IGNORE,tokudb_pk_insert_mode控制行是否被復制。
Uninformative error message
LOAD INFILE命令可能會導致錯誤,ERROR 1030 (HY000): Got error 1 from storage engine.消息也會說是因為磁盤空間不足導致臨時文件無法創建。
Transparent Huge Pages
如果啟動了transparent huge page,Tokudb不會啟動。使用以下命令來禁用:
# echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled
XA behavior vs. InnoDB
InnoDB會強制死鎖犧牲,但是Tokudb不會。
TokuDB使用key range lock來實現串行事務,在事務過程中獲取,在事務結束時釋放鎖。
TokuDB把這些數據結構存放在鎖樹中。鎖樹存放了每個事務的range鎖。另外鎖樹也保存了因為沖突沒有被獲得的鎖。當事務退出,那麼這些等待是鎖也會被退出。如果pengding的鎖沒有被授予,那麼鎖超時後也會退出。
TOKUDB_TRX在INFORMATION_SCHEMA中,可以用一下方式和mysql客戶端關聯:
SELECT * FROM INFORMATION_SCHEMA.TOKUDB_TRX,
INFORMATION_SCHEMA.PROCESSLIST
WHERE trx_mysql_thread_id = id;
Tokudb_locks表在information_schema中包含了授權了的TokuDB的事務中的鎖。使用以下語句和客戶端關聯:
SELECT id FROM INFORMATION_SCHEMA.TOKUDB_LOCKS,
INFORMATION_SCHEMA.PROCESSLIST
WHERE locks_mysql_thread_id = id;
Tokudb_lock_waits表也在information_schema中:
SELECT * FROM INFORMATION_SCHEMA.TOKUDB_LOCK_WAITS;
具體看:
https://www.percona.com/doc/percona-server/5.7/tokudb/tokudb_troubleshooting.html#engine-status
具體看:
https://www.percona.com/doc/percona-server/5.7/tokudb/tokudb_troubleshooting.html#global-status
Percona tokubackup是一個開源的備份tokudb的一個熱備工具。在備份期間不會鎖定數據庫。Tokubackup會獲取系統寫入文件的調用,並復制到備份目錄中。
TokuBackup包含在percona server 5.7.10和之後的版本,安裝可以使用ps_tokudb_admin腳本。
安裝TokuBackup:
1. 運行ps_tokudb_admin –enable-backup增加preload-hotbackup選項到[mysqld-safe]下的my.cnf中。
2. 重啟mysql服務
3. 運行ps_tokudb_admin –enable-backup安裝tokubackup插件。
備份的目錄必須存在,可以寫為空,並且屬於mysql啟動用戶。一旦目錄被創建備份可以使用以下命令備份:
mysql> set tokudb_backup_dir='/path_to_empty_directory';
備份工具沒有還原數據庫的功能,要使用rsync或者cp來還原文件。檢查還原的文件和對應的關系和權限。比如使用rsync來還原備份:
$ rsync -avrP /data/backup/ /var/lib/mysql/
修改所有者
$ chown -R mysql:mysql /var/lib/mysql
如果修改了某人tokudb數據目錄或者Tokudb日志目錄,那麼需要獨立的去設置。
$ rsync -avrP /data/backup/mysql_data_dir/ /var/lib/mysql/
$ rsync -avrP /data/backup/tokudb_data_dir/ /path/to/original/tokudb_data_dir/
$ rsync -avrP /data/backup/tokudb_log_dir/ /path/to/original/tokudb_log_dir/
$ chown -R mysql:mysql /var/lib/mysql
$ chown -R mysql:mysql /path/to/original/tokudb_data_dir
$ chown -R mysql:mysql /path/to/original/tokudb_log_dir
TokuBackup更新processlist的狀態,顯示備份的進度,可以使用show processlist查看。
可以通過正則表達式排除文件或者目錄,設置在tokudb_backup_exclude會話變量中。如果源文件名負荷這個正則表達式,那麼就會被排除。比如lost+found目錄:
mysql> SET tokudb_backup_exclude='/lost\\+found($|/)';
可以指定備份的閥值,tokudb_backup_throttle會話級別變量。這個變量表示每秒字節傳輸率。
你可以限制本地目標目錄,tokudb_backup_allowed_prefix系統變量。默認是null,備份沒有限制目標目錄。參數是只讀的只能通過my.cnf配置。
Tokubackup使用2個變量來獲取錯誤信息。Tokudb_backup_last_error, tokudb_backup_laster_error_string。當tokubackup發生一個錯誤,變量就會顯示顯影的錯誤代碼和錯誤信息。
mysql> SET tokudb_backup_dir='/tmp/backupdir';
ERROR 1231 (42000): Variable 'tokudb_backup_dir' can't be set to the value of '/tmp/backupdir'
mysql> SELECT @@tokudb_backup_last_error;
+----------------------------+
| @@tokudb_backup_last_error |
+----------------------------+
| 17 |
+----------------------------+
mysql> SELECT @@tokudb_backup_last_error_string;
+---------------------------------------------------+
| @@tokudb_backup_last_error_string |
+---------------------------------------------------+
| tokudb backup couldn't create needed directories. |
+---------------------------------------------------+
· 你必須關閉innodb異步io如果使用tukobackup備份innodb表。否則就會出現一致性錯誤。innodb_use_native_aio=0
· 如果需要還原到指定點,需要手動獲取binary log position。
· 事務存儲引擎會在備份還原後,第一次啟動會進行恢復。
· 表使用非事務引擎在備份的時候不會鎖定。所以最好在備份的時候避免表操作。
· 備份的時候目標目錄必須存在,並且為空
· TokuBackup會一直備份datadir目錄,選擇性的備份tokudb_data_dir和tokudb_log_dir,和binary log目錄。如果不在datadir中那麼需要獨立備份。
· 不支持其他目錄結構,innodb,myisam和其他存儲引擎必須在datadir下面。
· Buzhichi symbolic links
· 不備份配置文件
· 不備份datadir 外的表空間。
· 當備份的時候在執行optimize table或者alter table tablespace,那麼就無法恢復備份。
· 不支持增量備份。
具體看:
https://www.percona.com/doc/percona-server/5.7/tokudb/tokudb_faq.html