我在重新导入由 mysqldump 生成的数据库转储时遇到问题。我使用 order-by-primary 选项运行 mysqldump,我让它在一个带有唯一键的表上运行(没有明确的主键,所以它按那个唯一键排序)。在这种情况下,我的目标是重新创建表,使唯一键成为主键。
这个转储花费了很长时间(大约 10 天),再次运行它会很痛苦。我尝试重新导入转储(使用适当的架构更改),但 mysql 中途阻塞了。我查看了转储文件,在它阻塞的地方——看起来有人在转储文件的文本中插入了一封垃圾邮件。
幸运的是,看起来损坏是孤立的,我能够在垃圾之前和之后看到 key 。
tl;dr:如果我只是拼接出垃圾,我不知道前后一个之间会丢失多少键 - 转储按那个唯一键排序,所以在这方面,它使生活更轻松。 mysql 是否有办法检索索引中两个条目之间的所有行?
key 是一个 32 个字符的十六进制字符串,存储在一个 CHAR(32) 类型的列中。我很确定我不能在字符串上使用 < 或 > 运算符……所以有什么建议吗?
最佳答案
在主键(或唯一键)上对 mysqldump 进行排序是导致它花费这么长时间的原因。不过,十天实在令人难以置信。
只有当你想备份一个 MyISAM 表并将它恢复到一个 InnoDB 表时,做这样的排序才有用。这是你在做的吗?
MySQL 确实有办法转储表的子集。查看 --where
mysqldump 的选项。这应该允许您备份损坏的行。
是的,您可以使用 <
和 >
在 SQL 中的字符串上。您还可以使用 BETWEEN
谓词。
关于mysql - 两个索引条目之间的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2079723/