2013-04-06 19 views
5

Próbuję utworzyć zadanie cron do tworzenia kopii zapasowej bazy danych.Tworzenie zadania cron dla mysqldump

To, co mam tak daleko:

mysqldump.sh

mysqldump -u root -ptest --all-databases | gzip > "/db-backup/backup/backup-$(date)" 2> dump.log 

echo "Finished mysqldump $(date)" >> dump.log 

Cron zadanie:

32 18 * * * /db-backup/mysqldump.sh 

Problem Mam to zadanie nie jest wykonywany przez cron lub kiedy nie ma mnie w katalogu.

Czy ktoś może doradzić. Czy moje ścieżki są nieprawidłowe?

Również następujący wiersz nie jestem pewien błędy wyjście będzie do dump.log:

mysqldump -u root -ptest --all-databases | gzip > "/db-backup/backup/backup-$(date)" 2> dump.log 

Co pracował:

mysqldump -u root -ptest --all-databases | gzip > "../db-backup/backup/backup-$(date).sql.gz" 2> ../db-backup/dump.log 

echo "Finished mysqldump $(date)" >> ../db-backup/dump.log 
+0

Twój przykład powinien działać. Jak się upewnić, że to * nie działa *? – hek2mgl

+0

Cóż, jeśli jestem w katalogu i wpisuję ./mysqldump.sh to działa; jednak jeśli I cd .. i wpisz say ./db-backup/mysqldump.sh, to dziennik i powrót nie są pobierane. Ponadto, powyższe zadanie cron zostało ustawione na 18:32 w celu przetestowania. 18:32 minęło, że nie wykonano kopii zapasowej. – Brian

+5

Należy użyć ścieżki bezwzględnej pliku dziennika. Podobnie jak '/ var/log/mysql.dump.log'. Upewnij się, że plik jest zapisywalny przez użytkownika cron. Uwaga: zadania wymienione w/etc/crontab lub /etc/cron.d* zostaną wykonane jako root. Istnieje również mechanizm crontab na użytkownika. Takie cronjobs będą działać z takimi samymi uprawnieniami jak użytkownik, do którego należy crontab – hek2mgl

Odpowiedz

6

Istnieje kilka rzeczy, które można sprawdzić, chociaż więcej informacji jest zawsze bardziej przydatne (uprawnienia i lokalizacja pliku, cała zawartość pliku itp.).

  1. Nigdy nie zaszkodzi przedmowa pliku mysqldump.sh z Shebang syntax dla swojego środowiska. Zaryzykowałbym zgadnięcie, że #!/bin/bash byłby wystarczający.
  2. Zamiast mysqldump -u .... użyj ścieżki bezwzględnej /usr/bin/mysqldump (lub w dowolnym miejscu w systemie). Ścieżki bezwzględne są zawsze dobrym pomysłem w dowolnej formie skryptów, ponieważ trudno powiedzieć, czy użytkownik ma takie samo środowisko, jak Ty.

Jeśli chodzi o przechowywanie błędów w dump.log, nie wierzę, że składnia jest poprawna. Jestem dość pewny, że wyprowadzasz błędy z gzip do dump.log, a nie błędy z mysqldump. Wydaje się, że to fairly common question, który pojawia się w odpowiedzi na mysqldump $PARAMS | gzip -c dump-$(date)

Powiązane problemy