使用我的标志mysqldump一段丢失的数据重新导入是否安全?

假设一个testing数据库中有一年的数据被删除了。 我最早在一年内得到了两个ID的数据,而最近的数据是在另一个的数据,因此这里有一些缺失的数据。 我的问题; 从完整的数据库实例中使用下面的命令是否有任何危险,以便获得一个可用于修复数据库的工作转储,其中包含缺less的信息块? 命令:

mysqldump -t --insert-ignore --skip-opt --single-transaction --quick --where="id<156789339" -w"id>124054297" -u root -p database table > partial.sql 

这个在gzipping /移动之后导入:

 zcat partial.sql.gz | mysql -u root -p database table 

可能有一个值得一提的警告 – 数据来自MySQL 5.5(percona),而导入到mysql 5.1实例,但我认为没有兼容性问题,我知道可能由此产生副手。

我明白,为了避免创buildCREATE TABLE语句( --no-create-info ),– --insert-ignore ,以防万一我的范围重叠,所以它忽略该id是否已经存在,– --skip-opt确保它( --add-drop-tab, --add-locks, --create-options, --disable-keys, --extended-insert, --lock-tables, --quick, and --set-charset不会执行所有的操作--add-drop-tab, --add-locks, --create-options, --disable-keys, --extended-insert, --lock-tables, --quick, and --set-charset根据mysqldump的手册页)。 只是想确切地知道,这是我所需要的出口,如果有什么我可能失踪的input在任何可能的错误最终作出之前。

也许这将是好的。 有些特殊情况可能会失败。

  • 数据库中的FOREIGN KEY使用ON DELETE CASCADE语句指向您的表,这种情况下,由于先前删除而丢失了其他数据,并且您还必须查找并复制该数据。 如果你的数据库正在使用MYISAM,你没有外键,所以你是安全的。

  • 您正在使用以前版本不支持的特殊function,例如。 FULLTEXT索引。 既然你说这是一个testing分贝,我想这个模型是一样的。 在这种情况下,应该没有问题。

  • 您正在两个数据库中使用不同的编码 / sorting规则 ,并且表中有非ASCII(本地化)文本字段。 再一次,如果模型是一样的,应该没有问题。 (如果你的表没有明确的编码定义,并且mysql服务器中的默认编码不同,你可能会遇到问题,但这不太可能)。

如果您正在使用INNODB,则可能需要在TRANSACTION(BEGIN;和COMMIT;之间)中执行整个转储