Ежесуточный бекап MySQL
В связи с грядущим переносом блога live.daemony.org на другой сервер, вспомнилась маленькая мелочь: суточный бекап всех баз данных, лежащих на сервере MySQL на локальной машине. Для достижения цели используются: оболочка shell, утилита mysqldump и планировщик заданий cron.
Пишем коротенький скриптик:
#!/bin/sh USERNAME=”root” PASSWORD=”blablabla” WDIR=”/System_Backup/mysql” for base in db1 db2 db3 db4 db5 dbn do `/bin/mkdir -p $WDIR/$base` `/bin/chmod 700 $WDIR/$base/` `/usr/local/bin/mysqldump -u $USERNAME -p$PASSWORD -B $base > $WDIR/$base/backup_$base.sql` `/usr/bin/gzip -cf9 $WDIR/$base/backup_$base.sql > $WDIR/$base/$base’_'$(date +%Y-%m-%d).gz` `/bin/rm $WDIR/$base/*.sql` `/bin/chmod -R o-rwx $WDIR` done
- где:
- db1 db2 db3 db4 db5 и так далее - имена баз данных на MySQL сервере, подлежащие бекапу;
- USERNAME - имя пользователя, имеющего права доступа к упомянутым базам;
- PASSWORD - пароль пользователя USERNAME
- WDIR - рабочая директория, куда будут ложиться бекапы. У меня это смонтированная сетевая папка на другой машине.
Скрипт создает директорию для бекапа, далее выгребает бекап соответствующей базы, сжимает его с помощью gzip и устанавливает соответсвующие права доступа на сжатый бекап. Ничего сложного. Далее скрипт попросту гоняется кроном раз в сутки:
30 02 * * * root /root/scripts/mysql-backup.sh
Вот собственно и все.
Похожие публикации
Опубликовал Daemony |
Рубрика FreeBSD, Базы данных, Полезности |
Читали 4,930 раз(а)
Теги: backup, FreeBSD, mysql, unix, бекап, резервное копирование, скрипт
Теги: backup, FreeBSD, mysql, unix, бекап, резервное копирование, скрипт


crontab -u root /usr/bin/mysqldump.sh
“/usr/bin/mysqldump.sh”:4: bad minute
crontab: errors in crontab file, can’t install
выскакивает ошибка. помогите ее исправить
4 строка это время, но и после ее удаления выскакиала таже самая проблема
Добавить в скрипт такие строки:
и подставить их в вывод цикла for base in.
Я это не использую, потому что баз у меня много, но многие бекапить смысла нет (или не нужно).
Было бы намного интереснее если бы скрипт сам получал бы список всех баз которые необходимо бекапить. А то как то не интересно каждый раз дописывать в скрипт новую базу.
Это уже как душе угодно.
По определенным обстоятельствам, в последнее время я вообще поставил в задания бекап всех баз четыре раза в сутки:
можно и не вбиваеть в отдельную, а оставить просто без конструкции $()
+ зачем делать так “%Y-%m-%d-%h-%H:%M:%S”, когда написано “ежесуточная”, не думаю, что тут будут иметь значения минуты и секунды… думаю, что даже часы не имею значения…
так что стоит только заменить
Лучше время в отдельную переменную вбить, а то $(date +%Y-%m-%d вобще неизвестно что.
Полный рабочий скрипт:
# edited by btr #icq 105360
#!/bin/sh
USERNAME=”user”
PASSWORD=”password”
WDIR=”/usr/backup”
TIME=`date +%Y-%m-%d-%h-%H:%M:%S`
for base in base1 base2
do
`/bin/mkdir -p $WDIR/$base`
`/bin/chmod 700 $WDIR/$base/`
`/usr/local/bin/mysqldump -u$USERNAME -p$PASSWORD -h192.168.0.1 -B $base > $WDIR/$base/backup_$base.sql`
`/usr/bin/gzip -cf9 $WDIR/$base/backup_$base.sql > $WDIR/$base/$base._$TIME.gz`
`/bin/rm $WDIR/$base/*.sql`
`/bin/chmod -R o-rwx $WDIR`
done
В данном случае будут бэкапиться базы которые распололежны на хосте с ip 192.168.0.1, можно его также в переменную впихнуть для универсальности.