Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/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 +%d%m%Y)
- 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/$DATE"
- else
- backup_location="$BACKUP_PATH"
- 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
- mkdir -p "$MYSQL_BACKUP_DIR/$DATE" # Гарантія створення каталогу перед завантаженням
- chmod 700 "$MYSQL_BACKUP_DIR/$DATE"
- /usr/local/bin/ncftpput -R -v -u "$FTP_LOGIN" -p "$FTP_PASSWORD" "$FTP_HOST" "$FTP_REMOTE_MYSQL_PATH" "$MYSQL_BACKUP_DIR/$DATE"
- 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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement