From 9f0d0acb53c0e3e0a1ee3b3e49c76e93d6bbfa2e Mon Sep 17 00:00:00 2001 From: Vladless Date: Mon, 21 Oct 2024 23:59:26 +0300 Subject: [PATCH] =?UTF-8?q?=D0=91=D1=8D=D0=BA=D0=B0=D0=BF=D1=8B.=20=D0=9E?= =?UTF-8?q?=D1=82=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B0=20=D0=B0=D0=B4=D0=BC?= =?UTF-8?q?=D0=B8=D0=BD=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backup.py | 45 +++++++++++++++++++++++++++++++++++++++++++++ backup_pg copy.sh | 13 ------------- 2 files changed, 45 insertions(+), 13 deletions(-) create mode 100644 backup.py delete mode 100644 backup_pg copy.sh diff --git a/backup.py b/backup.py new file mode 100644 index 00000000..1312bd16 --- /dev/null +++ b/backup.py @@ -0,0 +1,45 @@ +import subprocess +import os +import logging +from datetime import datetime +from aiogram.types import BufferedInputFile +from bot import bot +from config import ADMIN_ID, DB_USER, DB_NAME + +async def backup_database(): + # Параметры бэкапа + USER = DB_USER + HOST = "localhost" + BACKUP_DIR = "/home/vlad" + DATE = datetime.now().strftime("%Y-%m-%d-%H%M%S") + BACKUP_FILE = f"{BACKUP_DIR}/{DB_NAME}-backup-{DATE}.sql" + + # Команда для резервного копирования + try: + subprocess.run( + ['pg_dump', '-U', USER, '-h', HOST, '-F', 'c', '-f', BACKUP_FILE, DB_NAME], + check=True + ) + logging.info(f"Бэкап базы данных создан: {BACKUP_FILE}") + except subprocess.CalledProcessError as e: + logging.error(f"Ошибка при создании бэкапа базы данных: {e}") + return + + # Отправка файла бэкапа в чат админа + try: + with open(BACKUP_FILE, 'rb') as backup_file: + backup_input_file = BufferedInputFile(backup_file.read(), filename=os.path.basename(BACKUP_FILE)) + await bot.send_document(ADMIN_ID, backup_input_file) + logging.info(f"Бэкап базы данных отправлен админу: {ADMIN_ID}") + except Exception as e: + logging.error(f"Ошибка при отправке бэкапа в Telegram: {e}") + + # Удаление старых копий (старше 7 дней) + try: + subprocess.run( + ['find', BACKUP_DIR, '-type', 'f', '-name', '*.sql', '-mtime', '+7', '-exec', 'rm', '{}', ';'], + check=True + ) + logging.info("Старые бэкапы удалены.") + except subprocess.CalledProcessError as e: + logging.error(f"Ошибка при удалении старых бэкапов: {e}") diff --git a/backup_pg copy.sh b/backup_pg copy.sh deleted file mode 100644 index d12bc6c7..00000000 --- a/backup_pg copy.sh +++ /dev/null @@ -1,13 +0,0 @@ -# Параметры -DB_NAME="имя_вашей_базы" -USER="имя_пользователя_postgresql" -HOST="localhost" -BACKUP_DIR="/путь/к/папке/резервных_копий" -DATE=$(date +\%Y-\%m-\%d-\%H\%M\%S) -BACKUP_FILE="$BACKUP_DIR/$DB_NAME-backup-$DATE.sql" - -# Команда для резервного копирования -pg_dump -U $USER -h $HOST -F c -f $BACKUP_FILE $DB_NAME - -# Удаление старых копий (например, старше 7 дней) -find $BACKUP_DIR -type f -name "*.sql" -mtime +7 -exec rm {} \; \ No newline at end of file