2012-06-04 7 views
6

L'errore seguente si verifica quando si tenta di ripristinare un DB in MYSQL tramite stucco.Errore durante il ripristino di MYSQL db

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

ERROR 1 (HY000) alla riga 7904: Impossibile creare/scrittura di file './ dbname /db.opt' (Errcode: 2)

Qual è il motivo?

risposta

9

Questo spesso significa che il file di dump include un comando che deve essere eseguito su un database che o non esiste nel vostro contesto locale, o a cui l'utente corrente non ha accesso. Apri il dumpfile e guarda la riga menzionata nell'errore per scoprire cosa sta succedendo.

1

Scopri cosa significa Errcode: 2

È possibile utilizzare l'utilità perror per trovare quale errore 2 significa:

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

Maggiori informazioni al link è @Jocelyn menzionato nel loro commento: http://dev.mysql.com/doc/refman/5.5/en/cannot-create.html

Scopri quale percorso ./ punti a

Ora sappiamo che un file non esiste (o forse non può essere scritto.) Il messaggio di errore ci dà un percorso relativo ./ che lo rende difficile ... Non sarebbe utile se emette un percorso completo? Si.

Quindi quando MySQL importa un file SQL crea alcuni file temporanei sul filesystem. Il percorso viene in genere specificato dall'opzione di configurazione "tmpfile" nel file MySQL my.cnf. È possibile trovare rapidamente il valore eseguendo una query 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) 

Verificare la directory è scrivibile da mysql utente

Secondo tmpdir questo significa MySQL stava cercando di creare /tmp/dbnamehere/db.opt. Assicurati che questa directory esista e sia di proprietà di mysql:mysql. Potrebbe essere necessario utilizzare sudo per elevare i privilegi abbastanza alti da creare alcune directory.

$ chown -R mysql:mysql /tmp/dbnamehere 

Ancora non funziona? Prova altri percorsi di default tmpdir

ho colpito problemi sul mio sistema (Ubuntu 12.04 + Vagrant 1.7.2 + Chef 11.something + opscode mysql cookbook 6.0.6) dove il valore in tmpdir non era presa in considerazione o non è stato tirato da dove Mi aspettavo

MySQL è stato effettivamente cercando di creare il file temporaneo in una delle seguenti posizioni:

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

ho dovuto creare queste directory e cambiare la proprietà a mysql: mysql.

4

mi sono imbattuto in questo errore al lavoro quando il nome del database di origine è stato diverso rispetto al nome del database di destinazione. Buttai un database su un server con mysqldump db1 > dumpfile e tentato di importarlo su un server diverso con mysql db2 < dumpfile.

Risulta che il dumpfile aveva le istruzioni ALTER TABLE db1 ... che non avevano alcun significato sul server di destinazione in cui ho chiamato il database db2.

C'è probabilmente una soluzione più elegante di questo, ma ho appena modificato il file di dump sul server di destinazione e sostituita DB1 con DB2.

+0

Per brevità della tua risposta, ci sono diverse opzioni per voi, invece di stringa sostituire nell'editor: http://dba.stackexchange.com/a/8892 – Pogrindis