$ python mysqlbackup.py full-backup
Эта команда снимает полный бэкап с помощью mysqldump
, сжимает с помощью gzip
и сохраняет в папку в формате /<backup_dir>/2020/2020-01/2020-01-01/db_name_2020-01-01-0000.sql.gz
$ python mysqlbackup.py incremental
Эта команда выполняет команду FLUSH LOGS, и копирует предпоследний бинарный лог в папку рядом с полным бэкапом
Подробнее о разных методах бэпапа в mysql
$ wget https://github.com/alifcapital/mysqlbackup/archive/master.zip
$ unzip master.zip
$ cd mysqlbackup-master
$ pip install -r requirements.txt
$ cp config.yaml.example config.yaml
db_name
— название БДdb_user
— имя пользователя БДdb_password
— пароль пользователяdb_host
— адрес БДbackup_dir
– путь директории, куда будут сохраняться бэкапыbin_log_index
– путь к индексовому файлу бинарных логов mysql. Этот путь можно узнать выполнив запросshow variables like "log_bin_index"
Для этого нужно в файле конфигурации mysql my.cnf
указать следующее:
log_bin = /var/log/mysql/mysql-bin.log
Если БД является слейвом, то изменения БД, которые приходят с мастера по умолчанию не будут записываться в бинарных логах. Чтобы включить запись в бинарные логи для слейва, нужно дополнительно указать такой параметр:
log_slave_updates = ON
Допустим у нас такая стратегия бэкапирования:
- Каждый день в полночь снимаем полный бэкап
- Каждые 15 минут снимаем инкрементальный бэкап
Открываем для редактирования файл crontab
:
$ sudo crontab -e
Добавляем следующие строки:
0 0 * * * python /home/johndoe/mysqlbackup-master/mysqlbackup.py full-backup
*/15 * * * * python /home/johndoe/mysqlbackup-master/mysqlbackup.py incremental
Восстановление данных состоит из двух шагов:
- Восстановление полного бэкапа
- Применение бинарных логов снятых после полного бэкапа
Подробнее о восстановлении данных: