Попался мне на просторах интернета один из скриптов для создания бэкапов баз данных, в чем его плюс - создает отдельный архив под каждую базу данных, в отличии от стандартного mysqldump с ключем --all-databases который пишет все базы в один файл для меня получается не совсем правильный бэкап, т.е мне это ни подходит.По мне лучше каждая база -отдельный файл.
В любом случаи желательно сделать пользователя от которого будем делать бекапы, из прав дадим ему права на просмотр баз,SELECT и Lock Tables, я приведу пример как создать из командной строки:
$ mysql -pПАРОЛЬ
-p, --password=[password] – Пароль пользователя, для соединения с сервером MySQL. Не должно быть пробела между -p и паролем.
-u, --user=[user]- Имя пользователя для соединения с сервером MySQL. Необязательно, по умолчанию используется такое же, как ваш логин.Используется если логин отличается от имени пользователя для соединения с сервером MySQL.
далее ...
$ mysql> CREATE USER 'back'@'localhost' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.02 sec)
$ mysql> GRANT SELECT , LOCK TABLES ON * . * TO 'back'@'localhost' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)
для примера пользователь back и его пароль 123456
И для общего развития предложу один из вариантов с использованием mysqldump, может кому пригодиться:
$ mysqldump -uback -p123456 --all-databases | gzip -c > `date "+%Y-%m-%d"`.bz2
все базы данных и сжатие данных на ходу
Теперь сам найденный скрипт:
#!/bin/bash
mkdir ~/mysql_backup/`date +%B-%d`
cd ~/mysql_backup/`date +%B-%d`
for i in `mysql -u %USER% -p%PASSWORD% -e'show databases;' | grep -v information_schema | grep -v Database`; do mysqldump -u %USER% -p %PASSWORD% $i > `date +%Y-%m-%d`-$i; bzip2 -9 `date +%Y-%m-%d`-$i;done
так же не забываем поменять %USER% на пользователя, которого вы создали для бэкапов, и %PASSWORD% на его пароль,
Так же можно использовать довольно интересный и бесплатный скрипт – “Sypex Dumper”
Теперь для полноты автоматизации можно один из понравившихся вариантов добавить в cron:
$ crontab -e
# m h dom mon dow command
01 00 * * * sh ~/backup
запуск каждый день в одну минуту первого.
Так же можно в cron добавить, поиск и удаления архивов, которые "старше" определенного времени, ниже приведен пример для 10 дней.
find ~/каталог-с-архивами -name "*.bz2" -mtime +10 -exec rm -f {} \;
Но тут появилась не большая загвоздка,по скрипту для каждого дня создается своя отдельная папка, а это выражения удаляет и находит только архивы *.bz2 сами папки не удаляются.Буду признателен, если кто подскажет правельное решения. :)
Спасиба Xobrt, вот строчка удаляющая устаревшие каталоги:
find ~/каталог-с-архивами -mtime +10 -type d -exec rm -rf {} \;
есть нюансы, читаем коменты.
Комментариев: 5
Отличный скрипт, тоже взял себе на вооружения
Благодарю :-)
Спасибо за полезный материал!
В качестве благодарности вот вам строчка, удаляющая устаревшие каталоги:
find ~/каталог-с-архивами -mtime +10 -type d -exec rm -rf {} \;
-type d - ключ поиска каталогов
rm -rf удалит каталог (у меня почему-то при этом ругается, что удаляемый каталог не найден. (добавил f в надежде, что перестанет ругаться, но работает и без f)
Спасиба Xobrt, добавил в заметку, проверил у себя действительно ругается, что удаляемый каталог не найден, f - не помогло.
Еще можно в крон для автовыполнения добавить: смотреть тут