Domanda

Sto cercando di usare mysqldump per scaricare uno schema, e per lo più funziona ma ho incontrato una curiosità: il -p o --password sembra che stia facendo qualcosa di diverso dall'impostazione della password (come dicono la pagina man e l'output --help ).

In particolare, sembra che stia facendo ciò che è indicato qui: http: //snippets.dzone. com / posts / show / 360 - ovvero, impostare il database su dump.

Per supportare la mia affermazione un po 'bizzarra, posso dirti che se non specifico l'opzione --password (o -p ), il comando stampa l'utilizzo e termina con un errore. Se lo specifico, mi viene immediatamente richiesto di inserire una password (!), Quindi il database specificato nell'opzione --password viene scaricato (o viene visualizzato un errore nel solito caso in cui un è stata specificata una password che non corrisponde a nessun nome di database).

Ecco una trascrizione:

    $ mysqldump -u test -h myhost --no-data --tables --password lose
    Enter password: 
    -- MySQL dump 10.10
    mysqldump: Got error: 1044: Access denied for user 'test'@'%' to
    database 'lose' when selecting the database

Quindi, cosa dà? È così che dovrebbe funzionare? Sicuramente non sembra avere senso né corrisponde alla documentazione ufficiale. E infine, se funziona così, come intendo specificare la password da utilizzare in un lavoro automatizzato? Utilizzando prevede ???

Sto usando mysqldump Ver 10.10 Distrib 5.0.22, per pc-linux-gnu (i486) .

È stato utile?

Soluzione

Da man mysqldump:

  

--password [= password], -p [password]

     

La password da utilizzare durante la connessione al server. Se usi   nel modulo di opzione breve (-p), non è possibile avere uno spazio tra l'opzione             e la password. Se si omette il valore della password in seguito a             --password o -p opzione nella riga di comando, viene richiesto             uno.
            Specificare una password sulla riga di comando deve essere considerata             insicuro. Vedere la Sezione 6.6, "Protezione della password".

Sintatticamente, non si utilizza correttamente l'opzione --password. Come tale, il parser della riga di comando sta vedendo l'uso di " perdi " come argomento autonomo che mysqldump interpreta come il nome del database come se si provasse un comando più semplice come mysqldump perdere

Per correggerlo, prova a usare --password = perdita o -plose o semplicemente usa -p o --password e digitare la password quando richiesto.

Altri suggerimenti

Un'altra opzione è quella di creare il file ~ / .my.cnf (le autorizzazioni devono essere 600).

Aggiungi questo al file .my.cnf

[client]
password=lose

Ciò ti consente di connetterti come utente MySQL che richiede una password senza dover inserire effettivamente la password. Non hai nemmeno bisogno di -p o --password.

Molto utile per lo scripting mysql & amp; comandi mysqldump.

Ho scoperto che ciò accade se la tua password contiene caratteri speciali. La password mysql qui ha un! al suo interno, quindi devo fare == password = 'xxx! xxxx' perché funzioni correttamente. Nota i 'marchi.

Non sono sicuro che funzioni per la versione --password, ma se si utilizza -p è possibile specificare la password immediatamente dopo (la chiave non deve includere uno spazio):

mysqldump -pmypassword ...

Prova a mettere un '=' tra --password lost like:

--password=lose

Se usi -p, allora non può esserci spazio tra -p e la password, cioè '-plose'.

Hai provato --password = qualunque-password-sia?

Forse mi manca la domanda, ma è quello che faccio per eseguire lo strumento.

Se usi -p o --password senza un argomento, otterrai un prompt che ti chiederà di inserire una password.

Se si desidera indicare una password nella riga di comando, è necessario utilizzare -pYOURPASSWORD o --password = YOURPASSWORD. Nota che non c'è spazio dopo -p e che c'è un " = " segno dopo --password.

Nel tuo esempio, mysqldump richiede una password, quindi tratta " perdi " come nome del database. Se quella era la tua password, avresti dovuto includere un " = "

L'opzione -p non richiede un argomento. Basta inserire -p o --password per indicare che si utilizzerà una password per accedere al database. Il motivo per cui sta scaricando il database chiamato qualunque cosa tu abbia inserito dopo -p è che l'ultimo argomento per mysqldump dovrebbe essere il nome del database che vuoi scaricare (o --all-database se li vuoi tutti).

Anche la risposta di Nathan è vera. Puoi specificare la password immediatamente seguendo l'opzione -p (utile negli script e in cui non puoi inserirla manualmente dopo aver eseguito il comando).

- [password = password]

Ecco la documentazione

Forse il tuo utente " test " non ha il permesso di accedere a " perdi " database?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top