最终成功将我的 Debian 虚拟服务器从 etch 升级到 lenny 之后。(点击此处了解完整内容:debian:从 etch 升级到 lenny 失败)
我现在丢失了 MySQL DB 中的数据(包括所有表)。文件仍然存在于硬盘上,phpMyAdmin(以下称为 PMA)仍显示所有数据库名称,但没有任何表。'mysql' 和 ''information_schema' 数据库仍有其表。但访问例如 'mysql.user' 时出现以下错误:
#1017 - Can't find file: './mysql/user.frm' (errno: 13)
当然(就像任何1337 佩卡克我没有 mySQL 转储文件。(多次使用脏话)
有谁知道有什么工具可以从文件结构中恢复丢失的数据?
提前感谢任何帮助解决第 8 层问题的人,也就是我
答案1
如果您有这些文件,您应该能够查看数据(innodb 表除外)。当您遇到权限问题时,通常会出现此错误 - 尝试将 /var/lib/mysql 文件更改为 mysql:mysql,看看是否能解决问题。
chown -R mysql:mysql /var/lib/mysql
答案2
首先,不要惊慌。很可能一切都没有丢失,你只需要弄清楚发生了什么。
升级过程中 MySQL 数据目录路径是否发生了变化?(我不这么认为 - 如果我没记错的话,Etch 和 Lenny 都默认从 /var/lib/mysql 提供内容。但如果您之前手动更改了路径,那么可能发生了一些事情)
如果你进入 /var/lib/mysql,你能找到目录吗mysql和文件用户文件下吗?如果不能,是否
find / -iname 'user.frm'
返回某些内容?有什么值得注意的/var/日志,尤其是在/var/log/mysql?
如果其他一切都失败了,请在其他计算机(或虚拟机)上设置另一个 Debian 安装,在那里安装 Debian Etch,将 MySQL 数据目录复制到那里,看看是否可行。然后运行正确的mysqldump并将其恢复到您的全新 Lenny。
编辑:好的,这只是一个权限问题。无论如何,我都会在这里留下我的回复,希望它能帮助到其他人。
答案3
嗯,有几件事:
首先,备份您目前拥有的文件。某些操作可能会对它们进行修改,因此您不希望情况比现在更糟。
我假设您当前的数据目录有一个mysql/user.frm
文件。如果是这样,问题在于新版本的 MySQL 在错误的位置查找其数据。查看文档my.cnf
,特别是关于的部分DATADIR
。您可以将默认数据目录更改为指向旧文件集。完成此操作后,您将需要运行命令mysql_upgrade
来检查表并升级任何表结构。 查看文档。
如果您的数据目录中没有mysql/user.frm
文件,则说明出现了问题。您需要再次手动完成安装(不是重新安装,只是安装后步骤)。为此,请运行程序mysql_install_db
。这样应该可以恢复用户表。请注意,您将丢失所有身份验证信息(因为 user.frm 不存在,所以这些信息已经消失了)。
我现在就到此为止,因为除非你选择其中一条路线,否则我无法提供更多帮助。告诉我你选择了哪条路线,我会尽力继续提供帮助。
答案4
这是可以生成的索引文件mysql 修复
备份 mysql 文件并在 phpmyadmin 中输入查询:
REPAIR TABLE tbl_name [, tbl_name] USE_FRM;
Mysql将会修复它。