2012-06-04 9 views
6

Se produce el siguiente error cuando intento restaurar una base de datos en MYSQL mediante masilla.Error al restaurar MYSQL db

Comando: mysql -u root -p db1<dbname.sql ;

ERROR 1 (HY000) en la línea 7904: No se puede crear/escribir en el archivo './ nombredb /db.opt' (Errcode: 2)

¿Cuál es el motivo?

Respuesta

9

A menudo, esto significa que su archivo de volcado incluye un comando que se debe ejecutar en contra de una base de datos que, o bien no existe en su contexto local, o a lo que el usuario actual no tiene acceso. Abra el archivo de volcado y mire la línea mencionada en el error para averiguar qué está pasando.

1

Estudia lo que significa Errcode: 2

Usted puede utilizar la utilidad perror para encontrar qué error 2 significa:

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

Más información se encuentra en el enlace @Jocelyn mencionó en su comentario: http://dev.mysql.com/doc/refman/5.5/en/cannot-create.html

Descubre qué ruta ./ apunta a

Ahora sabemos que un archivo no existe (o tal vez no se puede escribir). El mensaje de error nos da una ruta relativa ./ que lo hace difícil ... ¿No sería útil si saliera? una ruta totalmente calificada? Sí.

Entonces, cuando MySQL importa un archivo SQL, crea algunos archivos temporales en el sistema de archivos. La ruta generalmente se especifica mediante la opción de configuración "tmpfile" en el archivo MySQL my.cnf. Usted puede encontrar rápidamente el valor mediante la ejecución de una consulta 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) 

Asegúrese de que el directorio es escribible por el usuario mysql

Según tmpdir esto significa MySQL estaba tratando de crear /tmp/dbnamehere/db.opt. Asegúrese de que este directorio exista y que sea propiedad de mysql:mysql. Es posible que deba usar sudo para elevar los privilegios lo suficientemente alto como para crear algunos directorios.

$ chown -R mysql:mysql /tmp/dbnamehere 

¿Aún no está trabajando? Probar otros caminos TMPDIR predeterminado

golpeo problemas en mi sistema (Ubuntu 12.04 + Vagrant 1.7.2 + Chef 11.something + opscode mysql cookbook 6.0.6) cuando el valor en tmpdir no estaba siendo considerado o no se está tirando desde donde Esperaba.

MySQL estaba tratando de crear el archivo temporal en uno de los siguientes lugares:

  • /var/lib/mysql/dbnamehere
  • /var/lib/mysql-default/dbnamehere

Tuve que crear esos directorios y cambiar la propiedad a mysql: mysql.

4

Me encontré con este error en el trabajo cuando el nombre de la base de datos fuente era diferente al nombre de la base de datos de destino. Volqué una base de datos en un servidor con mysqldump db1 > dumpfile e intenté importarla en un servidor diferente con mysql db2 < dumpfile.

Resulta que el archivo de volcado tenía declaraciones ALTER TABLE db1 ... que no tenían sentido en el servidor de destino donde nombré a la base de datos db2.

Probablemente haya una solución más elegante que esta, pero acabo de editar el archivo de volcado en el servidor de destino y reemplacé db1 con db2.

+0

Para la brevedad de su respuesta, hay varias opciones para usted en lugar de reemplazar cadenas en el editor: http://dba.stackexchange.com/a/8892 – Pogrindis

Cuestiones relacionadas