commit a898a692afba71d7e4f2f1931495addefbaa80d8 Author: Andrey Date: Fri Jan 23 14:51:44 2026 +0700 Добавить mysql-backup.sh diff --git a/mysql-backup.sh b/mysql-backup.sh new file mode 100644 index 0000000..7ce95de --- /dev/null +++ b/mysql-backup.sh @@ -0,0 +1,97 @@ +#!/bin/bash + +set -e # Завершить при любой ошибке + +# === Настройки === +BACKUP_DIR="/root/backups/mysql" +DATE=$(date +%Y%m%d-%H%M) +LOG_FILE="$BACKUP_DIR/backup.log" + +# Параметры подключения к MySQL/MariaDB +MYSQL_HOST="localhost" +MYSQL_PORT="3306" +MYSQL_USER="root" +MYSQL_DB="your_database_name" # имя БД или "all" для всех +# MYSQL_PASSWORD="secret" # ← раскомментируйте, если не используете .my.cnf + +# Создаём папку +mkdir -p "$BACKUP_DIR" + +# Функция логирования +log() { + echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" | tee -a "$LOG_FILE" +} + +log "Начинаем резервное копирование MySQL..." + +# === Вариант 1: через временный конфиг-файл (рекомендуется) === +if [[ -n "${MYSQL_PASSWORD:-}" ]]; then + # Создаём временный my.cnf с правами 600 + TMP_CNF="/tmp/mysql-backup.cnf.$$" + trap "rm -f '$TMP_CNF'" EXIT # удалим при завершении + chmod 600 "$TMP_CNF" + cat > "$TMP_CNF" < "$BACKUP_FILE" +else + mysqldump $EXTRA_ARGS \ + --single-transaction \ + --routines \ + --triggers \ + --databases "$MYSQL_DB" \ + | gzip > "$BACKUP_FILE" +fi + +# Проверка, что файл создан и не пустой +if [[ ! -s "$BACKUP_FILE" ]]; then + log "Ошибка: дамп пустой или не создан!" >&2 + exit 1 +fi + +log "Дамп успешно сохранён: $BACKUP_FILE" + +# === Удаление старых бэкапов (>7 дней) по дате в имени === +log "Удаляем бэкапы старше 7 дней..." +cutoff=$(date -d '7 days ago' +%Y%m%d) + +for file in "$BACKUP_DIR"/mysql-*.sql.gz; do + [[ -e "$file" ]] || continue + basename_file=$(basename "$file") + if [[ $basename_file =~ mysql-.*-([0-9]{8})-[0-9]{4}\.sql\.gz$ ]]; then + file_date="${BASH_REMATCH[1]}" + if [[ $file_date -lt $cutoff ]]; then + log "Удаляем старый дамп: $file" + rm -f "$file" + fi + fi +done + +log "Резервное копирование MySQL завершено." \ No newline at end of file