Это старая версия документа!
Скрипт резервного копирования PGVector
Описание
Скрипт автоматизированного резервного копирования для контейнеров PGVector (PostgreSQL с расширением vector) и pgAdmin. Создает полные бекапы включающие SQL дампы и архивы данных.
Возможности:
- Создание SQL дампов базы данных
- Архивирование папок с данными PostgreSQL и pgAdmin
- Автоматическая очистка старых бекапов
- Подробное логирование операций
- Проверка работоспособности сервисов
- Уведомления в Telegram (опционально)
<note tip> Скрипт безопасно останавливает контейнеры для создания консистентного бекапа и автоматически запускает их обратно. </note>
Предварительные требования
- Docker и Docker Compose установлены
- Контейнеры PGVector запущены из директории
/opt/pgvector - Права root или sudo для выполнения операций
Установка
Шаг 1: Создание директории для скриптов
sudo mkdir -p /opt/scripts sudo mkdir -p /opt/backups/pgvector
Шаг 2: Создание файла скрипта
sudo nano /opt/scripts/pgvector-backup.sh
Скопируйте содержимое скрипта в файл и сохраните.
Шаг 3: Установка прав на выполнение
sudo chmod +x /opt/scripts/pgvector-backup.sh sudo chown root:root /opt/scripts/pgvector-backup.sh
Шаг 4: Настройка владельца директории бекапов
sudo chown -R $USER:$USER /opt/backups/pgvector
Конфигурация
Основные параметры
Отредактируйте переменные в начале скрипта под ваши нужды:
- /opt/scripts/pgvector-backup.sh
# Настройки путей COMPOSE_FILE="/opt/pgvector/docker-compose.yml" PGVECTOR_DIR="/opt/pgvector" BACKUP_DIR="/opt/backups/pgvector" # Настройки хранения RETENTION_DAYS=10 # Количество дней хранения бекапов # Настройки базы данных DB_NAME="postgres" DB_USER="postgres" DB_PASSWORD="FDg44ThJHFjwO" # Ваш пароль DB_CONTAINER="pgvector_postgres"
<note warning> Убедитесь, что пароль базы данных в скрипте соответствует паролю в docker-compose.yml </note>
Настройка уведомлений Telegram (опционально)
Раскомментируйте и настройте строки в конце скрипта:
curl -s -X POST "https://api.telegram.org/botYOUR_BOT_TOKEN/sendMessage" \ -d chat_id="YOUR_CHAT_ID" \ -d text="✅ PGVector backup completed: $BACKUP_NAME ($FINAL_SIZE)"
Использование
Ручной запуск
# Запуск с правами root sudo /opt/scripts/pgvector-backup.sh # Запуск с отображением вывода sudo /opt/scripts/pgvector-backup.sh | tee /tmp/backup.log
Проверка логов
# Просмотр последних логов tail -f /opt/backups/pgvector/backup.log # Просмотр всех логов cat /opt/backups/pgvector/backup.log
Автоматизация
Настройка cron
sudo crontab -e
Добавьте одну из следующих строк:
# Ежедневно в 2:00 ночи 0 2 * * * /opt/scripts/pgvector-backup.sh >/dev/null 2>&1 # Еженедельно по воскресеньям в 3:00 0 3 * * 0 /opt/scripts/pgvector-backup.sh >/dev/null 2>&1 # Ежедневно в 2:00 с логированием в syslog 0 2 * * * /opt/scripts/pgvector-backup.sh 2>&1 | logger -t pgvector-backup
Проверка работы cron
# Проверка статуса cron sudo systemctl status cron # Просмотр логов cron sudo grep pgvector /var/log/syslog
Структура бекапов
После выполнения скрипта в /opt/backups/pgvector будут созданы:
| Файл | Описание |
|---|---|
pgvector_backup_YYYYMMDD_HHMMSS_complete.tar.gz | Итоговый архив со всеми данными |
backup.log | Лог-файл операций |
Содержимое итогового архива:
- SQL дамп основной базы данных
- Полный SQL дамп всех баз данных
- Архив папок
postgres_dataиpgadmin_data - Файл
docker-compose.yml
Восстановление из бекапа
Полное восстановление
# 1. Остановите контейнеры cd /opt/pgvector sudo docker-compose down # 2. Создайте резервную копию текущих данных sudo mv postgres_data postgres_data.old sudo mv pgadmin_data pgadmin_data.old # 3. Извлеките бекап cd /opt/backups/pgvector sudo tar -xzf pgvector_backup_YYYYMMDD_HHMMSS_complete.tar.gz # 4. Извлеките данные из архива sudo tar -xzf pgvector_backup_YYYYMMDD_HHMMSS.tar.gz -C /opt/pgvector # 5. Запустите контейнеры cd /opt/pgvector sudo docker-compose up -d
Восстановление только базы данных
# 1. Извлеките SQL дамп cd /opt/backups/pgvector tar -xzf pgvector_backup_YYYYMMDD_HHMMSS_complete.tar.gz # 2. Восстановите базу данных docker exec -i pgvector_postgres psql -U postgres -d postgres < pgvector_backup_YYYYMMDD_HHMMSS_database.sql # Или восстановите все базы данных docker exec -i pgvector_postgres psql -U postgres < pgvector_backup_YYYYMMDD_HHMMSS_all_databases.sql
Мониторинг и обслуживание
Проверка размера бекапов
# Размер всех бекапов du -sh /opt/backups/pgvector # Список всех бекапов с размерами ls -lah /opt/backups/pgvector/*.tar.gz
Ручная очистка старых бекапов
# Удалить бекапы старше 30 дней find /opt/backups/pgvector -name "pgvector_backup_*" -mtime +30 -delete
Тестирование бекапа
# Проверка целостности архива tar -tzf /opt/backups/pgvector/pgvector_backup_YYYYMMDD_HHMMSS_complete.tar.gz # Проверка SQL дампа head -20 pgvector_backup_YYYYMMDD_HHMMSS_database.sql
Устранение проблем
Частые ошибки
Ошибка: «Файл docker-compose.yml не найден»
# Проверьте путь к файлу ls -la /opt/pgvector/docker-compose.yml # Отредактируйте переменную COMPOSE_FILE в скрипте
Ошибка: «Контейнер не найден»
# Проверьте имена контейнеров docker ps -a # Обновите переменную DB_CONTAINER в скрипте
Ошибка подключения к базе данных
# Проверьте статус контейнера docker exec pgvector_postgres pg_isready -U postgres # Проверьте пароль docker exec -it pgvector_postgres psql -U postgres
Логи отладки
# Запуск с подробными логами sudo bash -x /opt/scripts/pgvector-backup.sh # Проверка логов Docker docker logs pgvector_postgres docker logs pgvector_pgadmin
Безопасность
<note important> Рекомендации по безопасности:
- Храните бекапы на отдельном диске или удаленном сервере
- Регулярно проверяйте целостность бекапов
- Ограничьте права доступа к директории с бекапами
- Зашифруйте бекапы при передаче по сети
</note>
Настройка прав доступа
# Ограничить доступ к директории бекапов sudo chmod 750 /opt/backups/pgvector sudo chown root:backup /opt/backups/pgvector # Ограничить доступ к скрипту sudo chmod 750 /opt/scripts/pgvector-backup.sh
Дополнительные возможности
Отправка бекапов на удаленный сервер
Добавьте в конец скрипта:
# Отправка через rsync rsync -avz "$FINAL_BACKUP" user@remote-server:/backup/pgvector/ # Отправка через scp scp "$FINAL_BACKUP" user@remote-server:/backup/pgvector/
Интеграция с системой мониторинга
# Отправка метрик в InfluxDB curl -X POST 'http://influxdb:8086/write?db=monitoring' \ --data-binary "pgvector_backup,host=$(hostname) size=${FINAL_SIZE_BYTES} $(date +%s)000000000"
Последнее обновление: $(date)