Domanda

Al momento sto scrivendo un semplice script in ksh chi dovrebbe prendere alcune stringhe da un DB e li elenco sul guscio. Questo è come dovrebbe funzionare:

  • query il DB per tutti i dati
  • li Esporta in un file di testo
  • Utilizzo di awk per mostrare le diverse colonne

Il problema è che due campi della tabella che sto interrogando contengono frasi. Così awk, ovviamente, "pensa" che gli spazi bianchi tra le diverse parole sono separatori tra le colonne, così mi si avvicinò con la seguente soluzione:

  • SELECT * INTO OUTFILE "uscita" CAMPI denuncia da parte di '' FROM tabella
  • Utilizzo di awk per elencare i risultati (ovviamente il separatore ora è '')

Ma qui ho un altro problema, anche se ho

  • concesso il privilegio FILE per l'utente mysql sto usando
  • Ha dato a mysql 777 sulla directory in cui si dovrebbe scrivere

Anche così sto ricevendo il seguente errore:

  

'percorso': Impossibile creare / scrittura a 'File' (Errcode: 13)

Frustrati da questo ho iniziato a navigare sul web per trovare una risposta, e ho trovato un "incompleto" uno. In un certo sito suggeriscono di:

  • chown root: root / tmp

  • chmod 1777 / tmp

  • /etc/init.d/mysqld iniziare

ho pensato che, se questa soluzione funziona bene su / tmp quindi non ci dovrebbe essere alcun problema su qualsiasi altra directory scelgo. Ovviamente ero totalmente sbagliato :). Se il percorso che sto dando l'opzione outfile è 'file' / tmp / allora non c'è problema, qualsiasi altro percorso restituisce me il precedente errore. Così ho trovato una 'soluzione' al problema? Beh, sì, ma per utilizzare questo script un qualcuno deve:

  • Avere un utente MySQL con il file di privilegio
  • questa i diritti di 'rm' un file in / tmp (il file di output di MySQL è temporaneo)

E io non credo che questo è dolce e piacevole. Quindi quello che sto chiedendo? Di seguito:

  • Come posso forzare mysql di scrivere un file dove voglio?
  • Avete più vitale e la soluzione 'dolce' del mio a suggerire me?

Ah, sto usando Ubuntu 10.4. Grazie per tutto l'aiuto.

È stato utile?

Soluzione

Una soluzione migliore è quella di reindirizzare l'output:

mysql --default-character-set=utf8 -uuser -ppass -s -e "SELECT * FROM mytable;" > results.txt

Intendiamoci l'opzione -s:

  -s, --silent        Be more silent. Print results with a tab as separator,
                      each row on new line.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top