1. 程式人生 > >MySQL備份恢復(未完成)

MySQL備份恢復(未完成)

MySQL備份恢復

本文件主要圍繞生產中經常使用的mysqldump、mydumper、xtrabackup等工具來進行備份恢復的學習。

1. MySQL 的備份方式

MySQL的備份方法,劃分為如下三種:

  • 冷備份 冷備是指在資料庫關閉的情況下進行備份,這種備份非常簡單,只需關閉資料庫,複製相關的物理檔案即可。

  • 溫備份 溫備份也是在資料庫執行的過程中進行備份,但是備份會對資料庫操作有所影響。

  • 熱備份 熱備份是指在資料庫執行的過程中進行備份,對生產環境中的資料庫執行沒有任何影響。常見的熱備份方案是利用mysqldump、xtrabackup等工具進行備份。

根據備份檔案的型別,備份又可以劃分如下兩種:

  • 物理備份 物理備份是指複製資料庫的物理檔案,既可以是在資料庫執行中複製(如xtrabackup這類工具),也可以是在資料庫停止執行時直接的資料檔案複製。

  • 邏輯備份 邏輯備份是指備份檔案的內容是可讀的,該文字一般是由一條條SQL語句或者表的實際資料組成。常見的邏輯備份方式有mysqldump、select * into outfile等方法。

按照備份資料庫的內容來分,備份又可以分為:

  • 完全備份 完全備份是指對資料庫進行一個完整的備份。

  • 增量備份 增量備份是指在上次完全備份的基礎是,對於更改的資料進行備份。

  • 日誌備份 日誌備份主要針對MySQL資料庫binlog的備份,通過對一個完全備份進行binlog的重做(replay)來完成資料庫的point-in-time的恢復工作。MySQL資料庫複製(replication)的原理就是非同步實時地將二進位制日誌重做傳送並應用到(slave)資料庫。

2. 冷備

冷備就是在資料庫處於關閉狀態下的備份,好處可以保證資料庫的晚自習,備份過程簡單並且恢復速度相對快一些。

冷備的備份與恢復過程:

1) 停止MySQL服務

# mysqladmin -S /tmp/mysql3306.sock shutdown

2) 備份資料目錄

# cd /data/mysql/
# tar -cvjpf mysql3306.tar.bz2 mysql3306   //-c為建立一個打包檔案,相應的-f後面接建立的檔案的名稱,使用了.tar.bz2字尾,-j標誌使用bzip2壓縮,最後面為具體的操作物件mysql3306目錄

# 檢視
# tar -tvjf mysql3306.tar.bz2  //-t為檢視操作,則-f對應所檢視的檔案的名稱,檔案字尾顯示使用bzip2進行壓縮,所以加入-j選項,-v會顯示詳細的許可權資訊

3) 恢復資料

# cd /data/mysql/
# rm -rf mysql3306
# tar -xvjf mysql3306.tar.bz2    //-x為解壓操作,則-f指定的是解壓使用的檔案,檔案字尾顯示使用bzip2進行壓縮,所以加入-j選項,即使用bzip2解壓

3. 熱備

熱備是在資料庫處於執行狀態下的備份,不影響現有業務的正常進行。

熱備又分為邏輯備份和物理備份。

3.1 邏輯備份之 - mysqldump

mysqldump客戶端實用程式執行邏輯備份,生成一組SQL語句,可以執行這些語句來重現原始資料庫物件定義和表資料。 它轉儲一個或多個MySQL資料庫以備份或傳輸到另一個SQL伺服器。 mysqldump命令還可以生成CSV,其他分隔文字或XML格式的輸出。

3.1.1 mysqldump語法如下

Usage: mysqldump [OPTIONS] database [tables]
OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR     mysqldump [OPTIONS] --all-databases [OPTIONS]

3.1.2 mysqldump常見的引數

