pt-archiver 參數說明
pt-archiver是Percona-Toolkit工具集中的一個組件,是一個主要用于對MySQL表數據進行歸檔和清除工具。它可以將數據歸檔到另一張表或者是一個文件中。pt-archiver在清除表數據的過程中并不會影響OLTP事務的查詢性能。對于數據的歸檔,它可以歸檔到另一臺服務器上的另一張表,也可歸檔到一個文件中,文件可以用LOAD DATA INFILE進行數據裝載,這個功能其實就類似是表歷史數據的增量刪除。
基本說明
pt-archiver [OPTIONS] --source DSN --where WHERE
常用選項(OPTIONS)
--analyze
指定工具完成數據歸檔后對表執行'ANALYZE TABLE'操作。指定方法如'--analyze=ds',s代表源端表,d代表目標端表,也可以單獨指定。
--ask-pass
命令行提示密碼輸入,保護密碼安全,前提需安裝模塊perl-TermReadKey。
--buffer
指定緩沖區數據刷新到選項'--file'指定的文件并且在提交時刷新。
只有當事務提交時禁用自動刷新到'--file'指定的文件和刷新文件到磁盤,這意味著文件是被操作系統塊進行刷新,因此在事務進行提交之前有一些數據隱式刷新到磁盤。默認是每一行操作后進行文件刷新到磁盤。
--bulk-delete
指定單個語句刪除chunk的方式來批量刪除行,會隱式執行選項'--commit-each'。
使用單個DELETE語句刪除每個chunk對應的表行,通常的做法是通過主鍵進行逐行的刪除,批量刪除在速度上會有很大的提升,但如果有復雜的'WHERE'條件就可能會更慢。
--[no]bulk-delete-limit
默認值:yes
指定添加選項'--bulk-delete'和'--limit'到進行歸檔的語句中。
--bulk-insert
使用LOAD DATA LOCAL INFILE的方法,通過批量插入chunk的方式來插入行(隱式指定選項'--bulk-delete'和'--commit-each')
而不是通過逐行單獨插入的方式進行,它比單行執行INSERT語句插入的速度要快。通過隱式創建臨時表來存儲需要批量插入的行(chunk),而不是直接進行批量插入操作,當臨時表中完成每個chunk之后再進行統一數據加載。為了保證數據的安全性,該選項會強制使用選項'--bulk-delete',這樣能夠有效保證刪除是在插入完全成功之后進行的。
--channel
指定當主從復制環境是多源復制時需要進行歸檔哪個主庫的數據,適用于多源復制中多個主庫對應一個從庫的情形。
--charset,-A
指定連接字符集。
--[no]check-charset
默認值:yes
指定檢查確保數據庫連接時字符集和表字符集相同。
--[no]check-columns
默認值:yes
指定檢查確保選項'--source'指定的源端表和'--dest'指定的目標表具有相同的字段。
不檢查字段在表的排序和字段類型,只檢查字段是否在源端表和目標表當中都存在,如果有不相同的字段差異,則工具報錯退出。如果需要禁用該檢查,則指定'--no-check-columns'。
--check-slave-lag
指定主從復制延遲大于選項'--max-lag'指定的值之后暫停歸檔操作。默認情況下,工具會檢查所有的從庫,但該選項只作用于指定的從庫(通過DSN連接方式)。
--check-interval
默認值:1s
如果同時指定了選項'--check-slave-lag',則該選項指定的時間為工具發現主從復制延遲時暫停的時間。每進行操作100行時進行一次檢查。
--columns,-c
指定需要歸檔的表字段,如有多個則用','(逗號)隔開。
--commit-each
指定按每次獲取和歸檔的行數進行提交,該選項會禁用選項'--txn-size'。
在每次獲取表數據并進行歸檔之后,在獲取下一次數據和選項'--sleep'指定的休眠時間之前,進行事務提交和刷新選項'--file'指定的文件,通過選項'--limit'控制事務的大小。
--host,-h
指定連接的數據庫IP地址。
--port,-P
指定連接的數據庫Port端口。
--user,-u
指定連接的數據庫用戶。
--password,-p
指定連接的數據庫用戶密碼。
--socket,-S
指定使用SOCKET文件連接。
--databases,-d
指定連接的數據庫
--source
指定需要進行歸檔操作的表,該選項是必須指定的選項,使用DSN方式表示。
--dest
指定要歸檔到的目標端表,使用DSN方式表示。
如果該選項沒有指定的話,則默認與選項'--source'指定源端表為相同表。
--where
指定通過WHERE條件語句指定需要歸檔的數據,該選項是必須指定的選項。不需要加上'WHERE'關鍵字,如果確實不需要WHERE條件進行限制,則指定'--where 1=1'。
--file
指定表數據需要歸檔到的文件。使用類似MySQL DATE_FORMAT()格式化命名方式。
文件內容與MySQL中SELECT INTO OUTFILE語句使用相同的格式,文件命名選項如下所示:
'
%Y:年,4位數(Year, numeric, four digits)
%m:月,2位數(Month, numeric (01..12))
%d:日,2位數(Day of the month, numeric (01..31))
%H:小時(Hour (00..23))
%i:分鐘(Minutes, numeric (00..59))
%s:秒(Seconds (00..59))
%D:數據庫名(Database name)
%t:表名(Table name)
例如:--file '/var/log/archive/%Y-%m-%d-%D.%t'
'
--output-format
指定選項'--file'文件內容輸出的格式。
默認不指定該選項是以制表符進行字段的分隔符,如果指定該選項,則使用','(逗號)作為字段分隔符,使用'"'(雙引號)將字段括起。用法示例:'--output-format=dump'。
--for-update
指定為每次歸檔執行的SELECT語句添加FOR UPDATE子句。
--share-lock
指定為每次歸檔執行的SELECT語句添加LOCK IN SHARE MODE子句。
--header
指定在文件中第一行寫入字段名稱作為標題。
--ignore
指定為INSERT語句添加IGNORE選項。
--limit
默認值:1
指定每條語句獲取表和歸檔表的行數。
--local
指定不將OPTIMIZE和ANALYZE語句寫入binlog。
--max-lag
默認值:1s
指定允許主從復制延遲時長的最大值,單位秒。如果在每次獲取行數據之后主從延遲超過指定的值,則歸檔操作將暫停執行,暫停休眠時間為選項'--check-interval'指定的值。待休眠時間結束之后再次檢查主從延遲時長,檢查方法是通過從庫查詢的'Seconds_Behind_Master'值來確定。如果主從復制延遲一直大于該參數指定值或者從庫停止復制,則操作將一直等待直到從庫重新啟動并且延遲小于該參數指定值。
--no-delete
指定不刪除已被歸檔的表數據。
--optimize
指定工具完成數據歸檔后對表執行'OPTIMIZE TABLE'操作。指定方法如'--analyze=ds',s代表源端表,d代表目標端表,也可以單獨指定。
--primary-key-only
指定只歸檔主鍵字段,是選項'--columns=主鍵'的簡寫。
如果工具歸檔的操作是進行DELETE清除時最有效,因為只需讀取主鍵一個字段而無需讀取行所有字段。
--progress
指定每多少行打印進度信息,打印當前時間,已用時間以及多少行進行歸檔。
--purge
指定執行的清除操作而不是歸檔操作。允許忽略選項'--dest'和'--file'進行操作,如果只是清除操作可以結合選項'--primary-key-only'會更高效。
--quiet,-q
指定工具靜默執行,不輸出任何的執行信息。
--replace
指定寫入選項'--dest'指定目標端表時改寫INSERT語句為REPLACE語句。
--retries
默認值:1
指定歸檔操作遇到死鎖或超時的重試次數。當重試次數超過該選項指定的值時,工具將報錯退出。
--run-time
指定工具歸檔操作在退出之前需要運行的時間。允許的時間后綴名為s=秒,m=分,h=小時,d=天,如果沒指定,默認為s。
--[no]safe-auto-increment
默認值:yes
指定不使用自增列(AUTO_INCREMENT)最大值對應的行進行歸檔。
該選項在進行歸檔清除時會額外添加一條WHERE子句以防止工具刪除單列升序字段具有的具有AUTO_INCREMENT屬性最大值的數據行,為了在數據庫重啟之后還能使用到AUTO_INCREMENT對應的值,但這會引起無法歸檔或清除字段對應最大值的行。
--set-vars
默認:
wait_timeout=10000
innodb_lock_wait_timeout=1
lock_wait_timeout=60
工具歸檔時指定參數值,如有多個用','(逗號)分隔。如'--set-vars=wait_timeout=5000'。
--skip-foreign-key-checks
指定使用語句SET FOREIGN_KEY_CHECKS = 0禁用外鍵檢查。
--sleep
指定工具在通過SELECT語句獲取歸檔數據需要休眠的時間,默認值是不進行休眠。在休眠之前事務并不會提交,并且選項'--file'指定的文件不會被刷新。如果指定選項'--commit-each',則在休眠之前會進行事務提交和文件刷新。
--statistics
指定工具收集并打印操作的時間統計信息。
統計信息示例如下:
'
Started at 2008-07-18T07:18:53, ended at 2008-07-18T07:18:53
Source: D=db,t=table
SELECT 4
INSERT 4
DELETE 4
Action Count Time Pct
commit 10 0.1079 88.27
select 5 0.0047 3.87
deleting 4 0.0028 2.29
inserting 4 0.0028 2.28
other 0 0.0040 3.29
'
--txn-size
默認:1
指定每個事務處理的行數。如果是0則禁用事務功能。
--version
顯示工具的版本并退出。
--[no]version-check
默認值:yes
檢查Percona Toolkit、MySQL和其他程序的最新版本。
--why-quit
指定工具打印當非因完成歸檔行數退出的原因。
在執行一個自動歸檔任務時該選項與選項'--run-time'一起使用非常方便,這樣可以確定歸檔任務是否在指定的時間內完成。如果同時指定了選項'--statistics',則會打印所有退出的原因。
DSN選項(DSN)
可以使用DSN方式來連接數據庫,DSN選項為key=value方式,在等號的兩側不能有空格出現,并且區分大小寫,多個選項之前以','(逗號)隔開,主要選項如下:
a
歸檔操作是在哪個庫下進行的,相當于USE操作。
A
指定默認字符集。
b
當值為true時,禁止SQL_LOG_BIN,相當于SQL_LOG_BIN = 0。
D
指定包含需要歸檔表的數據庫。
h
指定連接的主機。
u
指定連接的用戶。
p
指定連接需要的密碼。
P
指定連接的端口。
S
指定連接的SOCKET文件。
t
指定需要歸檔的表。
i
指定需要使用的索引。
選項用法說明
工具至少需指定選項--dest、--file或--purge其中之一;
選項--ignore和--replace是互斥的;
選項--txn-size和--commit-each是互斥的;
選項--share-lock和--for-update是互斥的;
--analyze和--optimize是互斥的。
本次測試是基于employees表以及新建的yoon表
CREATE TABLE `yoon` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`v_int` int(11) DEFAULT NULL,
`v_string` varchar(50) DEFAULT NULL,
`s_string` char(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=80001 DEFAULT CHARSET=utf8;
創建存儲過程i_yoon插入測試數據
delimiter $$
CREATE PROCEDURE i_yoon (IN row_num INT)
BEGIN
DECLARE i INT DEFAULT 0 ;
WHILE i < row_num DO
INSERT INTO yoon (v_int, v_string, s_string)
VALUES
(
floor(1 + rand() * 1000000),
substring(
MD5(RAND()),
1,
floor(1 + rand() * 20)
),
substring(MD5(RAND()), 1, 20)
) ;
SET i = i + 1 ;
END
WHILE ; END$$
delimiter ;
call i_yoon(200000);
在目標端創建測試庫hank,表結構yoon:
CREATE TABLE `yoon` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`v_int` int(11) DEFAULT NULL,
`v_string` varchar(50) DEFAULT NULL,
`s_string` char(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=80001 DEFAULT CHARSET=utf8;
執行歸檔,不刪除源端數據:--source 源端,--dest:目標端,--no-delete:不刪除源端數據
pt-archiver --source h=127.0.0.1,P=3306,u=admin,p='admin',D=yoon,t=yoon,A=utf8 --dest h=127.0.0.1,P=3307,u=admin,p='admin',D=hank,t=yoon,A=utf8 --charset=utf8 --where 'id <= 20000' --progress 50 --txn-size=1000 --statistics --no-delete --ask-pass --limit=200 --sleep=1 --dry-run
執行歸檔,刪除源端數據:--source 源端,--dest:目標端
pt-archiver --source h=127.0.0.1,P=3306,u=admin,p='admin',D=yoon,t=yoon,A=utf8 --dest h=127.0.0.1,P=3307,u=admin,p='admin',D=hank,t=yoon,A=utf8 --charset=utf8 --where 'id <= 20000' --progress 50 --txn-size=1000 --statistics --ask-pass --limit=200 --sleep=1 --dry-run
表歸檔到表(批量進行)
批量進行歸檔涉及的選項是--limit,批量進行插入涉及的選項為--bulk-insert,指定選項--bulk-insert同時也會指定選項--bulk-delete,如果不刪除已歸檔數據,則需要指定選項--no-delete
pt-archiver --source h=127.0.0.1,P=3306,u=admin,p='admin',D=yoon,t=yoon,A=utf8 --dest h=127.0.0.1,P=3308,u=admin,p='admin',D=hank,t=yoon,A=utf8 --charset=utf8 --where "id <= 20000" --progress=50 --txn-size=1000 --limit=50 --statistics --no-delete --bulk-insert --ask-pass --dry-run
表歸檔到文件
表歸檔到文件將選項--dest換成--file,并且根據需要添加選項--output-format
pt-archiver --source h=127.0.0.1,P=3306,u=admin,p='admin',D=employees,t=employees,A=utf8 --file='/tmp/yoon_%Y-%m-%d.sql' --charset=utf8 --output-format='dump' --where "id <= 20000" --progress=50 --txn-size=1000 --limit=50 --statistics --no-delete --ask-pass --dry-run
表清除數據:--txn-size 表示200行提交一次失誤,若最后刪除的數據低于200行報錯,若改--txn-size值
如果只是進行表數據清除操作而不做歸檔操作,則可以忽略選項--dest或--file,通過指定選項--purge,可以先使用選項--dry-run打印查詢需要清除數據的執行語句,做好確認之后再執行。
pt-archiver --source h=localhost,P=3306,u=root,p='Asd.123@#',D=yoon,t=yoon --purge --charset=utf8 --where "id <= 400000" --progress=200 --limit=200 --sleep=1 --txn-size=200 --statistics --dry-run
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。