Cronjob führt MySQL aus und erhält keinen Root-Zugriff

Cronjob führt MySQL aus und erhält keinen Root-Zugriff

Cron-Job-Datei:

46 13 * * * root /home/tmp/test_mysql.sh

Skript:

Abfrage ausführen(){
    Abfrage="$1"
     res=`mysql --skip-column-names -e "$query"`
    echo "$res"
}

res=`execute_query "Datenbanken anzeigen"`
echo $res

Fehler, den ich bekomme, wenn der Cron-Job das Skript erfolgreich ausführt:

FEHLER 1045 (28000): Zugriff für Benutzer „root“@„localhost“ verweigert (mit Passwort: NEIN)

Ich kann das Skript erfolgreich von der Befehlszeile aus als Root ausführen, da die Anmeldeinformationen für MySQL in /root/.my.cnf gespeichert sind. Was ist falsch? Liest Cronjob /root/.my.cnf irgendwie nicht?

Antwort1

Sie sollten sich nicht darauf verlassen, dass der MySQL-Client die entsprechende MySQL-Konfigurationsdatei auswählt, dakaskadierende Naturdavon, wie der Client diese Dateien liest. Stattdessen sollten Sie sowohl Ihre als auch my.cnfin test_mysql.shund /home/tmpverwenden --defaults-extra-file[Verknüpfung]-Parameter in Ihrem Skript.

Beachten Sie, dass die --defaults-extra-fileAnforderungenErsteArgument Ihres MySQL-Befehls, sonst funktioniert es nicht.

execute_query(){
    query="$1"
     res=`mysql --defaults-extra-file=/home/tmp/my.cnf --skip-column-names -e "$query"`
    echo "$res"
}

res=`execute_query "show databases"`
echo $res

/rootist kein besonders guter Ort, um Dinge abzugeben (Berechtigungen usw.) und sollte vermieden werden.

Das Ausführen von Skripten, die mit einem MySQL-Server interagieren, sollte auch mit einem nicht privilegierten Benutzer durchgeführt werden.

verwandte Informationen