關於mydumper的.metadata檔案丟失,mydumper.metadata
今天要進行MySQL的資料移轉,所以把資料庫通過mydumper工具備份的檔案解壓後,通過myloader進行匯入
但是匯入的時間出現這個報錯:
** (myloader:766): CRITICAL **: the specified directory is not a mydumper backup
非常奇怪,明明以往導資料都是通過myloader命令可以匯入成功的,現在竟然是報錯說這個目錄不是mydumper的備份檔案查看myloader的原始碼,如下
char *p= g_strdup_printf("%s/metadata", directory); if (!g_file_test(p, G_FILE_TEST_EXISTS)) { g_critical("the specified directory is not a mydumper backup\n"); exit(EXIT_FAILURE); }
判斷目錄下如果 metadata 檔案不存在,則異常退出,而我發現備份目錄下卻有一個 .metedata 檔案,注意是有.首碼的,在linux系統下表示是隱藏檔案
於是對比了一下mydumper的版本:
myloader -Vmyloader 0.6.2, built against MySQL 5.5.21
而原備份檔案的機器是 myloader 0.2.3,表示兩個版本不相同,所以我第一反應是把舊機器的 /usr/local/bin/目錄下的 mydumper\myloader 檔案直接cp到新機器
再用myloader的話,可以匯入成功,問題解決。
後面想了一下,再查看舊版本的 myloader 源碼,發現判斷檔案是否存在是 .metadata ,即舊版本匯出的隱藏檔案,在新版本中已經不需要隱藏的,可能是作者覺得沒必要隱藏該檔案,而且隱藏檔案會有一個隱患是容易 cp 不完整,cp預設不拷貝隱藏檔案,必須通過 cp -a 才能完整拷貝。
所以,如果用myloader新版程式匯入舊版本的備份,可以把備份目錄下的 .metadata檔案改名為 metadata,也可以匯入成功
mv .metadata metadata