Я создал задание cron для ежедневного резервного копирования, чтобы сохранить его в каталоге / backups
Этот каталог резервных копий находится в корне [/] сервера VPS и представляет собой отдельный раздел резервных копий, предоставляемый нашим хостом VPS. IE хранится на другом диске.
Поэтому я создал небольшой сценарий оболочки, чтобы запускать резервные копии и хранить их там.
#!/bin/sh
mysqldump --all-databases | gzip > /backups/dbbackup-`date +%Y-%m-%d`.sql.gz
Это создает резервную копию .gz с прикрепленной датой. Это работает, потому что когда я запускаю его, я получаю то, что хочу.
Но я хочу этого в работе cron. Я отредактировал crontab и установил его запуск в 21:00 каждую ночь.
0 21 * * * /backups/DBBackups.sh
Я проверил журнал cron сегодня утром, и он запустился,
Jun 20 21:00:01 973900 CROND[13279]: (root) CMD (/backups/DBBackups.sh)
Но в каталоге / backups нет файла.
Где я здесь ошибаюсь? Будет ли он где-то выдавать ошибку, которую я не проверяю?
Я все еще новичок в этом деле. Позже я хотел бы экспортировать конкретную базу данных по таблице, потому что с файлом .sql размером 2 ГБ сложно работать, если он мне когда-нибудь понадобится. Кроме того, я, вероятно, скоро достигну какого-то максимального размера файла. Но оставьте это мне. Если кто-то может помочь правильно запустить этот сценарий, это будет очень полезно.
Проблема в вашем скрипте DBbackups.sh. Когда cron запускается, он, вероятно, не имеет информации о пути, конечно, не той, к которой вы привыкли, поскольку она не создается из вашей оболочки входа в систему, поэтому вам нужно указать абсолютные пути. Поэтому DBbackups.sh должен выглядеть примерно так:
#!/bin/sh
BACKUPDIR="/backups"
MYSQLDUMP="/usr/local/mysql/bin/mysqldump"
GZIP="/bin/gzip"
DATE=`date +%Y-%m-%d`
${MYSQLDUMP} --all-databases | ${GZIP} > ${BACKUPDIR}/dbbackup-${DATE}.sql.gz
NB: Как всегда, ваши пути могут отличаться, проверьте свои пути к gzip и mysqldump с помощью
which mysqldump
which gzip