2012-06-04 2 views
6

После ошибки возникает ошибка, когда я пытаюсь восстановить БД в MYSQL через putty.Ошибка при восстановлении MYSQL db

Команда: mysql -u root -p db1<dbname.sql ;

ERROR 1 (HY000) в строке 7904: Невозможно создать/запись в файл './ имя_бд /db.opt' (Errcode: 2)

В чем причина?

ответ

9

Это часто означает, что файл дамп включает в себя команду, которая должна работать с базой данных, которая либо не существует в локальном контексте, или к которому у текущего пользователя нет доступа. Откройте файл дампа и посмотрите на строку, указанную в ошибке, чтобы узнать, что происходит.

1

Узнайте, что означает Errcode: 2

Вы можете использовать утилиту perror, чтобы найти то, что ошибка 2 означает:

$ perror 2 
OS error code 2: No such file or directory 

Больше информации находится в ссылке, указанной в @Jocelyn свой комментарий: http://dev.mysql.com/doc/refman/5.5/en/cannot-create.html

Узнайте, какой путь ./ указывает на

Теперь мы знаем, что файл не существует (или, возможно, он не может быть записан в.) Сообщение об ошибке дает нам относительный путь ./, который делает его сложным ... Не было бы полезно, если бы он выводил полностью квалифицированный путь? Да.

Поэтому, когда MySQL импортирует файл SQL, он создает некоторые временные файлы в файловой системе. Путь обычно задается параметром конфигурации «tmpfile» в файле MySQL my.cnf. Вы можете быстро найти значение, выполнив запрос SQL:

$ mysql -h127.0.0.1 -uroot -p 
# I assume you're now logged into MySQL 
mysql> SHOW VARIABLES LIKE '%tmpdir%'; 

+-------------------+-------+ 
| Variable_name  | Value | 
+-------------------+-------+ 
| slave_load_tmpdir | /tmp | 
| tmpdir   | /tmp | 
+-------------------+-------+ 
2 rows in set (0.00 sec) 

Убедитесь, что каталог доступен для записи mysql пользователя

Согласно TMPDIR это означает, что MySQL пытается создать /tmp/dbnamehere/db.opt. Убедитесь, что этот каталог существует и что он принадлежит mysql:mysql. Возможно, вам нужно будет использовать sudo, чтобы повысить привилегии, достаточные для создания некоторых каталогов.

$ chown -R mysql:mysql /tmp/dbnamehere 

Все еще не работает? Попробуйте другие пути TmpDir по умолчанию

Я ударил проблемы на моей системе (Ubuntu 12,04 + Vagrant 1.7.2 + Chef 11.something + opscode mysql cookbook 6.0.6), где значение в tmpdir не рассматривается или не тянули, откуда Я ожидал.

MySQL был на самом деле пытается создать временный файл в одном из следующих мест:

  • /вар/Lib/MySQL/dbnamehere
  • /вар/Lib/MySQL по умолчанию/dbnamehere

Мне нужно было создать эти каталоги и сменить владельца на mysql: mysql.

4

Я столкнулся с этой ошибкой при работе, когда имя исходной базы данных отличается от имени целевой базы данных. Я сбросил базу данных на одном сервере с mysqldump db1 > dumpfile и попытался импортировать ее на другой сервер с mysql db2 < dumpfile.

Оказывается, в файле дампа были ALTER TABLE db1 ... заявления, которые были бессмысленны на целевом сервере, где я назвал базу данных db2.

Возможно, более элегантное решение, чем это, но я только что отредактировал файл дампа на целевом сервере и заменил db1 на db2.

+0

Для краткости вашего ответа есть несколько вариантов вместо замены строки в редакторе: http://dba.stackexchange.com/a/8892 – Pogrindis

Смежные вопросы