使用mysqlfrm

时间:2015-09-18 16:02:54

标签: mysql mysql-python recovery file-recovery

希望有人可以帮助我,我已经在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/restoring-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。任何人都可以注意到我做错了或知道如何解决这个问题。

2 个答案:

答案 0 :(得分:4)

尝试对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

Turn on diagnostic mode to read .frm files byte-by-byte and generate best-effort CREATE statement.

答案 1 :(得分:0)

您的问题可能类似于我的问题:MySQL生成的服务器无法启动。

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

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

解决方案是在MySQL可读目录中移动(使用cd),例如Linux上的/tmp/(包含与此{{1}相关的所有安全问题在Windows上可能是world readable

我通过查看MySQL日志(Linux:C:\)找到了它:

/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

MySQL并没有真正的家...或者你可能不想弄乱# 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) 目录!