前言:
上篇文章介紹了 mydumper 備份工具的使用方法,文中有提到 mydumper 和 myloader 是一對相互的命令轨功,即 mydumper 負責備份(導出)旭斥,myloader 負責恢復(導入)。那么 myloader 又該如何使用呢古涧?本篇文章我們一起來看下垂券。
1. myloader 介紹
myloader 是與 mydumper 工具配合使用的多線程備份恢復工具,可以直接以 mydumper 輸出文件為輸入羡滑,恢復備份數(shù)據(jù)菇爪。主要用于將 dump 出來的 sql 文件以并行的方式進行恢復。
執(zhí)行 myloader --help 可以查看幫助信息柒昏,同樣的娄帖,我們來看下 myloader 相關參數(shù):
參考官方介紹,以下簡要說明部分常用的參數(shù)昙楚。
參數(shù)名 | 縮寫 | 含義 |
---|---|---|
--user | -u | 使用的用戶名 |
--pasword | -p | 連接所用的用戶密碼 |
--host | -h | MySQL 服務端地址 |
--port | -P | MySQL 端口號 |
--threads | -t | 開啟的線程數(shù),默認是4 |
--directory | -d | 指定待恢復的備份目錄 |
--queries-per-transaction | -q | 每次事務執(zhí)行的查詢數(shù)量诈嘿,默認是1000 |
--overwrite-tables | -o | 如果要恢復的表存在堪旧,則先drop掉該表 |
--database | -B | 需要還原到哪個數(shù)據(jù)庫(目標數(shù)據(jù)庫) |
--source-db | -s | 選擇被還原的數(shù)據(jù)庫(源數(shù)據(jù)庫) |
--enable-binlog | -e | 在恢復時開啟binlog |
我們知道,myloader 也是多線程的奖亚,面對 mydumper 備份出來的那么多文件淳梦,恢復的時候是如何順序執(zhí)行的呢?各個線程是如何工作的昔字?myloader 具體工作流程可參考下圖:
即首先會創(chuàng)建一個主線程爆袍,主線程負責主邏輯首繁,子線程為 worker 線程,執(zhí)行具體恢復數(shù)據(jù)任務陨囊,子線程執(zhí)行完成后再由主線程創(chuàng)建函數(shù)弦疮、存儲過程、事件及視圖蜘醋、觸發(fā)器這些對象胁塞。
2. myloader 恢復示例
我們以上篇文章備份出的文件為例,來看下如何用 myloader 進行恢復:
# 恢復備份文件中的全部 若表已存在則先刪除
myloader -u root -p 123456 -o -d /backups/all3
# 從全備中恢復指定庫
myloader -u root -p 123456 -s db1 -o -d /backups/all3
# 將某個數(shù)據(jù)庫備份還原到另一個數(shù)據(jù)庫中(目標庫不存在則會新建)
myloader -u root -p 123456 -B recover_db1 -s db1 -o -d /backups/all3
myloader -u root -p 123456 -B recover_db1 -o -d /backups/db1
# 恢復時開啟binlog(有備庫的時候需要開啟)
myloader -u root -p 123456 -e -o -d /backups/db1
# 無法直接還原單表 只能找到單表的sql文件 進入命令行source 執(zhí)行
source db1.tb1-schema.sql 還原表結構
source db1.tb1.sql 還原表數(shù)據(jù)
可以看到使用 myloader 恢復數(shù)據(jù)還是很方便的压语,并且有多個參數(shù)可選啸罢,恢復場景也更加靈活。比如我們可以從全備中恢復出單個庫胎食,或者將備份恢復到一個新庫中等等扰才,這些場景基本能覆蓋日常恢復需求厕怜。雖然不支持單表恢復衩匣,但我們可以到文件夾中輕松找到該表的建表及插數(shù)據(jù)的 sql 腳本,進入 mysql 命令行中再執(zhí)行單個腳本也能實現(xiàn)恢復單表的需求酣倾。
不過要注意的是 myloader 恢復時默認不開啟 binlog舵揭,這雖然可以加快恢復速度,但是當存在從庫時躁锡,一定要注意使用 -e 參數(shù)來打開 binlog 記錄午绳。