mysql - 两个索引条目之间的行?

标签 mysql mysqldump corruption

我在重新导入由 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/

相关文章:

windows - mysqldump 在 Windows 上的备份文件名中带有日期和时间

mysql - 将 mysql 转储 sql 文件转换为可以导入 sqlite3 db 的格式的脚本

sql-server - 如何查询列中包含 <Unable to read data> 的行?

c - 重新分配和释放原因 "double free or corruption"

android - Android 中的连接拒绝错误

mysql - Cakephp 3 带有浮点值的条件不起作用

mysql - 如何查找两个可变日期之间的重复项

mysql - 使用以相同字段开头的 GROUP BY 优化多个查询

mysqldump:出现错误:1045 访问被拒绝

corruption - PouchDB 损坏检测