Auf meiner OpenBSD-Box habe ich die folgende Crontab für den Benutzer _mysql
0 4 * * * /backup/mysql_backup/mysql_backup.sh
0 9 * * 1 mysql -uroot -pMySQLpassword -e "purge master logs before date_sub(now(),interval 5 day);"
Der erste war darauf ausgerichtet, die MySQL-Datenbanken auf dieser Box zu sichern. Mir ist jetzt klar, dass diese Jobs nicht ausgeführt wurden, da dem Benutzer _mysql die Verbindungsberechtigung verweigert wurde (ich habe bestätigt, dass das Kennwort für den Benutzer _mysql korrekt ist).
Ich denke also, ich sollte diese Jobs in der Crontab eines anderen Benutzers haben, aber in welcher (ich nehme an, sie sollten nicht in der Crontab von Root sein)? Ich suche also nach Vorschlägen, wie ich das konfigurieren kann. Oder muss ich meine MySQL-Konfiguration ändern?
Bearbeiten
Das Skript befindet sich auf demselben Server wie die Datenbank. Dieser Crontab-Eintrag schlägt mit dem Fehler fehl
connect(';host=localhost;mysql_read_default_group=mysqlhotcopy','',...) fehlgeschlagen: Zugriff verweigert für Benutzer '_mysql'@'localhost' (mit Passwort: JA) bei /usr/local/bin/mysqlhotcopy Zeile 178 aigaion_copy DBI
Antwort1
Sie können expire_logs_days=5 in Ihrer my.cnf verwenden, um dieselbe Funktion wie Ihr zweiter Cron-Job auszuführen. Das ist wahrscheinlich zuverlässiger.
Antwort2
Der Systembenutzer, der den Cronjob ausführt (_mysql), sollte im Verhältnis zum Benutzer, der sich mit der Datenbank verbindet (root), keine Rolle spielen. Wichtig wäre nur der Hostname/die IP des Servers, von dem/der das Skript eine Verbindung herstellt.
Befindet sich das Skript auf demselben Server wie die Datenbank? Welchen genauen Fehler erhalten Sie, wenn Sie versuchen, die Befehle auszuführen?
Antwort3
Der Benutzer „_mysql“@„localhost“ verfügt laut der geposteten Fehlermeldung nicht über die erforderlichen Berechtigungen innerhalb der Datenbank.
Sie müssen diesem Benutzer die erforderlichen Berechtigungen erteilen oder andere Anmeldeinformationen in Ihrem Skript /backup/mysql_backup/mysql_backup.sh verwenden.