Переход к предыдущей публикации Временный переезд MySQL: Восстановление пароля root Переход к следущей публикации

Ежесуточный бекап MySQL

Суббота, 12 января, 2008 00:45:56 EET

Исправления от 23 марта, 2009 10:06:54

Бекап - прежде всего! В связи с грядущим переносом блога 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

Вот собственно и все.

Похожие публикации

Выделенные сервера дешевле обычного хостинга

Комментариев 6

WingDevil 18 ноября, 2009 21:32:52 EET .:. ID #21364 .:.

crontab -u root /usr/bin/mysqldump.sh
“/usr/bin/mysqldump.sh”:4: bad minute
crontab: errors in crontab file, can’t install

выскакивает ошибка. помогите ее исправить

4 строка это время, но и после ее удаления выскакиала таже самая проблема

Daemony 21 сентября, 2009 13:14:56 EEST .:. ID #17682 .:.

proxyd: Было бы намного интереснее если бы скрипт сам получал бы список всех баз которые необходимо бекапить. А то как то не интересно каждый раз дописывать в скрипт новую базу.

Добавить в скрипт такие строки:

echo "show databases" | mysql -u root -pROOT_PASSWORD | grep -v Database | tr "\n" " "

и подставить их в вывод цикла for base in.

Я это не использую, потому что баз у меня много, но многие бекапить смысла нет (или не нужно).

proxyd 13 сентября, 2009 21:54:15 EEST .:. ID #17363 .:.

Было бы намного интереснее если бы скрипт сам получал бы список всех баз которые необходимо бекапить. А то как то не интересно каждый раз дописывать в скрипт новую базу.

Daemony 2 июня, 2009 09:32:55 EEST .:. ID #11565 .:.

AmsTaFF: можно и не вбиваеть в отдельную, а оставить просто без конструкции $() + зачем делать так “%Y-%m-%d-%h-%H:%M:%S”, когда написано “ежесуточная”, не думаю, что тут будут иметь значения минуты и секунды… думаю, что даже часы не имею значения… так что стоит только заменить

Это уже как душе угодно. :) По определенным обстоятельствам, в последнее время я вообще поставил в задания бекап всех баз четыре раза в сутки:

  • в 9.00
  • в 15.00
  • в 21.00
  • в 03.00
AmsTaFF 1 июня, 2009 17:53:43 EEST .:. ID #11522 .:.

можно и не вбиваеть в отдельную, а оставить просто без конструкции $()
+ зачем делать так “%Y-%m-%d-%h-%H:%M:%S”, когда написано “ежесуточная”, не думаю, что тут будут иметь значения минуты и секунды… думаю, что даже часы не имею значения…
так что стоит только заменить

btr 2 апреля, 2009 06:26:59 EEST .:. ID #7127 .:.

Лучше время в отдельную переменную вбить, а то $(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, можно его также в переменную впихнуть для универсальности.

Возник вопрос по этой теме, или есть что добавить? Говорите!

  1. Зарегистрированным пользователям вводить защитный код (captcha) не приходится.
  2. Загрузить свою аватарку Вы сможете, зарегистрировавшись на сервисе www.gravatar.com
Публикуя комментарий Вы подтверждаете, что ознакомились c Правилами и принимаете их!
HOMOSAPIENS ONLY! :)