希望有人可以帮助我,我已经在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。任何人都可以注意到我做错了或知道如何解决这个问题。
答案 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
)。
mysqlfrm
的用户,而不是你启动MySQL的用户),你很可能在/root/
目录中,mysql
系统用户无法读取(即使mysql用户是root
)。 解决方案是在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)
目录!