Проблемы восстановления файла.frm с помощью mysqlfrm

Надеюсь, кто-нибудь может мне помочь, я исследовал многие ответы на восстановление на stackru.

Я сделал ошибку, скопировав папку data из mysql и вставив ее в новую папку wamp 2.5 mysql/mysl5.6.17/data.

Когда я нажимаю на таблицу, она выдает "таблица не существует". Это ниже показывает, что показывает

3688 [Предупреждение] InnoDB: невозможно открыть таблицу craigmedia/wp_eg_grids из словаря внутренних данных InnoDB, хотя файл.frm для таблицы существует. См. 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 ответа

Попробуйте использовать следующий синтаксис для 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.

Ваша проблема может быть похожа на мою: порожденный MySQL сервер не запускается.

Проблема заключается в MySQL, начиная с временного datadir, который по умолчанию является текущим каталогом. В этом каталоге у вас будет новый временный каталог (что-то вроде 62a77962-9a4b-49d0-b91a-a5e9eb71b894), с правильными разрешениями.

  • Linux: если вы запускаете от имени пользователя root (пользователь работает mysqlfrm, а не пользователь, против которого вы запускаете MySQL), вы, скорее всего, находитесь в /root/ каталог, который mysql системный пользователь не может читать (даже если пользователь mysql root).
  • Windows: та же проблема, я думаю, если вы запускаете от имени администратора, пользователь MySQL может не иметь прав на чтение текущего каталога.

Решение состоит в том, чтобы двигаться (используя cd ) в читаемом каталоге MySQL, например /tmp/ в Linux (со всеми проблемами безопасности, связанными с этим world readable каталог), или, возможно, C:\ на винде.

Я нашел это, посмотрев журнал 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/ каталог!

Другие вопросы по тегам