Script crontab di Linux su “mysqldump | gzip "dà dimensioni file errate


0

Ho uno script bin / bash che mysqldumps il mio database sql, quando lo eseguo tutto va bene con filesize = 3MB, ma quando crontab (come sudo) esegue lo script allora la dimensione del file è 20B

copione

#!/bin/bash
cd /home/blades/backup/databases
DATE=$(date +"%d-%m-%Y_%H:%M:%S")
mysqldump -u username -h localhost database --single-transaction | gzip -9 > database.sql_$DATE.gz

e sudo crontab -e

30 04 * * * /home/blades/backup/backup

Che cosa sto facendo di sbagliato?

Risposte:


1

Devi registrare il tuo errore dicendo aggiungendo

2>/tmp/mysqldump.log 

per capire qual è l'errore.

Molto probabilmente il tuo ambiente cron non ha la PATHconfigurazione corretta. Quindi la prima cosa che puoi fare è aggiungere il percorso completo al tuo mysqldumpe ai gzipcomandi, che probabilmente risolverà il tuo problema.

In caso contrario, basta esaminare il registro degli errori.


Non so come usare 2> /tmp/mysqldump.log
lame il

bene, questo è l'output del file di registro mysqldump: errore ottenuto: 1045: accesso negato per l'utente 'xxxxxxxxxx' @ 'localhost' (usando la password: NO) durante il tentativo di connessione
blade

quindi non sta trovando le tue informazioni di autenticazione. stai usando un file di configurazione? in tal caso è necessario specificarlo esplicitamente perché in cron l'ambiente non è l'ambiente della shell di accesso. oppure puoi aggiungere il nome utente e la password al tuo cron script, che è meno sicuro.
johnshen64,

Ho un file di configurazione /home/username/.my.cnf che supporta l'autenticazione. ora il file di log dice "mysqldump: variabile sconosciuta 'defaults-extra-file ="
blade

0

Prova ad aggiungere il percorso completo di mysqldump. /usr/bin/mysqldump -u username -h localhost database --single-transaction | gzip -9 > database.sql_$DATE.gz

(/ usr / bin / mysqldump è un esempio. Potrebbe trovarsi in un altro posto nel sistema). Gli script eseguiti da crontab vengono eseguiti in un altro "luogo" e non definiscono la definizione $ PATH dell'utente corrente. È molto probabile che il tuo attuale utente abbia il percorso mysqldump definito nella sua variabile ambientale $ PATH, ecco perché quando esegui lo script manualmente funziona senza problemi. Lo stesso vale per gzip.


L'ho fatto senza successo
lame il

0

ok sono riuscito a risolverlo, nel file .my.cnf ho dovuto specificare mysqldump e client, non solo mysqldump quindi il file .my.cnf è (dopo quel chmod a 400)

[client]
user=aaaaaaaaaaaaa
password=xxxxxxxxxxxx

[mysqldump]
user=aaaaaaaaaaaaa
password=xxxxxxxxxxxx

l'altra questione è che le opzioni devono essere prima quindi localhost ecc. quindi lo script va in questo modo

/usr/bin/mysqldump --defaults-file=/home/username/.my.cnf --single-transaction -h localhost database_name | gzip -9 > database_name.sql_$DATE.gz

Questo è tutto, grazie per l'aiuto comunque

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.