場景:僅需恢復某張表(如誤 DROP TABLE),不想全庫恢復。利用 Transportable Tablespace (TTS) 功能,配合 --include-tables 實現單表級備份與恢復。
CREATE DATABASE wind DEFAULT CHARSET gbk;
USE wind;
CREATE TABLE t1 (sid INT NOT NULL, sname VARCHAR(100) NOT NULL) ENGINE=InnoDB CHARSET=gbk;
CREATE TABLE t2 AS SELECT * FROM t1;
-- 存儲過程灌入 100 萬行測試數據
| 階段 | 命令關鍵參數 | LSN 推進 |
|---|---|---|
| 全備 | --use-tts --include-tables='wind.t2' --backup-dir=/backup --log-bin-index=... backup-and-apply-log | end_lsn=138866623 |
| 增量 1 | --incremental --start-lsn=138866623 --incremental-backup-dir=/backupinc | end_lsn=138868639 |
| 增量 2 | --incremental --start-lsn=138868639 --incremental-backup-dir=/backupinc | end_lsn=139571560 |
mysqlbackup --backup-dir=/backup/2015-04-02_12-41-45 --incremental-backup-dir=/backupinc/2015-04-02_12-44-02 apply-incremental-backup
mysqlbackup --backup-dir=/backup/2015-04-02_12-41-45 --incremental-backup-dir=/backupinc/2015-04-02_12-46-48 apply-incremental-backup
DROP TABLE wind.t2;
chown -R mysql:mysql /backup /usr/local/mysql
mysqlbackup --host=127.0.0.1 --port=3306 --user=root --password=123 \
--datadir=/usr/local/mysql/data \
--log-bin-index=/usr/local/mysql/mysql_logs/binary_log/mysql-bin.index \
--backup-dir=/backup/2015-04-02_12-41-45 \
--include-tables='wind\.t2$' \
copy-back
chown -R mysql:mysql 目標 datadir 與備份目錄。--include-tables 支援正則:'wind\.t2$' 精確匹配單表。ALTER TABLE t2 DISCARD TABLESPACE; ALTER TABLE t2 IMPORT TABLESPACE;
USE wind;
SHOW TABLES; -- 僅 t2
SELECT COUNT(*) FROM t2; -- 999990(含增量刪除 10 行)
SELECT COUNT(*) FROM t2 WHERE sname='ocpyang mysql test!'; -- 5000(增量更新)
innodb_file_per_table=ON、表使用獨立 .ibd 文件、MySQL Enterprise Backup 許可證。xtrabackup --tables=wind.t2 --copy-back 同樣支援 TTS 單表恢復。一句話總結: mysqlbackup TTS + 正則 include-tables + 權限對齊 = 分鐘級單表恢復,避開全庫恢復的漫長等待。