Простой скрипт для бэкапов
Для решения простой задачи по формированию бекапов будем использовать консольный скрипт

Готовий CLI скрипт для бекапів

Скрипт Python, який використовує URL-адресу /web/database/backup за замовчуванням для створення резервних копій. Завантажуємо скрипт:

curl "https://gitlab.com/snippets/1850931/raw?inline=false"\
--output odoo-backup.py
chmod +x odoo-backup.py


Приклад використання:

python3 odoo-backup.py --name db_name --pwd master_pwd --host http://localhost:8069 --path ./

не забуваємо вказати назву БД, пароль та урл до веб-інтерфейсу.

Настройка инкрементных бекапов на bash

Подготовка к настройке автоматического формирования инкрементных бекапов:

  1. Заходим на сервер и создаем папку backups. В ней добавляем 2 папки: sites (для файлов) и db (для баз данных). В ней же создаем 2 файла: sites.sh и db.sh.
  2. Нам нужен пользователь и пароль к базам данных. Его пропишем в db.sh. Не ообязательно использовать root. Главное, чтобы у пользователя, через которого будем создавать бекапы, был доступ к нужным базам данных.

Логика формирования архива с файлами сайта в файле sites.sh

#!/bin/bash
echo "Start files backup"
date
TAR=`which tar`
# Папка, куда будем складывать архивы
syst_dir=/backups/sites
if [ ! -d "$DIRECTORY" ]; then
  mkdir -p ${syst_dir}/`date +%Y-%m`/
fi
# Данная команда архивирует файлы на сервере. По умолчанию, в архив собирается содержимое папки /var/www. 
tar -czf ${syst_dir}/`date +%Y-%m`/backup-day-$(date +%Y-%m-%d-%H%M%S).tar.gz --listed-incremental=${syst_dir}/`date +%Y-%m`/sites.snapshot /var/www
find ${syst_dir}/*.sql.gz -mtime +95 -delete
find ${syst_dir}/ -type d -empty -delete
date
echo "Finish backup"

Если нужно исключить какую-то папку из бекапа, используем —exclude=PATH

Содержимое файла db.sh:

#!/bin/bash
HOST=localhost
DUMP_DIR=/backups/db
MYSQL=`which mysql`
MYSQLDUMP=`which mysqldump`
# Список баз данных. Если несколько - разделяем пробелом.
DB_LIST='db1 db2 db3'
if [ "$1" == "week" ]; then
    type='wbackup'
else
    type='dbackup'
fi
for db in $DB_LIST; do
    NOW=`date +%Y%m%d-%H%M%S`
    $MYSQLDUMP --single-transaction -uUSER -pMYSQLPASSWORD $db | gzip > $DUMP_DIR/$type-$db-$NOW.sql.gz
done
#find $DUMP_DIR/*.sql -mtime +30 -delete
#$CHARON --dir $DUMP_DIR/  --maxage 76 --all
find $DUMP_DIR/wbackup*.sql.gz -mtime +32 -delete
find $DUMP_DIR/dbackup*.sql.gz -mtime +7 -delete


Не забываем заменить USER и PASSWORD, иначе получим пустые архивы баз данных.

Последний этап — добавление в crontab задач для автоматического формирования бекапов:

0 0 * * 1-5,7 cd /backups/ && ./db.sh > /dev/null 2>&10 0 * * 6 cd /backups/ && ./db.sh week > /dev/null 2>&10 2 * * * cd /backups/ && ./sites.sh > /dev/null 2>&1

На забываем сделать файлы db.sh и sites.sh исполняемыми. Скрип рабочий, не раз проверено на серверах Centos7.