
Набор команд для создания автоматического бекапа базы данных MySql посредством утилиты mysqldump по расписанию в планировщике задач cron.
Бекап будет создаваться из под созданного для это пользователя. Пароль к базе сохраним в отдельном файле с ограниченными правами доступа.
Сам бэкап будет архивироваться. В имени файла бекапа сохраним время его создания.
Логинимся в базу:
mysql -u root -p
Создаем и даем права пользователю для бекапа, с возможностью логинится только с локального хоста:
CREATE USER 'имя_пользователя_для_бекапа'@'localhost' IDENTIFIED BY 'тут_пароль';
GRANT LOCK TABLES, SELECT ON имя_базы.* TO 'имя_пользователя_для_бекапа'@'localhost';
FLUSH PRIVILEGES;
quit
Проверим на всякий случай, что все ок, залогинимся, посмотрим список таблиц:
mysql -u имя_пользователя_для_бекапа -p имя_базы
show tables;
quit
Переходим в домашнюю папку /root и создадим файл в котором сохраним пароль к базе:
cd ~/
nano .my.cnf
В файле пишем:
[mysqldump]
user = имя_пользователя_для_бекапа
password = "тут_пароль"
Сохраняем через ctrl+x и y.
Ограничиваем права на доступ к файлу с паролем:
chmod 600 .my.cnf
sudo chown $USER:nogroup .my.cnf
создадим папку с бекапом:
mkdir backup
Тестируем создание бекапа из консоли и смотрим что он появился в папке:
mysqldump --defaults-extra-file=/home/user/.my.cnf имя_базы | gzip > `date +/home/user/backup/backupdb_имя_базы_%Y%m%d.%H%M%S.sql.gz`
ls -la backup
Создаем задачку по расписанию, лучше укажите время создания бекапа через несколько минут от текущего времени, чтобы убедится что он создался. Потом можно подправить на желаемое. Задача будет выполнятся в 4:17 каждый день:
crontab -e
17 4 * * * mysqldump --defaults-extra-file=/home/user/.my.cnf имя_базы | gzip > `date +/home/user/backup/backupdb_имя_базы_\%Y\%m\%d.\%H\%M\%S.sql.gz`
В заключение рекомендую создать тестовую базу и восстановить в нее базу из бекапа. Распаковываем и восстанавливаем
zcat backup/имя_файл.sql.gz | mysql -uroot -p имя_тестовой_базы
Помним админы делятся на три типа:
- кто не делает бэкапы
- тех кто уже делает
- тех кто проверяет корректность и скорость восстановления
Далее можно дополнительно настроить копирование бекапов к себе локально, например буду к себе копировать на windows:
scp -i D:\scp\ssh_key.key -r user@ip_or_host:/home/user/backup/. D:\Backups\mysql\
Полезные ссылки:
- elims.org.ua - Linux: заметки
Спасибо!
Всё заработало.
Но вот только я почему-то получаю пустой файл.
При тестировании на локальной машине таких проблем не наблюдалось.
Но серверах (локальный/удалённый) одинаковые Ubuntu 18.04
В чём может быть проблема?
Интересное кино…
Вот если сделать так из -под root-a:
$ cd ~/
$ cp .my.cnf /home
$ /usr/bin/mysqldump —defaults-extra-file=/home/.my.cnf dbname | gzip > `date +/var/www/SQL/Dump_2019_\%Y\%m\%d.\%H-\%M-\%S.sql.gz
то работает без проблем.
Видимо, придётся так и оставить… :-(