pt-archiver工具歸檔和恢復資料一例

chenfeng發表於2019-06-19

DBA或者運維人員經常需定期對資料進行歸檔和清除,我們可以使用percona的pt-archiver工具能完成這一功能,使得資料歸檔變得方便簡單。

歸檔資料一例:

原表結構為:

mysql>desc test.t1;

+-------+---------+------+-----+---------+-------+

| Field | Type    | Null | Key | Default | Extra |

+-------+---------+------+-----+---------+-------+

| id    | int(11) | NO   | PRI | NULL    |       |

| a     | int(11) | YES  | MUL | NULL    |       |

| b     | int(11) | YES  |     | NULL    |       |

+-------+---------+------+-----+---------+-------+

3 rows in set (0.00 sec)


mysql>show create table test.t1 \G

*************************** 1. row ***************************

       Table: t1

Create Table: CREATE TABLE `t1` (

  `id` int(11) NOT NULL,

  `a` int(11) DEFAULT NULL,

  `b` int(11) DEFAULT NULL,

  PRIMARY KEY (`id`),

  KEY `a` (`a`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

1 row in set (0.00 sec)


歸檔到檔案:

# pt-archiver --source h=192.168.140.51,u=root,p=123456,P=3306,D=test,t=t1 --file '/tmp/test.txt' --progress 500 --no-delete --statistics  --where '1=1' --txn-size 1000 --no-check-charset 

TIME                ELAPSED   COUNT

2019-06-19T16:14:48       0       0

2019-06-19T16:14:48       0     500

2019-06-19T16:14:49       0    1000

2019-06-19T16:14:49       0    1000

Started at 2019-06-19T16:14:48, ended at 2019-06-19T16:14:49

Source: D=test,P=3306,h=192.168.140.51,p=...,t=t1,u=root

SELECT 1000

INSERT 0

DELETE 0

Action          Count       Time        Pct

select           1001     0.6883      72.33

print_file       1000     0.0149       1.57

commit              2     0.0004       0.04

other               0     0.2480      26.06


注意:

pt-archiver操作的表必須有主鍵。

--where '1=1'條件是匯出全部資料,如果想匯出部分資料,可以設定where條件,例如--where 'b>500'

--no-check-charset 設定不校驗字符集,否則會報錯:

Character set mismatch: --source DSN uses latin1, table uses utf8mb4.  You can disable this check by specifying --no-check-charset.



常用的引數有:


    --limit 10000       每次取1000行資料用pt-archive處理,Number of rows to fetch and archive per statement.


    --txn-size  1000   設定1000行為一個事務提交一次,Number of rows pertransaction.


    --where 'id<3000'   設定操作條件


    --progress 1000    每處理1000行輸出一次處理資訊


    --statistics       輸出執行過程及最後的操作統計。(只要不加上--quiet,預設情況下pt-archive都會輸出執行過程的)


    --charset=UTF8     指定字符集為UTF8


    --bulk-delete      批次刪除source上的舊資料(例如每次1000行的批次刪除操作)


    --bulk-insert      批次插入資料到dest主機 (看dest的general log發現它是透過在dest主機上LOAD DATA LOCAL INFILE插入資料的)


    --replace          將insert into 語句改成replace寫入到dest庫


    --sleep 80         每次歸檔了limit個行記錄後的休眠80秒(單位為秒)

恢復資料例子:

恢復資料應使用load data命令

mysql>use peihy

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A


Database changed


mysql>CREATE TABLE `t1` (

    ->   `id` int(11) NOT NULL,

    ->   `a` int(11) DEFAULT NULL,

    ->   `b` int(11) DEFAULT NULL,

    ->   PRIMARY KEY (`id`),

    ->   KEY `a` (`a`)

    -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Query OK, 0 rows affected (0.18 sec)


mysql>load data infile '/tmp/test.txt' into table t1;

Query OK, 1000 rows affected (0.61 sec)

Records: 1000  Deleted: 0  Skipped: 0  Warnings: 0


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2648119/,如需轉載,請註明出處,否則將追究法律責任。

相關文章