mysqldump的引數有很多,可以通過使用mysqldump --help命令來檢視所有引數,有些引數有縮寫形式,如--all-databases的縮寫形式為-A。這裡列舉一些常見的引數。

  • -u, –user=name 指定連線的使用者名稱

  • -p, –password[=name] 指定使用者的密碼,這裡可以指定引數名,若不指定引數值,mysqldump隨後將提示輸入密碼,以保護賬戶口令的安全

  • -S, –socket=name 指定socket檔案連線

  • -h, –host=name 指定連線的伺服器名

  • -P, –port=# 指定連線的伺服器埠號

  • –tables 匯出指定的表物件,格式為 ‘dbname tablename’,如mysqldump -S /tmp/mysql3306.sock test t1,預設會覆蓋-B, --databases引數

  • –single-transaction 在備份開始前,先執行start transaction命令,以此來獲得備份的一致性,當前該引數只對InnoDB儲存引擎有效。當啟用該引數並進行備份時,確保沒有其他任何的DDL語句執行(ALTER TABLE, DROP TABLE, RENAME TABLE,TRUNCATE TABLE),因為一致性讀並不能隔離DDL操作。啟用此引數時,引數--lock-tables將自動禁用。

  • -A, –all-databases 備份所有資料庫

  • -B, –databases 備份指定的資料庫,如mysqldump -S /tmp/mysql3306.sock --database db1 db2

  • –default-character-set=name 設定字符集,預設為以伺服器設定的字符集進行匯出。

  • -l, –lock-tables 以只讀方式依次鎖住每個庫下的所有表,預設啟用。使用--skip-lock-tables禁用。不能保證所有庫下的表備份一致。

  • -x, –lock-all-tables 在備份過程中,對所有庫的所有表,同時鎖定。若指定了本引數,則會自動禁用--single-transaction-l, --lock-tables引數。

  • –add-drop-database 在任何建立庫語句前,附加drop database語句。

  • –add-drop-table 在任何建表語句錢,附加drop table語句。預設啟用。如果不希望生成drop table語句,可以通過--skip-add-drop-table引數禁用。

  • –add-drop-trigger 建立任何觸發器前,附加drop trigger語句。

  • –add-locks 在生成的insert語句錢附加lock語句,預設啟用。使用 --skip-add-locks來禁用。

  • –allow-keywords 允許建立使用關鍵字的列名。

  • –master-data[=#] 該引數有1和2兩個值,如果值等於1,就會在備份檔案中新增一個change master語句。如果值為2,就會在備份檔案中新增一個帶有註釋符號的change master語句。

  • * –dump-slave[=#]* 該引數用於在從庫備份資料,線上搭建新的從庫時使用。此引數也有1和2兩個值。值為1時,在備份檔案中新增一個change master語句。值為2時,就會在備份檔案中新增一個帶有註釋符號的change master語句。

  • -t, –no-create-info 備份過程中,只備份表資料,不備份表結構

  • -d, –no-data 備份過程中,只備份表結構,不備份表資料

  • -c, –complete-insert 使用完整的insert語句會包含表中的列資訊,這麼做可以提高插入效率。

  • -q, –quick 表示匯出時不會先將資料載入至buffer中,而是直接輸出。預設啟用,使用 --skip-quick禁用。

  • -w, –where=name 匯出給定條件的資料。

3.1.3 mysqldump備份流程

開啟general_log以觀察備份流程。

mysql> set global general_log = 1;

# mysqldump -S /tmp/mysql3306.sock --master-data=2 --single-transaction test > /tmp/testdb.sql

mysql> set global general_log = 0;

mysql> show variables like '%gen%';
+------------------+-----------------------------------------+
| Variable_name    | Value                                   |
+------------------+-----------------------------------------+
| general_log      | OFF                                     |
| general_log_file | /data/mysql/mysql3306/data/mysqldb1.log |
+------------------+-----------------------------------------+


1. FLUSH /*!40101 LOCAL */ TABLES
2. FLUSH TABLES WITH READ LOCK
3. SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
4. START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */
5. SHOW VARIABLES LIKE 'gtid\_mode'
6. SHOW MASTER STATUS
7. UNLOCK TABLES
8. show databases;
9. show create database if not exists 'dbname';
10. SAVEPOINT sp
11. show tables
12. show table status like 'account'
13. SET SQL_QUOTE_SHOW_CREATE=1
14. SET SESSION character_set_results = 'binary'
15. show create table `account`
16. SET SESSION character_set_results = 'utf8'
17. show fields from `account`
18. SELECT /*!40001 SQL_NO_CACHE */ * FROM `account`
19. SET SESSION character_set_results = 'binary'
20. use `test`
21. select @@collation_database
22. SHOW TRIGGERS LIKE 'account'
23. SHOW CREATE TRIGGER `ins_sum`
24. SET SESSION character_set_results = 'utf8'
25. ROLLBACK TO SAVEPOINT sp
26. ...
27. ROLLBACK TO SAVEPOINT sp
28. RELEASE SAVEPOINT sp

3.1.4 mysqldump常見用法

  • 1) 全庫的備份恢復

    備份全庫

    mysqldump -S /tmp/mysql3306.sock --master-data=2 --single-transaction -A >alldb-`date +%Y%M%d`.sql

    恢復全庫

    mysql -S /tmp/mysql3306.sock < alldb-20180910.sql
  • 2) 指定庫的備份恢復

    備份指定庫

    mysqldump -S /tmp/mysql3306.sock --single-transaction -B test >db-`date +%Y%m%d`.sql
    

    恢復指定庫

    mysql -S /tmp/mysql3306.sock < db-20180910.sql
  • 3)指定表的備份與恢復

    備份t1與b表

    mysqldump -S /tmp/mysql3306.sock --single-transaction test t1 b >db-`date +%Y%m%d`.sql
    

    恢復t1與b表

    mysql -S /tmp/mysql3306.sock  test < db-20180910.sql
  • 4)只備份表的表結構資訊

    備份test庫中t1與b表的表結構資訊

    mysqldump -S /tmp/mysql3306.sock --single-transaction test t1 b -d >db-`date +%Y%m%d`.sql
    
    ...
    DROP TABLE IF EXISTS `b`;
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `b` (
    `b1` int(11) DEFAULT NULL,
    `name` varchar(10) NOT NULL DEFAULT 'w',
    KEY `idx_b1` (`b1`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    /*!40101 SET character_set_client = @saved_cs_client */;
    /*!40103 SET [email protected]_TIME_ZONE */;
    
    /*!40101 SET [email protected]_SQL_MODE */;
    /*!40014 SET [email protected]_FOREIGN_KEY_CHECKS */;
    /*!40014 SET [email protected]_UNIQUE_CHECKS */;
    /*!40101 SET [email protected]_CHARACTER_SET_CLIENT */;
    /*!40101 SET [email protected]_CHARACTER_SET_RESULTS */;
    /*!40101 SET [email protected]_COLLATION_CONNECTION */;
    /*!40111 SET [email protected]_SQL_NOTES */;
    
    -- Dump completed on 2018-09-10 16:27:50
    
  • 5)只備份表的資料資訊

    備份test庫中t1與b表的表結構資訊

    mysqldump -S /tmp/mysql3306.sock --single-transaction test t1 b -t >db-`date +%Y%m%d`.sql
    
    ...
    LOCK TABLES `t1` WRITE;
    /*!40000 ALTER TABLE `t1` DISABLE KEYS */;
    INSERT INTO `t1` VALUES (1,'aaa'),(3,'aaa'),(4,'bbb'),(2,'ccc'),(5,'ccc'),(6,'zzz');
    /*!40000 ALTER TABLE `t1` ENABLE KEYS */;
    UNLOCK TABLES;
    
    --
    
    -- Dumping data for table `b`
    --
    
    
    LOCK TABLES `b` WRITE;
    /*!40000 ALTER TABLE `b` DISABLE KEYS */;
    INSERT INTO `b` VALUES (1,'w'),(2,'w'),(3,'w'),(4,'w'),(5,'w');
    /*!40000 ALTER TABLE `b` ENABLE KEYS */;
    UNLOCK TABLES;
    /*!40103 SET [email protected]_TIME_ZONE */;
    
  • 6)備份指定條件的資料

    備份test庫的t1表,並且大於5的資料。

    mysqldump -S /tmp/mysql3306.sock --single-transaction test t1 --where='id>5'
    
    
    -- MySQL dump 10.13  Distrib 5.7.23, for linux-glibc2.12 (x86_64)
    --
    
    -- Host: localhost    Database: test
    <hr />
    
    -- Server version  5.7.23-log
    
    /*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */;
    /*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */;
    /*!40101 SET @[email protected]@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;
    /*!40103 SET @[email protected]@TIME_ZONE */;
    /*!40103 SET TIME_ZONE='+00:00' */;
    /*!40014 SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
    /*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
    /*!40101 SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
    /*!40111 SET @[email protected]@SQL_NOTES, SQL_NOTES=0 */;
    
    --
    
    -- Table structure for table `t1`
    --
    
    
    DROP TABLE IF EXISTS `t1`;
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `t1` (
    `id` int(11) NOT NULL,
    `name` varchar(10) DEFAULT NULL,
    PRIMARY KEY (`id`),
    KEY `idx_name` (`name`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    /*!40101 SET character_set_client = @saved_cs_client */;
    
    --
    
    -- Dumping data for table `t1`
    --
    
    -- WHERE:  id>5
    
    LOCK TABLES `t1` WRITE;
    /*!40000 ALTER TABLE `t1` DISABLE KEYS */;
    INSERT INTO `t1` VALUES (6,'zzz');
    /*!40000 ALTER TABLE `t1` ENABLE KEYS */;
    UNLOCK TABLES;
    /*!40103 SET [email protected]_TIME_ZONE */;
    
    /*!40101 SET [email protected]_SQL_MODE */;
    /*!40014 SET [email protected]_FOREIGN_KEY_CHECKS */;
    /*!40014 SET [email protected]_UNIQUE_CHECKS */;
    /*!40101 SET [email protected]_CHARACTER_SET_CLIENT */;
    /*!40101 SET [email protected]_CHARACTER_SET_RESULTS */;
    /*!40101 SET [email protected]_COLLATION_CONNECTION */;
    /*!40111 SET [email protected]_SQL_NOTES */;
    
    -- Dump completed on 2018-09-10 16:03:29
    

3.2 邏輯備份之 - select ... into outfile

SELECT … INTO 語句也是一種邏輯備份的方法,更準確地說是匯出一張表中的資料。

3.2.1 語法

SELECT  [column 1],[column 2]... 
    INTO
    OUTFILE 'file_name'
    [{FIELDS | COLUMNS}
        [TERMINATED BY 'string']
        [[OPTIONALLY] ENCLOSED BY 'char']
        [ESCAPED BY 'char']
    ]
    [LINES
        [STARTING BY 'string']
        [TERMINATED BY 'string']
    ]
 FROM TABLE WHERE ...

FIELDS TERMINATED BY 'string'*:表示每個列的分隔符。

[OPTIONALLY] ENCLOSED BY 'char:表示對於字串的包含符

ESCAPED BY 'char': 表示轉義符

STARTING BY 'string': 表示每行的開始符號

TERMINATED BY 'string': 表示每行的結束符號

如果沒有指定任何的FILEDS和LINES的選項,預設使用以下的設定:

FIELDS TERMINATED BY ‘\t’ ENCLOSED BY ” ESCAPED BY ‘\\

LINES STARTING BY ” TERMINATED BY ‘\n

3.2.2 引數

要想支援select … into 語法,首先得設定引數secure-file-priv,此引數的值有以下:

  • empty string 如果為空,則變數無效。這不是一個安全的設定。

  • null值 如果設定為NULL,則伺服器禁用匯入和匯出操作。

  • dirname 如果設定為目錄名稱,則伺服器會將匯入和匯出操作限制為僅適用於該目錄中的檔案。目錄必須存在;伺服器不會建立它。

3.3.3 匯出匯入示例

select ... into outfile匯出資料與LOAD DATA匯入資料示例

[email protected] [test] 09:41:38> select * from t1 into outfile '/tmp/t1.txt';
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

將引數設定為:
secure_file_priv = /data/mysql/mysql3306/outfile

匯出資料
mysql> select * from t1 into outfile '/data/mysql/mysql3306/outfile/t1.txt';

# cat t1.txt 
1   aaa
3   aaa
4   bbb
2   ccc
5   ccc
6   zzz

恢復資料

mysql> delete from t1;

mysql> LOAD DATA INFILE '/data/mysql/mysql3306/outfile/t1.txt' into table t1;

mysql> select * from t1;
+----+------+
| id | name |
+----+------+
|  1 | aaa  |
|  3 | aaa  |
|  4 | bbb  |
|  2 | ccc  |
|  5 | ccc  |
|  6 | zzz  |
+----+------+
6 rows in set (0.00 sec)

3.3.4 SELECT OUTFILE + awk

匯出資料
mysql> select * from t1 into outfile '/data/mysql/mysql3306/outfile/t1.txt';

mysql> delete from t1;

利用awk生成匯入sql
# cat t1.txt |awk '{print "insert into test.t1 values("$1",'\''"$2"'\'');"}' > into_t1.sql

# cat into_t1.sql
insert into test.t1 values(1,'aaa');
insert into test.t1 values(3,'aaa');
insert into test.t1 values(4,'bbb');
insert into test.t1 values(2,'ccc');
insert into test.t1 values(5,'ccc');
insert into test.t1 values(6,'zzz');

匯入資料
# mysql -S /tmp/mysql3306.sock < into_t1.sql

mysql> select * from test.t1;
+----+------+
| id | name |
+----+------+
|  1 | aaa  |
|  3 | aaa  |
|  4 | bbb  |
|  2 | ccc  |
|  5 | ccc  |
|  6 | zzz  |
+----+------+
6 rows in set (0.00 sec)

mysqlpump和mysqldump一樣,屬於邏輯備份,備份以SQL形式的文字儲存。邏輯備份相對物理備份的好處是不關心undo log的大小,直接備份資料即可。它最主要的特點是:

  • 並行備份資料庫和資料庫中的物件的,加快備份過程。

  • 更好的控制資料庫和資料庫物件(表,儲存過程,使用者帳戶)的備份。

  • 備份使用者賬號作為帳戶管理語句(CREATE USER,GRANT),而不是直接插入到MySQL的系統資料庫。

  • 備份出來直接生成壓縮後的備份檔案。

  • 備份進度指示(估計值)。

  • 重新載入(還原)備份檔案,先建表後插入資料最後建立索引,減少了

  • 索引維護開銷,加快了還原速度。

  • 備份可以排除或則指定資料庫。

#mysqlpumpy壓縮備份 以lz4壓縮格式備份employees資料庫

mysqlpump -S /tmp/mysql3306.sock --single-transaction --default-character-set=utf8 --compress-output=LZ4 --default-parallelism=3 -B employees > /tmp/employees_db.sql.lz4

#mysqldump備份壓縮
mysqldump -S /tmp/mysql3306.sock --single-transaction -B employees | gzip > /tmp/employees.sql.gz

MySQL在備份方面包含了自身的mysqldump工具,但其只支援單執行緒工作,這就使得它無法迅速的備份資料。而mydumper作為一個實用工具,能夠良好支援多執行緒工作,這使得它在處理速度方面十倍於傳統的mysqldump。其特徵之一是在處理過程中需要對列表加以鎖定,因此如果我們需要在工作時段執行備份工作,那麼會引起DML阻塞。但一般現在的MySQL都有主從,備份也大部分在從上進行,所以鎖的問題可以不用考慮。這樣,mydumper能更好的完成備份任務。

3.5.1 安裝mydumper

# yum install https://github.com/maxbube/mydumper/releases/download/v0.9.5/mydumper-0.9.5-1.el7.x86_64.rpm

3.5.2 mydumper和myloader重點引數介紹

mydumper引數介紹

引數名 說明
-B, --database 需要備份的資料庫
-T, --tables-list 需要備份的表,多表間用逗號空格
-O, --omit-from-file 包含要跳過的database.table條目列表的檔案,每行一個(在應用正則表示式選項之前跳過)
-o, --outputdir 輸出檔案的目錄
-s, --statement-size 生成的insert語句的位元組數,預設為 1000000
-r, --rows 將表按行分塊時,指定的塊行數,指定這個選項時,會關閉--chunk-filesize
-F, --chunk-filesize 將表按大小分塊時,指定的塊大小,單位是MB
-c, --compress 壓縮輸出檔案
-e, --build-empty-files 即使表沒有資料,還是會產生一個空檔案
-x, --regex 正則表示式匹配’db.table’
-i, --ignore-engines 忽略的儲存引擎,用逗號分隔
-N, --insert-ignore 使用INSERT IGNORE 備份資料
-m, --no-schemas 不匯出表結構
-d, --no-data 不匯出表資料
-G, --triggers 匯出觸發器
-E, --events Dump events
-R, --routines Dump stored procedures and functions
-W, --no-views 不匯出檢視
-k, --no-locks 不要執行臨時共享讀鎖定. 警告:這將導致備份不一致
--no-backup-locks 不要使用Percona備份鎖
--less-locking 最大限度地減少InnoDB表的鎖定時間。
-l, --long-query-guard 設定長查詢時間, 預設60s
-K, --kill-long-queries kill 長時間執行的查詢
-D, --daemon 啟用守護程序模式
-I, --snapshot-interval 每個轉儲快照之間的間隔(以分鐘為單位),需要–daemon模式下,預設為60s
-L, --logfile 要使用的日誌檔名,預設情況下使用stdout
--tz-utc 備份的時候允許備份Timestamp,這樣會導致不同時區的備份還原會出問題,預設關閉,引數:–skip-tz-utc to disable.
--skip-tz-utc
--use-savepoints 使用儲存點來減少元資料鎖定問題,需要SUPER許可權
--success-on-1146 Not increment error count and Warning instead of Critical in case of table doesn’t exist
--lock-all-tables 使用LOCK TABLE代替FTWRL(FLUSH TABLE WITH READ LOCK)
-U, --updated-since 使用Update_time僅轉儲在過去天中更新的表
--trx-consistency-only 只包含一致性事務
--complete-insert 使用包含列名的完整INSERT語句
-h, --host The host to connect to
-u, --user Username with the necessary privileges
-p, --password User password
-a, --ask-password Prompt For User password
-P, --port TCP/IP port to connect to
-S, --socket UNIX domain socket file to use for connection
-t, --threads 使用的執行緒數,預設是4個
-C, --compress-protocol Use compression on the MySQL connection
-V, --version Show the program version and exit
-v, --verbose 更多輸出, 0 = silent, 1 = errors, 2 = warnings, 3 = info, default 2
--defaults-file Use a specific defaults file
--ssl Connect using SSL
--key The path name to the key file
--cert The path name to the certificate file
--ca The path name to the certificate authority file
--capath The path name to a directory that contains trusted SSL CA certificates in PEM format
--cipher A list of permissible ciphers to use for SSL encryption

myloader引數介紹

引數名 註釋
-d, --directory 要匯入的備份檔案所在的目錄
-q, --queries-per-transaction 每次事務執行的查詢數量, default 1000
-o, --overwrite-tables 如果要恢復的表存在,則先drop表
-B, --database 指定需要還原資料到哪個資料庫中
-s, --source-db 需要還原的資料庫
-e, --enable-binlog 啟用二進位制日誌恢復資料
-h, --host The host to connect to
-u, --user Username with the necessary privileges
-p, --password User password
-a, --ask-password Prompt For User password
-P, --port TCP/IP port to connect to
-S, --socket UNIX domain socket file to use for connection
-t, --threads 使用的執行緒數量, default 4
-C, --compress-protocol 連線上使用的壓縮協議
-V, --version Show the program version and exit
-v, --verbose 更多輸出, 0 = silent, 1 = errors, 2 = warnings, 3 = info, default 2
--defaults-file Use a specific defaults file

3.5.3 mydumper與myloader的用法

1)以壓縮備份備份所有資料庫,還原指定的sbtest庫

# mydumper -S /tmp/mysql3306.sock  -c /data/mysql/mysql3306/outfile/

# ls
export-20180911-152023

從備份檔案中還原指定庫sbtest
# myloader -S /tmp/mysql3306.sock -s sbtest -B sbtest -d /data/mysql/mysql3306/outfile/export-20180911-152023/

【注意】:如果不加-s,會把所有庫的表,還原到sbtest庫中。

2)還原sbtest庫中的sbtest1,sbtest2表

mysql> drop table sbtest1;
mysql> drop table sbtest2;

# myloader -S /tmp/mysql3306.sock -s sbtest -B sbtest -o sbtest1,sbtest2 -d /data/mysql/mysql3306/outfile/export-20180911-152023/