在 Mac 服务器崩溃后,我忙着从 InnoDB 表中恢复记录。所有表共享一个数据文件。我已将 ibdata1 和两个日志文件复制到托管在 Windows 上的新 mysql 服务器上进行恢复,同时复制了我需要的表的单个 .frm 文件。到目前为止,恢复失败得很惨。
尝试将各种innodb_force_recovery
选项与lower_case_table_names
这些数据文件的副本上的选项结合起来并不能解决问题。即使使用这些文件的副本正常启动,最初也会检测到崩溃并修复它,并且进一步启动不会出现任何错误。删除 ib_logfiles 并让 Mysql 在重新启动时重新创建它们并不能解决问题。将 .frm 文件名全部改为小写并重新启动也不能解决问题。
SHOW TABLES
查询显示表,但对表本身的任何查询都失败并出现错误 1146。运行 时innodb_table_monitor
,在输出中我可以清楚地看到表定义(或多或少)和行数。查看 ibdata1 文件的内容,我看到所有记录数据都是纯文本,但没有可用的模式来解析它。
据我所知,当我尝试在任何命令或查询中引用该表时,问题似乎全部归结为“错误 1146 - 表‘db.my_table’不存在”。您会看到,该表是在 Mac 上使用大写字符创建的,而根据 Mysql 的说法,Windows 无法处理这种情况。
有人知道提取这些记录的解决方案吗?
答案1
尝试安装基于 UNIX 的应用程序子系统 这可以安装或提供安装 *nix 版本的 mysql 的功能,这可能会解决您的问题。从技术上讲,问题不在于 windows 无法处理大写字符(windows 当然可以显示它们),问题在于 mysql 在 windows 上使用大小写,默认情况下,windows 不关心大小写,并且经常返回全部小写的文件名(或者有时全部大写 - 这取决于特定的调用)。