今天要进行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 -V
myloader 0.6.2, built against MySQL 5.5.21
而原备份文件的机器是 myloader 0.2.3,表示两个版本号不同样,
所以我第一反应是把旧机器的 /usr/local/bin/文件夹下的 mydumper\myloader 文件直接cp到新机器
再用myloader的话,能够导入成功。问题解决。
后面想了一下。再查看旧版本号的 myloader 源代码,发现推断文件是否存在是 .metadata ,即旧版本号导出的隐藏文件。在新版本号中已经不须要隐藏的。
可能是作者认为不是必需隐藏该文件,并且隐藏文件会有一个隐患是easy cp 不完整。cp默认不拷贝隐藏文件,必须通过 cp -a 才干完整拷贝。
所以。假设用myloader新版程序导入旧版本号的备份,能够把备份文件夹下的 .metadata文件改名为 metadata。也能够导入成功
mv .metadata metadata