Correggere il nome utente / la password di MySQL, ma get l'errore di accesso negato quando viene eseguito dallo script

Attualmente sto provando a eseguire il seguente command da uno script di shell.

/usr/bin/mysql -u username -ppassword -h localhost database 

Funziona perfettamente bene quando eseguito manualmente, e non da uno script. Quando provo a eseguire uno script che contiene quel command, ottengo il seguente errore:

  • La logging generale non funziona in MySQL
  • MySQL utilizzo dell'alta CPU in piccolo sito web
  • È meglio lasciare un database MySQL prima di fare un ripristino?
  • mysql init-file config opzione che fornisce file non trovato errore
  • Connessione interrotta (si è verificato un errore di lettura dei pacchetti di comunicazione)
  • Colbind il database MySQL in remoto su un provider di hosting sicuro?
  •  ERROR 1045 (28000) at line 3: Access denied for user 'username'@'localhost' (using password: YES) 

    Ho letteralmente copiato e incollato il command di lavoro nello script. Perché l'errore? Come sidenote: l'intento finale è quello di eseguire lo script con cron.

    EDIT: Ecco una versione strappata del mio script che sto cercando di eseguire. È ansible ignorare la maggior parte fino al punto in cui si connette a MySQL intorno alla linea 19.

     #!/bin/sh #Run download script to download product data cd /home/dir/Scripts/Linux /bin/sh script1.sh #Run import script to import product data to MySQL cd /home/dir/Mysql /bin/sh script2.sh #Download inventory stats spreadsheet and rename it cd /home/dir /usr/bin/wget http://www.url.com/file1.txt mv file1.txt sheet1.csv #Remove existing export spreadsheet rm /tmp/sheet2.csv #Run MySQL queries in "here document" format /usr/bin/mysql -u username -ppassword -h localhost database << EOF --Drop old inventory stats table truncate table table_name1; --Load new inventory stats into table Load data local infile '/home/dir/sheet1.csv' into table table_name1 fields terminated by ',' optionally enclosed by '"' lines terminated by '\r\n'; --MySQL queries to combine product data and inventory stats here --Export combined data in spreadsheet format group by p.value into outfile '/tmp/sheet2.csv' fields terminated by ',' optionally enclosed by '"' lines terminated by '\r\n'; EOF 

    EDIT 2: dopo alcuni test più, il problema è con il << EOF che è alla fine del command. Questo è lì per il "documento qui". Quando viene rimosso, il command funziona bene. Il problema è che ho bisogno di << EOF modo che le query MySQL andranno in esecuzione.

    4 Solutions collect form web for “Correggere il nome utente / la password di MySQL, ma get l'errore di accesso negato quando viene eseguito dallo script”

    Scopri che la causa principale era un command nella query MySQL che stavo cercando di eseguire senza le autorizzazioni corrette. Ecco perché dice l'errore at line 3 , cioè la row 3 della query sql. Ho commesso la root e tutto va bene ora. Ecco la domanda chiaramente chiesto e risposto:

    Accesso MySQL negato con "documento qui"

    Stai usando questo stesso command / script su localhost? O server remoto, tieni presente che each voce di mysql.users è impostata host quindi se hai fatto solo localhost non funziona per l'accesso remoto e viceversa.

    Se si tratta di uno script di shell bash, è ansible impostare il #! linea a #!/bin/bash -x , che rende l'output di script alla console i comandi esatti che sta eseguendo. Puoi quindi prendere quel command e provarlo manualmente oppure vedere come potrebbe essere diverso da quello che stavi già eseguendo a mano.

    In caso contrario, sarebbe utile per submit uno snippet dallo script in cui viene eseguito questo command per avere più context da utilizzare per rispondere alla domanda.

    È assolutamente significativo che l'ultima row contenga SOLO "EOF \ n". Il simbolo dello spazio singolo alla fine della linea può rendere il marcatore diverso da quello usato alla prima linea. Nel tuo caso basta aggiungere la string vuota dopo la linea "EOF".

    È la buona abitudine aggiungere la linea di commento all'ultima row del codice.

     /usr/bin/mysql -u username -ppassword -h localhost database << EOF . . . . . EOF ### 
    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.