La Paste
Create new paste
Pastes Archive
2025-01-13 18:21:20
copy
raw
download
#!/bin/sh # Налаштування BACKUP_DIR="/home/backup" # Переконайтеся, що цей шлях існує MYSQL_BACKUP_DIR="/home/backup/mysqldump" # Шлях для збереження резервної копії бази даних SYSTEM_DIRS="/etc /usr/local/etc /usr/local/www/apache24/data /var/log/stargazer.log /var/cron/tabs/root" # Вкажіть директорії для архівації FTP_UPLOAD="YES" # Увімкнути або вимкнути завантаження на FTP (YES/NO) FTP_HOST="0.0.0.0" # Хост FTP-сервера FTP_LOGIN="kotiki" # Логін для FTP FTP_PASSWORD="password" # Пароль для FTP FTP_REMOTE_PATH="/Ubilling/" # Віддалений шлях для збереження резервних копій FTP_REMOTE_MYSQL_PATH="/Ubilling/mysqldump/" # Віддалений шлях для резервних копій бази даних TELEGRAM_BOT_TOKEN="------" # Токен вашого Telegram-бота TELEGRAM_CHAT_IDS="ID1 ID2" # Вкажіть ID через пробіл SEND_TELEGRAM_MESSAGES="YES" # Увімкнути або вимкнути надсилання повідомлень у Telegram (YES/NO) BACKUP_FILES="YES" # Увімкнути або вимкнути резервне копіювання файлів (YES/NO) BACKUP_DATABASE="YES" # Увімкнути або вимкнути резервне копіювання бази даних (YES/NO) HOSTNAME=$(hostname) # Отримання назви хоста # Налаштування для MySQL MYSQLDUMP="/usr/local/bin/mysqldump" # Шлях до mysqldump MYSQL_USER="root" # Логін MySQL MYSQL_PASSWORD="password" # Пароль MySQL MYSQL_HOST="localhost" # Хост MySQL DATE=$(date +%Y%m%d) BACKUP_PATH="${BACKUP_DIR}/${DATE}" # Функція для надсилання повідомлень у Telegram send_telegram_message() { if [ "$SEND_TELEGRAM_MESSAGES" = "YES" ]; then local message="$1" local chat_ids="${TELEGRAM_CHAT_IDS}" for chat_id in $chat_ids; do php -r " \$token = '${TELEGRAM_BOT_TOKEN}'; \$chat_id = '${chat_id}'; \$message = '${message}'; \$url = 'https://api.telegram.org/bot'.\$token.'/sendMessage'; \$post_fields = [ 'chat_id' => \$chat_id, 'text' => \$message ]; \$ch = curl_init(); curl_setopt(\$ch, CURLOPT_URL, \$url); curl_setopt(\$ch, CURLOPT_POST, true); curl_setopt(\$ch, CURLOPT_RETURNTRANSFER, true); curl_setopt(\$ch, CURLOPT_POSTFIELDS, http_build_query(\$post_fields)); curl_exec(\$ch); curl_close(\$ch); " done fi } # Перевіряємо та створюємо директорію для резервної копії if [ -d "$BACKUP_PATH" ]; then echo "Резервна копія за ${DATE} вже існує. Видаляємо стару копію." rm -rf "$BACKUP_PATH" fi mkdir -p "$BACKUP_PATH" chmod 700 "$BACKUP_PATH" mkdir -p "$MYSQL_BACKUP_DIR" chmod 700 "$MYSQL_BACKUP_DIR" # Створення резервної копії системи backup_files_status="NO" backup_database_status="NO" if [ "$BACKUP_FILES" = "YES" ]; then tar cf - $SYSTEM_DIRS 2>/dev/null | gzip > "${BACKUP_PATH}/system.tar.gz" if [ $? -ne 0 ]; then echo "Помилка створення резервної копії системи" send_telegram_message "Помилка створення резервної копії системи на хості ${HOSTNAME}" exit 1 else backup_files_status="YES" fi fi # Створення резервної копії бази даних if [ "$BACKUP_DATABASE" = "YES" ]; then if [ "$BACKUP_FILES" = "NO" ]; then backup_location="$MYSQL_BACKUP_DIR" else backup_location="${BACKUP_PATH}/sql" fi mkdir -p "$backup_location" chmod 700 "$backup_location" $MYSQLDUMP --opt --skip-lock-tables --single-transaction -h "$MYSQL_HOST" -p"$MYSQL_PASSWORD" -u "$MYSQL_USER" --all-databases | gzip > "${backup_location}/mysql.sql.gz" if [ $? -ne 0 ]; then echo "Помилка створення резервної копії бази даних" send_telegram_message "Помилка створення резервної копії бази даних на хості ${HOSTNAME}" exit 1 else backup_database_status="YES" fi fi # Надсилання повідомлення залежно від статусу бекапів if [ "$backup_files_status" = "YES" ] && [ "$backup_database_status" = "YES" ]; then send_telegram_message "Резервна копія файлів та бази даних успішно створена на хості ${HOSTNAME}" elif [ "$backup_files_status" = "YES" ]; then send_telegram_message "Резервна копія файлів успішно створена на хості ${HOSTNAME}, резервне копіювання бази даних вимкнено" elif [ "$backup_database_status" = "YES" ]; then send_telegram_message "Резервна копія бази даних успішно створена на хості ${HOSTNAME}, резервне копіювання файлів вимкнено" else send_telegram_message "Резервне копіювання не виконано на хості ${HOSTNAME}" fi # Завантаження на FTP case $FTP_UPLOAD in YES) # Функція для очищення зайвих слешів у шляху clean_ftp_path() { echo "$1" | sed 's|/+|/|g' | sed 's|^/||' } FTP_REMOTE_PATH=$(clean_ftp_path "$FTP_REMOTE_PATH") FTP_REMOTE_MYSQL_PATH=$(clean_ftp_path "$FTP_REMOTE_MYSQL_PATH") if [ "$backup_files_status" = "YES" ]; then /usr/local/bin/ncftpput -R -v -u "$FTP_LOGIN" -p "$FTP_PASSWORD" "$FTP_HOST" "$FTP_REMOTE_PATH" "$BACKUP_PATH" fi if [ "$backup_database_status" = "YES" ]; then if [ "$BACKUP_FILES" = "NO" ]; then /usr/local/bin/ncftpput -R -v -u "$FTP_LOGIN" -p "$FTP_PASSWORD" "$FTP_HOST" "$FTP_REMOTE_MYSQL_PATH" "$MYSQL_BACKUP_DIR" else /usr/local/bin/ncftpput -R -v -u "$FTP_LOGIN" -p "$FTP_PASSWORD" "$FTP_HOST" "$FTP_REMOTE_MYSQL_PATH" "${BACKUP_PATH}/sql" fi fi if [ $? -eq 0 ]; then echo "Завантаження на FTP завершено успішно" send_telegram_message "Резервна копія успішно створена та завантажена на FTP (${FTP_HOST}) для хоста ${HOSTNAME}" else echo "Помилка завантаження на FTP" send_telegram_message "Помилка завантаження резервної копії на FTP (${FTP_HOST}) для хоста ${HOSTNAME}" exit 1 fi ;; NO) echo "Завантаження на FTP вимкнено" send_telegram_message "Резервна копія створена, але завантаження на FTP не виконано (вимкнено) для хоста ${HOSTNAME}" ;; esac
↑