Настройка автоматических резервных копий — различия между версиями

Материал из ARK-HOSTER.RU | Документация хостинга
Перейти к: навигация, поиск
(Новая страница: «= Настройка автоматических резервных копий = == 1. Подготовка системы == * Войдите в систем…»)
 
 
(не показана 1 промежуточная версия этого же участника)
Строка 11: Строка 11:
  
 
1. Создайте основную директорию для бэкапов:
 
1. Создайте основную директорию для бэкапов:
<code>
+
<pre>sudo mkdir -p /backup/{daily,weekly,monthly}</pre>
sudo mkdir -p /backup/{daily,weekly,monthly}
 
</code>
 
  
 
2. Создайте директории для разных типов бэкапов:
 
2. Создайте директории для разных типов бэкапов:
<code>
+
<pre>sudo mkdir -p /backup/{files,databases,configs,logs}</pre>
sudo mkdir -p /backup/{files,databases,configs,logs}
 
</code>
 
  
 
3. Установите правильные права доступа:
 
3. Установите правильные права доступа:
<code>
+
<pre>sudo chown -R root:root /backup</pre>
sudo chown -R root:root /backup
+
<pre>sudo chmod -R 755 /backup</pre>
sudo chmod -R 755 /backup
 
</code>
 
  
 
== 3. Настройка резервного копирования файлов ==
 
== 3. Настройка резервного копирования файлов ==
Строка 31: Строка 25:
  
 
1. Создайте скрипт резервного копирования:
 
1. Создайте скрипт резервного копирования:
<code>
+
<pre>sudo nano /usr/local/bin/backup-files.sh</pre>
sudo nano /usr/local/bin/backup-files.sh
 
</code>
 
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code>
+
<pre>BACKUP_DIR="/backup/files"</pre>
#!/bin/bash
+
<pre>SOURCE_DIRS="/var/www /home /etc"</pre>
 
+
<pre>DATE=$(date +%Y%m%d_%H%M%S)</pre>
# Настройки
+
<pre>BACKUP_FILE="files_backup_$DATE.tar.gz"</pre>
BACKUP_DIR="/backup/files"
+
<pre>tar -czf $BACKUP_DIR/$BACKUP_FILE $SOURCE_DIRS</pre>
SOURCE_DIRS="/var/www /home /etc"
+
<pre>if [ -f $BACKUP_DIR/$BACKUP_FILE ]; then</pre>
DATE=$(date +%Y%m%d_%H%M%S)
+
<pre>echo "Backup created: $BACKUP_FILE"</pre>
BACKUP_FILE="files_backup_$DATE.tar.gz"
+
<pre>echo "Size: $(du -h $BACKUP_DIR/$BACKUP_FILE | cut -f1)"</pre>
 
+
<pre>else</pre>
# Создание архива
+
<pre>echo "Error: Backup failed"</pre>
tar -czf $BACKUP_DIR/$BACKUP_FILE $SOURCE_DIRS
+
<pre>exit 1</pre>
 
+
<pre>fi</pre>
# Проверка создания архива
+
<pre>find $BACKUP_DIR -name "files_backup_*.tar.gz" -mtime +7 -delete</pre>
if [ -f $BACKUP_DIR/$BACKUP_FILE ]; then
+
<pre>echo "Backup completed successfully"</pre>
    echo "Backup created: $BACKUP_FILE"
 
    echo "Size: $(du -h $BACKUP_DIR/$BACKUP_FILE | cut -f1)"
 
else
 
    echo "Error: Backup failed"
 
    exit 1
 
fi
 
 
 
# Удаление старых бэкапов (старше 7 дней)
 
find $BACKUP_DIR -name "files_backup_*.tar.gz" -mtime +7 -delete
 
 
 
echo "Backup completed successfully"
 
</code>
 
  
 
3. Сделайте скрипт исполняемым:
 
3. Сделайте скрипт исполняемым:
<code>
+
<pre>sudo chmod +x /usr/local/bin/backup-files.sh</pre>
sudo chmod +x /usr/local/bin/backup-files.sh
 
</code>
 
  
 
=== Резервное копирование с исключениями ===
 
=== Резервное копирование с исключениями ===
  
 
1. Создайте файл исключений:
 
1. Создайте файл исключений:
<code>
+
<pre>sudo nano /backup/exclude.txt</pre>
sudo nano /backup/exclude.txt
 
</code>
 
  
 
2. Добавьте исключения:
 
2. Добавьте исключения:
<code>
+
<pre>*.tmp</pre>
# Исключения для резервного копирования
+
<pre>*.log</pre>
*.tmp
+
<pre>*.cache</pre>
*.log
+
<pre>/tmp/*</pre>
*.cache
+
<pre>/var/tmp/*</pre>
/tmp/*
+
<pre>/var/cache/*</pre>
/var/tmp/*
+
<pre>/var/log/*</pre>
/var/cache/*
 
/var/log/*
 
</code>
 
  
 
3. Обновите скрипт для использования исключений:
 
3. Обновите скрипт для использования исключений:
<code>
+
<pre>tar -czf $BACKUP_DIR/$BACKUP_FILE --exclude-from=/backup/exclude.txt $SOURCE_DIRS</pre>
tar -czf $BACKUP_DIR/$BACKUP_FILE --exclude-from=/backup/exclude.txt $SOURCE_DIRS
 
</code>
 
  
 
== 4. Настройка резервного копирования баз данных ==
 
== 4. Настройка резервного копирования баз данных ==
Строка 97: Строка 68:
  
 
1. Создайте скрипт для MySQL:
 
1. Создайте скрипт для MySQL:
<code>
+
<pre>sudo nano /usr/local/bin/backup-mysql.sh</pre>
sudo nano /usr/local/bin/backup-mysql.sh
 
</code>
 
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code>
+
<pre>BACKUP_DIR="/backup/databases"</pre>
#!/bin/bash
+
<pre>MYSQL_USER="backup_user"</pre>
 
+
<pre>MYSQL_PASS="backup_password"</pre>
# Настройки
+
<pre>DATE=$(date +%Y%m%d_%H%M%S)</pre>
BACKUP_DIR="/backup/databases"
+
<pre>mysqldump -u $MYSQL_USER -p$MYSQL_PASS --all-databases > $BACKUP_DIR/mysql_full_backup_$DATE.sql</pre>
MYSQL_USER="backup_user"
+
<pre>for db in $(mysql -u $MYSQL_USER -p$MYSQL_PASS -e "SHOW DATABASES;" | grep -v "Database\|information_schema\|performance_schema\|mysql\|sys"); do</pre>
MYSQL_PASS="backup_password"
+
<pre>mysqldump -u $MYSQL_USER -p$MYSQL_PASS $db > $BACKUP_DIR/${db}_backup_$DATE.sql</pre>
DATE=$(date +%Y%m%d_%H%M%S)
+
<pre>done</pre>
 
+
<pre>gzip $BACKUP_DIR/*_backup_$DATE.sql</pre>
# Создание резервной копии всех баз данных
+
<pre>find $BACKUP_DIR -name "*_backup_*.sql.gz" -mtime +7 -delete</pre>
mysqldump -u $MYSQL_USER -p$MYSQL_PASS --all-databases > $BACKUP_DIR/mysql_full_backup_$DATE.sql
+
<pre>echo "MySQL backup completed successfully"</pre>
 
 
# Создание резервных копий отдельных баз данных
 
for db in $(mysql -u $MYSQL_USER -p$MYSQL_PASS -e "SHOW DATABASES;" | grep -v "Database\|information_schema\|performance_schema\|mysql\|sys"); do
 
    mysqldump -u $MYSQL_USER -p$MYSQL_PASS $db > $BACKUP_DIR/${db}_backup_$DATE.sql
 
done
 
 
 
# Сжатие файлов
 
gzip $BACKUP_DIR/*_backup_$DATE.sql
 
 
 
# Удаление старых бэкапов (старше 7 дней)
 
find $BACKUP_DIR -name "*_backup_*.sql.gz" -mtime +7 -delete
 
 
 
echo "MySQL backup completed successfully"
 
</code>
 
  
 
3. Сделайте скрипт исполняемым:
 
3. Сделайте скрипт исполняемым:
<code>
+
<pre>sudo chmod +x /usr/local/bin/backup-mysql.sh</pre>
sudo chmod +x /usr/local/bin/backup-mysql.sh
 
</code>
 
  
 
=== Резервное копирование PostgreSQL ===
 
=== Резервное копирование PostgreSQL ===
  
 
1. Создайте скрипт для PostgreSQL:
 
1. Создайте скрипт для PostgreSQL:
<code>
+
<pre>sudo nano /usr/local/bin/backup-postgresql.sh</pre>
sudo nano /usr/local/bin/backup-postgresql.sh
 
</code>
 
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code>
+
<pre>BACKUP_DIR="/backup/databases"</pre>
#!/bin/bash
+
<pre>PG_USER="postgres"</pre>
 
+
<pre>DATE=$(date +%Y%m%d_%H%M%S)</pre>
# Настройки
+
<pre>pg_dumpall -U $PG_USER > $BACKUP_DIR/postgresql_full_backup_$DATE.sql</pre>
BACKUP_DIR="/backup/databases"
+
<pre>for db in $(psql -U $PG_USER -l -t | cut -d'|' -f1 | grep -v template | grep -v postgres); do</pre>
PG_USER="postgres"
+
<pre>pg_dump -U $PG_USER $db > $BACKUP_DIR/${db}_backup_$DATE.sql</pre>
DATE=$(date +%Y%m%d_%H%M%S)
+
<pre>done</pre>
 
+
<pre>gzip $BACKUP_DIR/*_backup_$DATE.sql</pre>
# Создание резервной копии всех баз данных
+
<pre>find $BACKUP_DIR -name "*_backup_*.sql.gz" -mtime +7 -delete</pre>
pg_dumpall -U $PG_USER > $BACKUP_DIR/postgresql_full_backup_$DATE.sql
+
<pre>echo "PostgreSQL backup completed successfully"</pre>
 
 
# Создание резервных копий отдельных баз данных
 
for db in $(psql -U $PG_USER -l -t | cut -d'|' -f1 | grep -v template | grep -v postgres); do
 
    pg_dump -U $PG_USER $db > $BACKUP_DIR/${db}_backup_$DATE.sql
 
done
 
 
 
# Сжатие файлов
 
gzip $BACKUP_DIR/*_backup_$DATE.sql
 
 
 
# Удаление старых бэкапов (старше 7 дней)
 
find $BACKUP_DIR -name "*_backup_*.sql.gz" -mtime +7 -delete
 
 
 
echo "PostgreSQL backup completed successfully"
 
</code>
 
  
 
== 5. Настройка автоматического резервного копирования ==
 
== 5. Настройка автоматического резервного копирования ==
Строка 171: Строка 108:
  
 
1. Откройте crontab:
 
1. Откройте crontab:
<code>
+
<pre>sudo crontab -e</pre>
sudo crontab -e
 
</code>
 
  
 
2. Добавьте задачи резервного копирования:
 
2. Добавьте задачи резервного копирования:
<code>
+
<pre>0 2 * * * /usr/local/bin/backup-files.sh</pre>
# Ежедневное резервное копирование файлов в 2:00
+
<pre>0 3 * * * /usr/local/bin/backup-mysql.sh</pre>
0 2 * * * /usr/local/bin/backup-files.sh
+
<pre>0 1 * * 0 /usr/local/bin/backup-full.sh</pre>
 
+
<pre>0 0 1 * * /usr/local/bin/backup-monthly.sh</pre>
# Ежедневное резервное копирование баз данных в 3:00
 
0 3 * * * /usr/local/bin/backup-mysql.sh
 
 
 
# Еженедельное полное резервное копирование в воскресенье в 1:00
 
0 1 * * 0 /usr/local/bin/backup-full.sh
 
 
 
# Ежемесячное архивирование в 1-е число в 0:00
 
0 0 1 * * /usr/local/bin/backup-monthly.sh
 
</code>
 
  
 
=== Создание комплексного скрипта ===
 
=== Создание комплексного скрипта ===
  
 
1. Создайте полный скрипт резервного копирования:
 
1. Создайте полный скрипт резервного копирования:
<code>
+
<pre>sudo nano /usr/local/bin/backup-full.sh</pre>
sudo nano /usr/local/bin/backup-full.sh
 
</code>
 
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code>
+
<pre>BACKUP_DIR="/backup"</pre>
#!/bin/bash
+
<pre>DATE=$(date +%Y%m%d_%H%M%S)</pre>
 
+
<pre>LOG_FILE="/var/log/backup.log"</pre>
# Настройки
+
<pre>log() {</pre>
BACKUP_DIR="/backup"
+
<pre>echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOG_FILE</pre>
DATE=$(date +%Y%m%d_%H%M%S)
+
<pre>}</pre>
LOG_FILE="/var/log/backup.log"
+
<pre>log "Starting full backup"</pre>
 
+
<pre>log "Backing up files..."</pre>
# Функция логирования
+
<pre>/usr/local/bin/backup-files.sh</pre>
log() {
+
<pre>log "Backing up databases..."</pre>
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOG_FILE
+
<pre>/usr/local/bin/backup-mysql.sh</pre>
}
+
<pre>log "Backing up configurations..."</pre>
 
+
<pre>tar -czf $BACKUP_DIR/configs_backup_$DATE.tar.gz /etc</pre>
log "Starting full backup"
+
<pre>log "Creating backup index..."</pre>
 
+
<pre>ls -la $BACKUP_DIR > $BACKUP_DIR/backup_index.txt</pre>
# Резервное копирование файлов
+
<pre>log "Full backup completed successfully"</pre>
log "Backing up files..."
 
/usr/local/bin/backup-files.sh
 
 
 
# Резервное копирование баз данных
 
log "Backing up databases..."
 
/usr/local/bin/backup-mysql.sh
 
 
 
# Резервное копирование конфигураций
 
log "Backing up configurations..."
 
tar -czf $BACKUP_DIR/configs_backup_$DATE.tar.gz /etc
 
 
 
# Создание индекса бэкапов
 
log "Creating backup index..."
 
ls -la $BACKUP_DIR > $BACKUP_DIR/backup_index.txt
 
 
 
log "Full backup completed successfully"
 
</code>
 
  
 
3. Сделайте скрипт исполняемым:
 
3. Сделайте скрипт исполняемым:
<code>
+
<pre>sudo chmod +x /usr/local/bin/backup-full.sh</pre>
sudo chmod +x /usr/local/bin/backup-full.sh
 
</code>
 
  
 
== 6. Настройка удаленного резервного копирования ==
 
== 6. Настройка удаленного резервного копирования ==
Строка 242: Строка 147:
  
 
1. Создайте скрипт для удаленного копирования:
 
1. Создайте скрипт для удаленного копирования:
<code>
+
<pre>sudo nano /usr/local/bin/backup-remote.sh</pre>
sudo nano /usr/local/bin/backup-remote.sh
 
</code>
 
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code>
+
<pre>REMOTE_HOST="backup-server.example.com"</pre>
#!/bin/bash
+
<pre>REMOTE_USER="backup"</pre>
 
+
<pre>REMOTE_DIR="/backup/$(hostname)"</pre>
# Настройки
+
<pre>LOCAL_DIR="/backup"</pre>
REMOTE_HOST="backup-server.example.com"
+
<pre>DATE=$(date +%Y%m%d_%H%M%S)</pre>
REMOTE_USER="backup"
+
<pre>rsync -avz --delete $LOCAL_DIR/ $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/</pre>
REMOTE_DIR="/backup/$(hostname)"
+
<pre>if [ $? -eq 0 ]; then</pre>
LOCAL_DIR="/backup"
+
<pre>echo "Remote backup completed successfully"</pre>
DATE=$(date +%Y%m%d_%H%M%S)
+
<pre>else</pre>
 
+
<pre>echo "Remote backup failed"</pre>
# Синхронизация с удаленным сервером
+
<pre>exit 1</pre>
rsync -avz --delete $LOCAL_DIR/ $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/
+
<pre>fi</pre>
 
 
# Проверка синхронизации
 
if [ $? -eq 0 ]; then
 
    echo "Remote backup completed successfully"
 
else
 
    echo "Remote backup failed"
 
    exit 1
 
fi
 
</code>
 
  
 
=== Использование SCP ===
 
=== Использование SCP ===
  
 
1. Создайте скрипт для копирования через SCP:
 
1. Создайте скрипт для копирования через SCP:
<code>
+
<pre>sudo nano /usr/local/bin/backup-scp.sh</pre>
sudo nano /usr/local/bin/backup-scp.sh
 
</code>
 
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code>
+
<pre>REMOTE_HOST="backup-server.example.com"</pre>
#!/bin/bash
+
<pre>REMOTE_USER="backup"</pre>
 
+
<pre>REMOTE_DIR="/backup/$(hostname)"</pre>
# Настройки
+
<pre>LOCAL_DIR="/backup"</pre>
REMOTE_HOST="backup-server.example.com"
+
<pre>DATE=$(date +%Y%m%d_%H%M%S)</pre>
REMOTE_USER="backup"
+
<pre>scp -r $LOCAL_DIR/* $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/</pre>
REMOTE_DIR="/backup/$(hostname)"
+
<pre>if [ $? -eq 0 ]; then</pre>
LOCAL_DIR="/backup"
+
<pre>echo "SCP backup completed successfully"</pre>
DATE=$(date +%Y%m%d_%H%M%S)
+
<pre>else</pre>
 
+
<pre>echo "SCP backup failed"</pre>
# Копирование файлов
+
<pre>exit 1</pre>
scp -r $LOCAL_DIR/* $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/
+
<pre>fi</pre>
 
 
# Проверка копирования
 
if [ $? -eq 0 ]; then
 
    echo "SCP backup completed successfully"
 
else
 
    echo "SCP backup failed"
 
    exit 1
 
fi
 
</code>
 
  
 
== 7. Настройка мониторинга резервных копий ==
 
== 7. Настройка мониторинга резервных копий ==
Строка 304: Строка 187:
  
 
1. Создайте скрипт мониторинга:
 
1. Создайте скрипт мониторинга:
<code>
+
<pre>sudo nano /usr/local/bin/backup-monitor.sh</pre>
sudo nano /usr/local/bin/backup-monitor.sh
 
</code>
 
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code>
+
<pre>BACKUP_DIR="/backup"</pre>
#!/bin/bash
+
<pre>LOG_FILE="/var/log/backup.log"</pre>
 
+
<pre>ALERT_EMAIL="admin@example.com"</pre>
# Настройки
+
<pre>LAST_BACKUP=$(find $BACKUP_DIR -name "*.tar.gz" -mtime -1 | wc -l)</pre>
BACKUP_DIR="/backup"
+
<pre>if [ $LAST_BACKUP -eq 0 ]; then</pre>
LOG_FILE="/var/log/backup.log"
+
<pre>echo "ALERT: No backup found in the last 24 hours" | mail -s "Backup Alert" $ALERT_EMAIL</pre>
ALERT_EMAIL="admin@example.com"
+
<pre>fi</pre>
 
+
<pre>BACKUP_SIZE=$(du -sh $BACKUP_DIR | cut -f1)</pre>
# Проверка последнего бэкапа
+
<pre>echo "Backup directory size: $BACKUP_SIZE"</pre>
LAST_BACKUP=$(find $BACKUP_DIR -name "*.tar.gz" -mtime -1 | wc -l)
+
<pre>for backup in $(find $BACKUP_DIR -name "*.tar.gz" -mtime -1); do</pre>
 
+
<pre>if ! tar -tzf $backup > /dev/null 2>&1; then</pre>
if [ $LAST_BACKUP -eq 0 ]; then
+
<pre>echo "ALERT: Corrupted backup: $backup" | mail -s "Backup Alert" $ALERT_EMAIL</pre>
    echo "ALERT: No backup found in the last 24 hours" | mail -s "Backup Alert" $ALERT_EMAIL
+
<pre>fi</pre>
fi
+
<pre>done</pre>
 
 
# Проверка размера бэкапов
 
BACKUP_SIZE=$(du -sh $BACKUP_DIR | cut -f1)
 
echo "Backup directory size: $BACKUP_SIZE"
 
 
 
# Проверка целостности бэкапов
 
for backup in $(find $BACKUP_DIR -name "*.tar.gz" -mtime -1); do
 
    if ! tar -tzf $backup > /dev/null 2>&1; then
 
        echo "ALERT: Corrupted backup: $backup" | mail -s "Backup Alert" $ALERT_EMAIL
 
    fi
 
done
 
</code>
 
  
 
3. Сделайте скрипт исполняемым:
 
3. Сделайте скрипт исполняемым:
<code>
+
<pre>sudo chmod +x /usr/local/bin/backup-monitor.sh</pre>
sudo chmod +x /usr/local/bin/backup-monitor.sh
 
</code>
 
  
 
=== Настройка алертов ===
 
=== Настройка алертов ===
  
 
1. Добавьте задачу мониторинга в crontab:
 
1. Добавьте задачу мониторинга в crontab:
<code>
+
<pre>0 * * * * /usr/local/bin/backup-monitor.sh</pre>
# Проверка бэкапов каждый час
 
0 * * * * /usr/local/bin/backup-monitor.sh
 
</code>
 
  
 
== 8. Восстановление из резервных копий ==
 
== 8. Восстановление из резервных копий ==
Строка 354: Строка 218:
  
 
1. Создайте скрипт восстановления:
 
1. Создайте скрипт восстановления:
<code>
+
<pre>sudo nano /usr/local/bin/restore-files.sh</pre>
sudo nano /usr/local/bin/restore-files.sh
 
</code>
 
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code>
+
<pre>BACKUP_DIR="/backup/files"</pre>
#!/bin/bash
+
<pre>RESTORE_DIR="/restore"</pre>
 
+
<pre>echo "Available backups:"</pre>
# Настройки
+
<pre>ls -la $BACKUP_DIR/*.tar.gz</pre>
BACKUP_DIR="/backup/files"
+
<pre>read -p "Enter backup filename: " BACKUP_FILE</pre>
RESTORE_DIR="/restore"
+
<pre>if [ ! -f $BACKUP_DIR/$BACKUP_FILE ]; then</pre>
 
+
<pre>echo "Error: Backup file not found"</pre>
# Список доступных бэкапов
+
<pre>exit 1</pre>
echo "Available backups:"
+
<pre>fi</pre>
ls -la $BACKUP_DIR/*.tar.gz
+
<pre>mkdir -p $RESTORE_DIR</pre>
 
+
<pre>tar -xzf $BACKUP_DIR/$BACKUP_FILE -C $RESTORE_DIR</pre>
# Запрос имени файла бэкапа
+
<pre>echo "Files restored to $RESTORE_DIR"</pre>
read -p "Enter backup filename: " BACKUP_FILE
 
 
 
# Проверка существования файла
 
if [ ! -f $BACKUP_DIR/$BACKUP_FILE ]; then
 
    echo "Error: Backup file not found"
 
    exit 1
 
fi
 
 
 
# Создание директории для восстановления
 
mkdir -p $RESTORE_DIR
 
 
 
# Восстановление файлов
 
tar -xzf $BACKUP_DIR/$BACKUP_FILE -C $RESTORE_DIR
 
 
 
echo "Files restored to $RESTORE_DIR"
 
</code>
 
  
 
=== Восстановление баз данных ===
 
=== Восстановление баз данных ===
  
 
1. Создайте скрипт восстановления MySQL:
 
1. Создайте скрипт восстановления MySQL:
<code>
+
<pre>sudo nano /usr/local/bin/restore-mysql.sh</pre>
sudo nano /usr/local/bin/restore-mysql.sh
 
</code>
 
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code>
+
<pre>BACKUP_DIR="/backup/databases"</pre>
#!/bin/bash
+
<pre>MYSQL_USER="root"</pre>
 
+
<pre>MYSQL_PASS="password"</pre>
# Настройки
+
<pre>echo "Available MySQL backups:"</pre>
BACKUP_DIR="/backup/databases"
+
<pre>ls -la $BACKUP_DIR/*.sql.gz</pre>
MYSQL_USER="root"
+
<pre>read -p "Enter backup filename: " BACKUP_FILE</pre>
MYSQL_PASS="password"
+
<pre>if [ ! -f $BACKUP_DIR/$BACKUP_FILE ]; then</pre>
 
+
<pre>echo "Error: Backup file not found"</pre>
# Список доступных бэкапов
+
<pre>exit 1</pre>
echo "Available MySQL backups:"
+
<pre>fi</pre>
ls -la $BACKUP_DIR/*.sql.gz
+
<pre>gunzip -c $BACKUP_DIR/$BACKUP_FILE | mysql -u $MYSQL_USER -p$MYSQL_PASS</pre>
 
+
<pre>echo "MySQL database restored successfully"</pre>
# Запрос имени файла бэкапа
 
read -p "Enter backup filename: " BACKUP_FILE
 
 
 
# Проверка существования файла
 
if [ ! -f $BACKUP_DIR/$BACKUP_FILE ]; then
 
    echo "Error: Backup file not found"
 
    exit 1
 
fi
 
 
 
# Восстановление базы данных
 
gunzip -c $BACKUP_DIR/$BACKUP_FILE | mysql -u $MYSQL_USER -p$MYSQL_PASS
 
 
 
echo "MySQL database restored successfully"
 
</code>
 
  
 
== 9. Оптимизация резервного копирования ==
 
== 9. Оптимизация резервного копирования ==
Строка 428: Строка 258:
  
 
1. Создайте оптимизированный скрипт:
 
1. Создайте оптимизированный скрипт:
<code>
+
<pre>sudo nano /usr/local/bin/backup-optimized.sh</pre>
sudo nano /usr/local/bin/backup-optimized.sh
 
</code>
 
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code>
+
<pre>BACKUP_DIR="/backup"</pre>
#!/bin/bash
+
<pre>SOURCE_DIR="/var/www"</pre>
 
+
<pre>DATE=$(date +%Y%m%d_%H%M%S)</pre>
# Настройки
+
<pre>tar --create --gzip --file $BACKUP_DIR/optimized_backup_$DATE.tar.gz \</pre>
BACKUP_DIR="/backup"
+
<pre>--exclude='*.tmp' \</pre>
SOURCE_DIR="/var/www"
+
<pre>--exclude='*.log' \</pre>
DATE=$(date +%Y%m%d_%H%M%S)
+
<pre>--exclude='*.cache' \</pre>
 
+
<pre>$SOURCE_DIR</pre>
# Создание сжатого архива с максимальным сжатием
+
<pre>md5sum $BACKUP_DIR/optimized_backup_$DATE.tar.gz > $BACKUP_DIR/optimized_backup_$DATE.md5</pre>
tar --create --gzip --file $BACKUP_DIR/optimized_backup_$DATE.tar.gz \
+
<pre>echo "Optimized backup created: optimized_backup_$DATE.tar.gz"</pre>
    --exclude='*.tmp' \
 
    --exclude='*.log' \
 
    --exclude='*.cache' \
 
    $SOURCE_DIR
 
 
 
# Создание контрольной суммы
 
md5sum $BACKUP_DIR/optimized_backup_$DATE.tar.gz > $BACKUP_DIR/optimized_backup_$DATE.md5
 
 
 
echo "Optimized backup created: optimized_backup_$DATE.tar.gz"
 
</code>
 
  
 
=== Инкрементальное резервное копирование ===
 
=== Инкрементальное резервное копирование ===
  
 
1. Создайте скрипт инкрементального копирования:
 
1. Создайте скрипт инкрементального копирования:
<code>
+
<pre>sudo nano /usr/local/bin/backup-incremental.sh</pre>
sudo nano /usr/local/bin/backup-incremental.sh
 
</code>
 
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code>
+
<pre>BACKUP_DIR="/backup"</pre>
#!/bin/bash
+
<pre>SOURCE_DIR="/var/www"</pre>
 
+
<pre>DATE=$(date +%Y%m%d_%H%M%S)</pre>
# Настройки
+
<pre>tar --create --gzip --file $BACKUP_DIR/incremental_backup_$DATE.tar.gz \</pre>
BACKUP_DIR="/backup"
+
<pre>--newer-mtime="1 day ago" \</pre>
SOURCE_DIR="/var/www"
+
<pre>$SOURCE_DIR</pre>
DATE=$(date +%Y%m%d_%H%M%S)
+
<pre>echo "Incremental backup created: incremental_backup_$DATE.tar.gz"</pre>
 
 
# Создание инкрементального архива
 
tar --create --gzip --file $BACKUP_DIR/incremental_backup_$DATE.tar.gz \
 
    --newer-mtime="1 day ago" \
 
    $SOURCE_DIR
 
 
 
echo "Incremental backup created: incremental_backup_$DATE.tar.gz"
 
</code>
 
  
 
== 10. Устранение неполадок ==
 
== 10. Устранение неполадок ==
Строка 483: Строка 291:
  
 
1. '''Недостаточно места для бэкапа''':
 
1. '''Недостаточно места для бэкапа''':
* Проверьте свободное место: <code>df -h</code>
+
* Проверьте свободное место: <pre>df -h</pre>
* Очистите старые бэкапы: <code>find /backup -name "*.tar.gz" -mtime +30 -delete</code>
+
* Очистите старые бэкапы: <pre>find /backup -name "*.tar.gz" -mtime +30 -delete</pre>
  
 
2. '''Ошибка прав доступа''':
 
2. '''Ошибка прав доступа''':
* Проверьте права: <code>ls -la /backup</code>
+
* Проверьте права: <pre>ls -la /backup</pre>
* Исправьте права: <code>sudo chown -R root:root /backup</code>
+
* Исправьте права: <pre>sudo chown -R root:root /backup</pre>
  
 
3. '''Бэкап не создается''':
 
3. '''Бэкап не создается''':
* Проверьте логи: <code>tail -f /var/log/backup.log</code>
+
* Проверьте логи: <pre>tail -f /var/log/backup.log</pre>
* Проверьте cron: <code>sudo systemctl status cron</code>
+
* Проверьте cron: <pre>sudo systemctl status cron</pre>
  
 
=== Диагностика ===
 
=== Диагностика ===
  
 
1. Проверьте статус cron:
 
1. Проверьте статус cron:
<code>
+
<pre>sudo systemctl status cron</pre>
sudo systemctl status cron
 
</code>
 
  
 
2. Проверьте логи cron:
 
2. Проверьте логи cron:
<code>
+
<pre>sudo tail -f /var/log/cron.log</pre>
sudo tail -f /var/log/cron.log
 
</code>
 
  
 
3. Проверьте права на скрипты:
 
3. Проверьте права на скрипты:
<code>
+
<pre>ls -la /usr/local/bin/backup-*.sh</pre>
ls -la /usr/local/bin/backup-*.sh
 
</code>
 
  
 
== Заключение ==
 
== Заключение ==

Текущая версия на 10:35, 15 октября 2025

Содержание

Настройка автоматических резервных копий

1. Подготовка системы

  • Войдите в систему под учетной записью с правами root или пользователя с правами sudo.
  • Убедитесь, что у вас есть достаточно места для хранения резервных копий.

2. Создание директории для резервных копий

Создание структуры директорий

1. Создайте основную директорию для бэкапов:

sudo mkdir -p /backup/{daily,weekly,monthly}

2. Создайте директории для разных типов бэкапов:

sudo mkdir -p /backup/{files,databases,configs,logs}

3. Установите правильные права доступа:

sudo chown -R root:root /backup
sudo chmod -R 755 /backup

3. Настройка резервного копирования файлов

Создание скрипта для файлов

1. Создайте скрипт резервного копирования:

sudo nano /usr/local/bin/backup-files.sh

2. Добавьте содержимое:

BACKUP_DIR="/backup/files"
SOURCE_DIRS="/var/www /home /etc"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="files_backup_$DATE.tar.gz"
tar -czf $BACKUP_DIR/$BACKUP_FILE $SOURCE_DIRS
if [ -f $BACKUP_DIR/$BACKUP_FILE ]; then
echo "Backup created: $BACKUP_FILE"
echo "Size: $(du -h $BACKUP_DIR/$BACKUP_FILE | cut -f1)"
else
echo "Error: Backup failed"
exit 1
fi
find $BACKUP_DIR -name "files_backup_*.tar.gz" -mtime +7 -delete
echo "Backup completed successfully"

3. Сделайте скрипт исполняемым:

sudo chmod +x /usr/local/bin/backup-files.sh

Резервное копирование с исключениями

1. Создайте файл исключений:

sudo nano /backup/exclude.txt

2. Добавьте исключения:

*.tmp
*.log
*.cache
/tmp/*
/var/tmp/*
/var/cache/*
/var/log/*

3. Обновите скрипт для использования исключений:

tar -czf $BACKUP_DIR/$BACKUP_FILE --exclude-from=/backup/exclude.txt $SOURCE_DIRS

4. Настройка резервного копирования баз данных

Резервное копирование MySQL/MariaDB

1. Создайте скрипт для MySQL:

sudo nano /usr/local/bin/backup-mysql.sh

2. Добавьте содержимое:

BACKUP_DIR="/backup/databases"
MYSQL_USER="backup_user"
MYSQL_PASS="backup_password"
DATE=$(date +%Y%m%d_%H%M%S)
mysqldump -u $MYSQL_USER -p$MYSQL_PASS --all-databases > $BACKUP_DIR/mysql_full_backup_$DATE.sql
for db in $(mysql -u $MYSQL_USER -p$MYSQL_PASS -e "SHOW DATABASES;" | grep -v "Database\|information_schema\|performance_schema\|mysql\|sys"); do
mysqldump -u $MYSQL_USER -p$MYSQL_PASS $db > $BACKUP_DIR/${db}_backup_$DATE.sql
done
gzip $BACKUP_DIR/*_backup_$DATE.sql
find $BACKUP_DIR -name "*_backup_*.sql.gz" -mtime +7 -delete
echo "MySQL backup completed successfully"

3. Сделайте скрипт исполняемым:

sudo chmod +x /usr/local/bin/backup-mysql.sh

Резервное копирование PostgreSQL

1. Создайте скрипт для PostgreSQL:

sudo nano /usr/local/bin/backup-postgresql.sh

2. Добавьте содержимое:

BACKUP_DIR="/backup/databases"
PG_USER="postgres"
DATE=$(date +%Y%m%d_%H%M%S)
pg_dumpall -U $PG_USER > $BACKUP_DIR/postgresql_full_backup_$DATE.sql
for db in $(psql -U $PG_USER -l -t | cut -d'|' -f1 | grep -v template | grep -v postgres); do
pg_dump -U $PG_USER $db > $BACKUP_DIR/${db}_backup_$DATE.sql
done
gzip $BACKUP_DIR/*_backup_$DATE.sql
find $BACKUP_DIR -name "*_backup_*.sql.gz" -mtime +7 -delete
echo "PostgreSQL backup completed successfully"

5. Настройка автоматического резервного копирования

Настройка cron задач

1. Откройте crontab:

sudo crontab -e

2. Добавьте задачи резервного копирования:

0 2 * * * /usr/local/bin/backup-files.sh
0 3 * * * /usr/local/bin/backup-mysql.sh
0 1 * * 0 /usr/local/bin/backup-full.sh
0 0 1 * * /usr/local/bin/backup-monthly.sh

Создание комплексного скрипта

1. Создайте полный скрипт резервного копирования:

sudo nano /usr/local/bin/backup-full.sh

2. Добавьте содержимое:

BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d_%H%M%S)
LOG_FILE="/var/log/backup.log"
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOG_FILE
}
log "Starting full backup"
log "Backing up files..."
/usr/local/bin/backup-files.sh
log "Backing up databases..."
/usr/local/bin/backup-mysql.sh
log "Backing up configurations..."
tar -czf $BACKUP_DIR/configs_backup_$DATE.tar.gz /etc
log "Creating backup index..."
ls -la $BACKUP_DIR > $BACKUP_DIR/backup_index.txt
log "Full backup completed successfully"

3. Сделайте скрипт исполняемым:

sudo chmod +x /usr/local/bin/backup-full.sh

6. Настройка удаленного резервного копирования

Использование rsync

1. Создайте скрипт для удаленного копирования:

sudo nano /usr/local/bin/backup-remote.sh

2. Добавьте содержимое:

REMOTE_HOST="backup-server.example.com"
REMOTE_USER="backup"
REMOTE_DIR="/backup/$(hostname)"
LOCAL_DIR="/backup"
DATE=$(date +%Y%m%d_%H%M%S)
rsync -avz --delete $LOCAL_DIR/ $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/
if [ $? -eq 0 ]; then
echo "Remote backup completed successfully"
else
echo "Remote backup failed"
exit 1
fi

Использование SCP

1. Создайте скрипт для копирования через SCP:

sudo nano /usr/local/bin/backup-scp.sh

2. Добавьте содержимое:

REMOTE_HOST="backup-server.example.com"
REMOTE_USER="backup"
REMOTE_DIR="/backup/$(hostname)"
LOCAL_DIR="/backup"
DATE=$(date +%Y%m%d_%H%M%S)
scp -r $LOCAL_DIR/* $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/
if [ $? -eq 0 ]; then
echo "SCP backup completed successfully"
else
echo "SCP backup failed"
exit 1
fi

7. Настройка мониторинга резервных копий

Создание скрипта мониторинга

1. Создайте скрипт мониторинга:

sudo nano /usr/local/bin/backup-monitor.sh

2. Добавьте содержимое:

BACKUP_DIR="/backup"
LOG_FILE="/var/log/backup.log"
ALERT_EMAIL="admin@example.com"
LAST_BACKUP=$(find $BACKUP_DIR -name "*.tar.gz" -mtime -1 | wc -l)
if [ $LAST_BACKUP -eq 0 ]; then
echo "ALERT: No backup found in the last 24 hours" | mail -s "Backup Alert" $ALERT_EMAIL
fi
BACKUP_SIZE=$(du -sh $BACKUP_DIR | cut -f1)
echo "Backup directory size: $BACKUP_SIZE"
for backup in $(find $BACKUP_DIR -name "*.tar.gz" -mtime -1); do
if ! tar -tzf $backup > /dev/null 2>&1; then
echo "ALERT: Corrupted backup: $backup" | mail -s "Backup Alert" $ALERT_EMAIL
fi
done

3. Сделайте скрипт исполняемым:

sudo chmod +x /usr/local/bin/backup-monitor.sh

Настройка алертов

1. Добавьте задачу мониторинга в crontab:

0 * * * * /usr/local/bin/backup-monitor.sh

8. Восстановление из резервных копий

Восстановление файлов

1. Создайте скрипт восстановления:

sudo nano /usr/local/bin/restore-files.sh

2. Добавьте содержимое:

BACKUP_DIR="/backup/files"
RESTORE_DIR="/restore"
echo "Available backups:"
ls -la $BACKUP_DIR/*.tar.gz
read -p "Enter backup filename: " BACKUP_FILE
if [ ! -f $BACKUP_DIR/$BACKUP_FILE ]; then
echo "Error: Backup file not found"
exit 1
fi
mkdir -p $RESTORE_DIR
tar -xzf $BACKUP_DIR/$BACKUP_FILE -C $RESTORE_DIR
echo "Files restored to $RESTORE_DIR"

Восстановление баз данных

1. Создайте скрипт восстановления MySQL:

sudo nano /usr/local/bin/restore-mysql.sh

2. Добавьте содержимое:

BACKUP_DIR="/backup/databases"
MYSQL_USER="root"
MYSQL_PASS="password"
echo "Available MySQL backups:"
ls -la $BACKUP_DIR/*.sql.gz
read -p "Enter backup filename: " BACKUP_FILE
if [ ! -f $BACKUP_DIR/$BACKUP_FILE ]; then
echo "Error: Backup file not found"
exit 1
fi
gunzip -c $BACKUP_DIR/$BACKUP_FILE | mysql -u $MYSQL_USER -p$MYSQL_PASS
echo "MySQL database restored successfully"

9. Оптимизация резервного копирования

Сжатие и дедупликация

1. Создайте оптимизированный скрипт:

sudo nano /usr/local/bin/backup-optimized.sh

2. Добавьте содержимое:

BACKUP_DIR="/backup"
SOURCE_DIR="/var/www"
DATE=$(date +%Y%m%d_%H%M%S)
tar --create --gzip --file $BACKUP_DIR/optimized_backup_$DATE.tar.gz \
--exclude='*.tmp' \
--exclude='*.log' \
--exclude='*.cache' \
$SOURCE_DIR
md5sum $BACKUP_DIR/optimized_backup_$DATE.tar.gz > $BACKUP_DIR/optimized_backup_$DATE.md5
echo "Optimized backup created: optimized_backup_$DATE.tar.gz"

Инкрементальное резервное копирование

1. Создайте скрипт инкрементального копирования:

sudo nano /usr/local/bin/backup-incremental.sh

2. Добавьте содержимое:

BACKUP_DIR="/backup"
SOURCE_DIR="/var/www"
DATE=$(date +%Y%m%d_%H%M%S)
tar --create --gzip --file $BACKUP_DIR/incremental_backup_$DATE.tar.gz \
--newer-mtime="1 day ago" \
$SOURCE_DIR
echo "Incremental backup created: incremental_backup_$DATE.tar.gz"

10. Устранение неполадок

Частые проблемы

1. Недостаточно места для бэкапа:

  • Проверьте свободное место:
    df -h
  • Очистите старые бэкапы:
    find /backup -name "*.tar.gz" -mtime +30 -delete

2. Ошибка прав доступа:

  • Проверьте права:
    ls -la /backup
  • Исправьте права:
    sudo chown -R root:root /backup

3. Бэкап не создается:

  • Проверьте логи:
    tail -f /var/log/backup.log
  • Проверьте cron:
    sudo systemctl status cron

Диагностика

1. Проверьте статус cron:

sudo systemctl status cron

2. Проверьте логи cron:

sudo tail -f /var/log/cron.log

3. Проверьте права на скрипты:

ls -la /usr/local/bin/backup-*.sh

Заключение

Автоматическое резервное копирование настроено! Теперь ваши данные защищены регулярными бэкапами.

Для размещения ваших проектов с настроенным резервным копированием на надежном хостинге рекомендуем воспользоваться услугами [ARK-HOSTER.RU](https://ark-hoster.ru):

Наши специалисты помогут с настройкой резервного копирования и обеспечением безопасности ваших данных!