我做了一件mysql DBname < dumpFile.sql
非常愚蠢的事情,我没有将进程置于后台,最终我的 ssh 会话因管道损坏而终止。如何使用转储文件验证 mysql DB 上的导入是否完成?RHEL 6,mysql 5.1.6。
答案1
检查转储文件的最后插入内容(它是文本,尾部)并查看该数据是否已进入数据库。
答案2
之一:
从数据库中转储并比较新旧数据库
删除数据库并重新导入数据
答案3
只需对新数据库执行 mysqldump,然后将其与旧数据库进行比较。
答案4
假设两台服务器上的 MySQL 版本匹配(或非常接近匹配)...
步骤1
从 MySQL 提示符运行CHECKSUM TABLE table_name;
并查看两个地方的校验和是否匹配。
请注意,这将需要一点时间来运行并占用您的表。但是,即使有几 GB 的数据,它也应该少于一分钟左右……除非您的盒子配置有点奇怪。
http://dev.mysql.com/doc/refman/5.1/en/checksum-table.html
第2步
因为在非匹配的表上以及为了后代,校验和冲突的可能性很小,所以这是您的备份步骤。
运行(更改 your_database_name 和 your_table_name 之后)...
SELECT CONCAT(table_schema, '.', table_name) AS 'database.table',
FORMAT(table_rows, 0) AS table_rows,
FORMAT(data_length, 0) AS data_length,
FORMAT(index_length, 0) AS index_length
FROM information_schema.TABLES
WHERE table_schema = 'your_database_name'
AND table_name = 'your_table_name';
如果一切都匹配,那么一切就绪了!如果不匹配,您就必须进一步深入挖掘。
索引大小不匹配可能不是问题,因为导入通常(取决于设置)会在导入时创建新索引而不会产生碎片。但是,如果索引确实不匹配,并且您想在继续之前尝试同步它们,请对源表运行 OPTIMIZE TABLE 并再次检查以查看是否能解决问题。
我还没有完全理清索引大小的一个边缘情况,仅供参考......为什么 mysqldump 导入后 MySQL MyISAM 表索引(又名 MYI 文件)的大小不匹配?
结论
对我来说,99% 的情况下,这种方法都有效,没有任何问题。需要注意的是,我主要使用 MyISAM(出于各种原因),但对于 InnoDB 来说,这种方法也应该没问题。希望对您有所帮助!
这就是你要找的答案……(挥动绝地之手)