---
# System prepended metadata

title: Извлечение данных

---

Все бэкапы сваливаются в `/media/backups`; своя директория на каждый сервер.

# Извлечение данных

## Просмотр списка бэкапов

Смотрим список доступных директорий, находим нужную и подсовываем её в команду `borg list`:

    # borg list /media/backups/center-elite_ml/backup/

получаем что-то вроде:

    mysql-2019-09-05T17:21:56            Thu, 2019-09-05 11:21:58 [04caef1df47eaf6d7e1af693423cb18aaf08b0f935355881e9baa3afc6232f03]
    files-www-2019-09-05T17:21:59        Thu, 2019-09-05 11:21:59 [7d5ae617d5760588f73436e2cb2b6021893c32e447a50da9963295376e495444]
    mysql-2019-09-05T17:34:15            Thu, 2019-09-05 11:34:16 [ebadadf674924aeeb416412c07899dfc9c66fac302c138e2e3fa937c95232aee]
    files-www-2019-09-05T17:34:18        Thu, 2019-09-05 11:34:19 [536d5684fd81a58b95637b914ac76c7130c6418c1e175ae50f143f8555e03095]

## Извлечение бэкапа

Переходим в директорию, в которую надо распаковать данные. Выполняем `borg extract`, подкладывая путь к архиву и через двойное двоеточие (`::`) имя бэкапа, который нужно извлечь, из списка выше:

    # borg extract /media/backups/center-elite_ml/backup::mysql-2019-09-05T17:34:15

Смотрим извлечённые файлы в текущей директории.

# Раскатка на новые серверы

Выбираем имя для нового сервера (например, домен с точками, заменёнными на `_`). Дальше в примере это будет `example_com`.

## Подготовка сервера, который нужно бэкапить

Переключаемся под `root`:

    $ sudo -i

Кладём [скрипт отсюда][link-external] ([внутренний адрес][link-internal]) в `/usr/local/bin`. Проверяем, чтобы он был `+x`:

    # chmod 750 /usr/local/bin/incbackup

По умолчанию бэкапятся все базы MySQL и всё содержимое `/var/www`. Если нужно сохранять ещё какие-либо директории, дописываем их в верху скрипта.

[link-external]: https://git.rating.kz/KIsakov/cli/raw/master/scripts/backup/incbackup
[link-internal]: http://192.168.50.220/KIsakov/cli/raw/master/scripts/backup/incbackup

### Настройка автоматического выполнения

Добавляем скрипт в `cron`. Желательно разносить серверы на разное время, чтобы они не начинали пересылать бэкапы одновременно:

    # crontab -e
    30 2 * * * /usr/local/bin/incbackup

### Настройка заливки на удалённый сервер

Создаём новый SSH-ключ, отвечая "да" на всё:

    # ssh-keygen -t ed25519

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

    # mkdir -p ~/.ssh && chmod 750 ~/.ssh
    # cat >~/.ssh/config
    Host backup-server
        HostName backups.rating.kz
        Port 21000
        User example_com
    
    Ctrl+D

Разок подключаемся и отвечаем `yes`, чтобы сервер добавился в `authorized_keys`:

    # ssh backup-server

### Настройка бэкапов MySQL

Создаём `~/.my.cnf` и помещаем туда юзера и пароль для подключения к СУБД. Юзер должен иметь [достаточно прав](https://subscription.packtpub.com/book/big_data_and_business_intelligence/9781783284399/1/ch01lvl1sec14/creating-a-backup-user), проще всего использовать `root`:

    # cat >~/.my.cnf
    [mysql]
    user=root
    password=l337h4xx0r
    
    [mysqldump]
    user=root
    password=l337h4xx0r
    
    Ctrl+D

## Подготовка сервера бэкапов

Создаём нового юзера с домашней директорией в `/media/backups` и пустым паролём:

    # useradd --create-home --base-dir /media/backups example_com
