9

希望有人可以帮助我,我已经研究了许多关于 stackoverflow 的恢复答案。

我犯了从mysql复制数据文件夹并将其粘贴到新的wamp 2.5 mysql/mysl5.6.17/data文件夹中的错误。

当我单击一个表格时,它会给出“表格不存在”。下面显示了显示的内容

3688 [警告] InnoDB:尽管存在表的 .frm 文件,但无法从 InnoDB 的内部数据字典中打开表 craigmedia/wp_eg_grids。请参阅http://dev.mysql.com/doc/refman/5.6/en/innodb Troubleshooting.html 了解如何解决问题。

我有包含 .frm 文件的数据库文件夹。

我一直在尝试使用 mysqlfrm 来恢复表,如以下链接所述:https ://dba.stackexchange.com/questions/71596/restoreing-mysql-tables-from-ibd-frm-and-mysqllogbin-files

但是,当我将信息放入 mysqlfrm 时,结果如下所示:

1.mysqlfrm --server=root@localhost --port=445 --user=root C:/wamp/bin/mysql/mysql5.6.17/data/craigmedia/wp_eg_grids.frm > wp_eg-grids.txt


Source on localhost: ...connected

ERROR: Cannot read wp_eg_grids.txt. You must have read privileges to the file or path and it must exist. Skipping this argument.
ERROR: Cannot read .frm file from >.frm.

实用程序的执行:'mysqlfrm --server=root@localhost --port=445 --user=root C:/wamp/bin/mysql/mysql5.6.17/data/craigmedia/wp_eg_grids.frm > wp_eg-grids.txt'以返回代码“1”结束,但没有错误消息流式传输到标准错误,请查看其执行的输出。

然后我尝试了这个。

2. mysqlfrm --server=root@localhost:3306 c:/wamp/bin/mysql/mysql5.6.17/data/craigmedia/wp_eg_grids.frm --port=3307 --user=root

警告:在命令行界面上使用密码可能不安全。

Source on localhost: ...connected.
Spawning server with --user=root.
Starting the spawned server on port 3307 ...

The console has detected that the utility 'mysqlfrm' ended with an error code. You can get more information about the error by running the console command 'show last error'.

Execution of utility: 'mysqlfrm --server=root@localhost:3306 c:/wamp/bin/mysql/mysql5.6.17/data/craigmedia/wp_eg_grids.frm --port=3307 --user=root' ended with return code '1' and with the following error message:
Traceback <most recent call last>:

File "G:\ade\build\sb_0-16088143-1438774726.78\Python-2.7.6-windows-x86-64bit\lib\site-packages\cx_Freeze\initscripts\Console.py", line 27, in <module>
File "scripts\mysqlfrm.py", line 422, in <module>
File ".\mysql\utilities\command\read_frm.py", line 439, in read_frm_files
File ".\mysql\utilities\command\read_frm.py", line 166, in _spawn_server
File ".\mysql\utilities\command\serverclone.py", line 180, in clone_server
File ".\mysql\utilities\command\tools.py", line 254, in get_mysqld_version

I0Error: [Errno 13] Permission denied: 'version_check'

目前我正在尝试访问一个 .frm 进行测试,即 wp_eg_grids.frm 并将其制成 wp_eg_grids.txt。任何人都可以注意到我做错了什么或知道如何解决这个问题。

4

2 回答 2

5

尝试对 mysqlfrm 使用以下语法,它在类似情况下对我有用。

mysqlfrm --server=root:password@localhost:3306 c:/wamp/bin/mysql/mysql5.6.17/data/craigmedia/wp_eg_grids.frm > c:/wamp/bin/mysql/mysql5.6.17/data/craigmedia/wp_eg_grids.txt --diagnostic --port=3307 -vvv --user=root

打开诊断模式以逐字节读取 .frm 文件并生成尽力而为的 CREATE 语句。

于 2016-02-27T16:35:44.503 回答
0

您的问题可能与我的类似:MySQL spawned server doesn't start。

问题在于 MySQL 以临时目录开头,datadir默认情况下是当前目录。在此目录中,您将拥有一个具有正确权限的新临时目录(类似于62a77962-9a4b-49d0-b91a-a5e9eb71b894)。

  • Linux:如果你以 root 身份运行(运行的用户mysqlfrm,而不是你启动 MySQL 的用户),你很可能在/root/目录中,mysql系统用户无法读取(即使 mysql 用户是root)。
  • Windows:我认为同样的问题,如果您以管理员身份运行,MySQL 用户可能没有读取当前目录的权限。

cd解决方案是在 MySQL 可读目录中移动(使用) ,例如/tmp/在 Linux 上(具有与此world readable目录相关的所有安全问题),或者可能C:\在 Windows 上。

我通过查看 MySQL 日志 (Linux: /var/log/mysql/mysql.log) 找到了它,其中指出:

/usr/sbin/mysqld: Can't change dir to '/root/aa9fe487-0c77-4bb4-a829-036fc9919558/' (Errcode: 13 - Permission denied)

启动命令是:

/usr/sbin/mysqld --no-defaults --basedir=/usr --datadir=/root/aa9fe487-0c77-4bb4-a829-036fc9919558 --pid-file=/root/aa9fe487-0c77-4bb4-a829-036fc9919558/clone.pid --port=3310 --server-id=101 --socket=/root/aa9fe487-0c77-4bb4-a829-036fc9919558/mysql.sock --tmpdir=/root/aa9fe487-0c77-4bb4-a829-036fc9919558 --user=mysql

搬进来/tmp/解决了这个问题,并按mysqlfrm预期工作。

如果可用,我会使用一个tmpdir选项,但它不是,如中所述read_frm.py

# Since Python libraries correctly restrict temporary folders to
# the user who runs the script and /tmp is protected on some
# platforms, we must create the folder in the current folder
   temp_datadir = os.path.join(os.getcwd(), str(uuid.uuid4()))
   os.mkdir(temp_datadir)

而且 MySQL 没有真正的家……或者您可能不想弄乱/var/lib/mysql/目录!

于 2018-01-24T11:30:49.703 回答