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

Материал из ARK-HOSTER.RU | Документация хостинга
Перейти к навигации Перейти к поиску
Новая страница: «= Настройка автоматических резервных копий = == 1. Подготовка системы == * Войдите в систем…»
 
Нет описания правки
Строка 11: Строка 11:


1. Создайте основную директорию для бэкапов:
1. Создайте основную директорию для бэкапов:
<code>
<code>sudo mkdir -p /backup/{daily,weekly,monthly}</code>
sudo mkdir -p /backup/{daily,weekly,monthly}
</code>


2. Создайте директории для разных типов бэкапов:
2. Создайте директории для разных типов бэкапов:
<code>
<code>sudo mkdir -p /backup/{files,databases,configs,logs}</code>
sudo mkdir -p /backup/{files,databases,configs,logs}
</code>


3. Установите правильные права доступа:
3. Установите правильные права доступа:
<code>
<code>sudo chown -R root:root /backup</code>
sudo chown -R root:root /backup
<code>sudo chmod -R 755 /backup</code>
sudo chmod -R 755 /backup
</code>


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


1. Создайте скрипт резервного копирования:
1. Создайте скрипт резервного копирования:
<code>
<code>sudo nano /usr/local/bin/backup-files.sh</code>
sudo nano /usr/local/bin/backup-files.sh
</code>


2. Добавьте содержимое:
2. Добавьте содержимое:
<code>
<code>BACKUP_DIR="/backup/files"</code>
#!/bin/bash
<code>SOURCE_DIRS="/var/www /home /etc"</code>
 
<code>DATE=$(date +%Y%m%d_%H%M%S)</code>
# Настройки
<code>BACKUP_FILE="files_backup_$DATE.tar.gz"</code>
BACKUP_DIR="/backup/files"
<code>tar -czf $BACKUP_DIR/$BACKUP_FILE $SOURCE_DIRS</code>
SOURCE_DIRS="/var/www /home /etc"
<code>if [ -f $BACKUP_DIR/$BACKUP_FILE ]; then</code>
DATE=$(date +%Y%m%d_%H%M%S)
<code>echo "Backup created: $BACKUP_FILE"</code>
BACKUP_FILE="files_backup_$DATE.tar.gz"
<code>echo "Size: $(du -h $BACKUP_DIR/$BACKUP_FILE | cut -f1)"</code>
 
<code>else</code>
# Создание архива
<code>echo "Error: Backup failed"</code>
tar -czf $BACKUP_DIR/$BACKUP_FILE $SOURCE_DIRS
<code>exit 1</code>
 
<code>fi</code>
# Проверка создания архива
<code>find $BACKUP_DIR -name "files_backup_*.tar.gz" -mtime +7 -delete</code>
if [ -f $BACKUP_DIR/$BACKUP_FILE ]; then
<code>echo "Backup completed successfully"</code>
    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>
<code>sudo chmod +x /usr/local/bin/backup-files.sh</code>
sudo chmod +x /usr/local/bin/backup-files.sh
</code>


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


1. Создайте файл исключений:
1. Создайте файл исключений:
<code>
<code>sudo nano /backup/exclude.txt</code>
sudo nano /backup/exclude.txt
</code>


2. Добавьте исключения:
2. Добавьте исключения:
<code>
<code>*.tmp</code>
# Исключения для резервного копирования
<code>*.log</code>
*.tmp
<code>*.cache</code>
*.log
<code>/tmp/*</code>
*.cache
<code>/var/tmp/*</code>
/tmp/*
<code>/var/cache/*</code>
/var/tmp/*
<code>/var/log/*</code>
/var/cache/*
/var/log/*
</code>


3. Обновите скрипт для использования исключений:
3. Обновите скрипт для использования исключений:
<code>
<code>tar -czf $BACKUP_DIR/$BACKUP_FILE --exclude-from=/backup/exclude.txt $SOURCE_DIRS</code>
tar -czf $BACKUP_DIR/$BACKUP_FILE --exclude-from=/backup/exclude.txt $SOURCE_DIRS
</code>


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


1. Создайте скрипт для MySQL:
1. Создайте скрипт для MySQL:
<code>
<code>sudo nano /usr/local/bin/backup-mysql.sh</code>
sudo nano /usr/local/bin/backup-mysql.sh
</code>


2. Добавьте содержимое:
2. Добавьте содержимое:
<code>
<code>BACKUP_DIR="/backup/databases"</code>
#!/bin/bash
<code>MYSQL_USER="backup_user"</code>
 
<code>MYSQL_PASS="backup_password"</code>
# Настройки
<code>DATE=$(date +%Y%m%d_%H%M%S)</code>
BACKUP_DIR="/backup/databases"
<code>mysqldump -u $MYSQL_USER -p$MYSQL_PASS --all-databases > $BACKUP_DIR/mysql_full_backup_$DATE.sql</code>
MYSQL_USER="backup_user"
<code>for db in $(mysql -u $MYSQL_USER -p$MYSQL_PASS -e "SHOW DATABASES;" | grep -v "Database\|information_schema\|performance_schema\|mysql\|sys"); do</code>
MYSQL_PASS="backup_password"
<code>mysqldump -u $MYSQL_USER -p$MYSQL_PASS $db > $BACKUP_DIR/${db}_backup_$DATE.sql</code>
DATE=$(date +%Y%m%d_%H%M%S)
<code>done</code>
 
<code>gzip $BACKUP_DIR/*_backup_$DATE.sql</code>
# Создание резервной копии всех баз данных
<code>find $BACKUP_DIR -name "*_backup_*.sql.gz" -mtime +7 -delete</code>
mysqldump -u $MYSQL_USER -p$MYSQL_PASS --all-databases > $BACKUP_DIR/mysql_full_backup_$DATE.sql
<code>echo "MySQL backup completed successfully"</code>
 
# Создание резервных копий отдельных баз данных
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>
<code>sudo chmod +x /usr/local/bin/backup-mysql.sh</code>
sudo chmod +x /usr/local/bin/backup-mysql.sh
</code>


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


1. Создайте скрипт для PostgreSQL:
1. Создайте скрипт для PostgreSQL:
<code>
<code>sudo nano /usr/local/bin/backup-postgresql.sh</code>
sudo nano /usr/local/bin/backup-postgresql.sh
</code>


2. Добавьте содержимое:
2. Добавьте содержимое:
<code>
<code>BACKUP_DIR="/backup/databases"</code>
#!/bin/bash
<code>PG_USER="postgres"</code>
 
<code>DATE=$(date +%Y%m%d_%H%M%S)</code>
# Настройки
<code>pg_dumpall -U $PG_USER > $BACKUP_DIR/postgresql_full_backup_$DATE.sql</code>
BACKUP_DIR="/backup/databases"
<code>for db in $(psql -U $PG_USER -l -t | cut -d'|' -f1 | grep -v template | grep -v postgres); do</code>
PG_USER="postgres"
<code>pg_dump -U $PG_USER $db > $BACKUP_DIR/${db}_backup_$DATE.sql</code>
DATE=$(date +%Y%m%d_%H%M%S)
<code>done</code>
 
<code>gzip $BACKUP_DIR/*_backup_$DATE.sql</code>
# Создание резервной копии всех баз данных
<code>find $BACKUP_DIR -name "*_backup_*.sql.gz" -mtime +7 -delete</code>
pg_dumpall -U $PG_USER > $BACKUP_DIR/postgresql_full_backup_$DATE.sql
<code>echo "PostgreSQL backup completed successfully"</code>
 
# Создание резервных копий отдельных баз данных
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>
<code>sudo crontab -e</code>
sudo crontab -e
</code>


2. Добавьте задачи резервного копирования:
2. Добавьте задачи резервного копирования:
<code>
<code>0 2 * * * /usr/local/bin/backup-files.sh</code>
# Ежедневное резервное копирование файлов в 2:00
<code>0 3 * * * /usr/local/bin/backup-mysql.sh</code>
0 2 * * * /usr/local/bin/backup-files.sh
<code>0 1 * * 0 /usr/local/bin/backup-full.sh</code>
 
<code>0 0 1 * * /usr/local/bin/backup-monthly.sh</code>
# Ежедневное резервное копирование баз данных в 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>
<code>sudo nano /usr/local/bin/backup-full.sh</code>
sudo nano /usr/local/bin/backup-full.sh
</code>


2. Добавьте содержимое:
2. Добавьте содержимое:
<code>
<code>BACKUP_DIR="/backup"</code>
#!/bin/bash
<code>DATE=$(date +%Y%m%d_%H%M%S)</code>
 
<code>LOG_FILE="/var/log/backup.log"</code>
# Настройки
<code>log() {</code>
BACKUP_DIR="/backup"
<code>echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOG_FILE</code>
DATE=$(date +%Y%m%d_%H%M%S)
<code>}</code>
LOG_FILE="/var/log/backup.log"
<code>log "Starting full backup"</code>
 
<code>log "Backing up files..."</code>
# Функция логирования
<code>/usr/local/bin/backup-files.sh</code>
log() {
<code>log "Backing up databases..."</code>
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOG_FILE
<code>/usr/local/bin/backup-mysql.sh</code>
}
<code>log "Backing up configurations..."</code>
 
<code>tar -czf $BACKUP_DIR/configs_backup_$DATE.tar.gz /etc</code>
log "Starting full backup"
<code>log "Creating backup index..."</code>
 
<code>ls -la $BACKUP_DIR > $BACKUP_DIR/backup_index.txt</code>
# Резервное копирование файлов
<code>log "Full backup completed successfully"</code>
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>
<code>sudo chmod +x /usr/local/bin/backup-full.sh</code>
sudo chmod +x /usr/local/bin/backup-full.sh
</code>


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


1. Создайте скрипт для удаленного копирования:
1. Создайте скрипт для удаленного копирования:
<code>
<code>sudo nano /usr/local/bin/backup-remote.sh</code>
sudo nano /usr/local/bin/backup-remote.sh
</code>


2. Добавьте содержимое:
2. Добавьте содержимое:
<code>
<code>REMOTE_HOST="backup-server.example.com"</code>
#!/bin/bash
<code>REMOTE_USER="backup"</code>
 
<code>REMOTE_DIR="/backup/$(hostname)"</code>
# Настройки
<code>LOCAL_DIR="/backup"</code>
REMOTE_HOST="backup-server.example.com"
<code>DATE=$(date +%Y%m%d_%H%M%S)</code>
REMOTE_USER="backup"
<code>rsync -avz --delete $LOCAL_DIR/ $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/</code>
REMOTE_DIR="/backup/$(hostname)"
<code>if [ $? -eq 0 ]; then</code>
LOCAL_DIR="/backup"
<code>echo "Remote backup completed successfully"</code>
DATE=$(date +%Y%m%d_%H%M%S)
<code>else</code>
 
<code>echo "Remote backup failed"</code>
# Синхронизация с удаленным сервером
<code>exit 1</code>
rsync -avz --delete $LOCAL_DIR/ $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/
<code>fi</code>
 
# Проверка синхронизации
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>
<code>sudo nano /usr/local/bin/backup-scp.sh</code>
sudo nano /usr/local/bin/backup-scp.sh
</code>


2. Добавьте содержимое:
2. Добавьте содержимое:
<code>
<code>REMOTE_HOST="backup-server.example.com"</code>
#!/bin/bash
<code>REMOTE_USER="backup"</code>
 
<code>REMOTE_DIR="/backup/$(hostname)"</code>
# Настройки
<code>LOCAL_DIR="/backup"</code>
REMOTE_HOST="backup-server.example.com"
<code>DATE=$(date +%Y%m%d_%H%M%S)</code>
REMOTE_USER="backup"
<code>scp -r $LOCAL_DIR/* $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/</code>
REMOTE_DIR="/backup/$(hostname)"
<code>if [ $? -eq 0 ]; then</code>
LOCAL_DIR="/backup"
<code>echo "SCP backup completed successfully"</code>
DATE=$(date +%Y%m%d_%H%M%S)
<code>else</code>
 
<code>echo "SCP backup failed"</code>
# Копирование файлов
<code>exit 1</code>
scp -r $LOCAL_DIR/* $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/
<code>fi</code>
 
# Проверка копирования
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>
<code>sudo nano /usr/local/bin/backup-monitor.sh</code>
sudo nano /usr/local/bin/backup-monitor.sh
</code>


2. Добавьте содержимое:
2. Добавьте содержимое:
<code>
<code>BACKUP_DIR="/backup"</code>
#!/bin/bash
<code>LOG_FILE="/var/log/backup.log"</code>
 
<code>ALERT_EMAIL="admin@example.com"</code>
# Настройки
<code>LAST_BACKUP=$(find $BACKUP_DIR -name "*.tar.gz" -mtime -1 | wc -l)</code>
BACKUP_DIR="/backup"
<code>if [ $LAST_BACKUP -eq 0 ]; then</code>
LOG_FILE="/var/log/backup.log"
<code>echo "ALERT: No backup found in the last 24 hours" | mail -s "Backup Alert" $ALERT_EMAIL</code>
ALERT_EMAIL="admin@example.com"
<code>fi</code>
 
<code>BACKUP_SIZE=$(du -sh $BACKUP_DIR | cut -f1)</code>
# Проверка последнего бэкапа
<code>echo "Backup directory size: $BACKUP_SIZE"</code>
LAST_BACKUP=$(find $BACKUP_DIR -name "*.tar.gz" -mtime -1 | wc -l)
<code>for backup in $(find $BACKUP_DIR -name "*.tar.gz" -mtime -1); do</code>
 
<code>if ! tar -tzf $backup > /dev/null 2>&1; then</code>
if [ $LAST_BACKUP -eq 0 ]; then
<code>echo "ALERT: Corrupted backup: $backup" | mail -s "Backup Alert" $ALERT_EMAIL</code>
    echo "ALERT: No backup found in the last 24 hours" | mail -s "Backup Alert" $ALERT_EMAIL
<code>fi</code>
fi
<code>done</code>
 
# Проверка размера бэкапов
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>
<code>sudo chmod +x /usr/local/bin/backup-monitor.sh</code>
sudo chmod +x /usr/local/bin/backup-monitor.sh
</code>


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


1. Добавьте задачу мониторинга в crontab:
1. Добавьте задачу мониторинга в crontab:
<code>
<code>0 * * * * /usr/local/bin/backup-monitor.sh</code>
# Проверка бэкапов каждый час
0 * * * * /usr/local/bin/backup-monitor.sh
</code>


== 8. Восстановление из резервных копий ==
== 8. Восстановление из резервных копий ==
Строка 354: Строка 218:


1. Создайте скрипт восстановления:
1. Создайте скрипт восстановления:
<code>
<code>sudo nano /usr/local/bin/restore-files.sh</code>
sudo nano /usr/local/bin/restore-files.sh
</code>


2. Добавьте содержимое:
2. Добавьте содержимое:
<code>
<code>BACKUP_DIR="/backup/files"</code>
#!/bin/bash
<code>RESTORE_DIR="/restore"</code>
 
<code>echo "Available backups:"</code>
# Настройки
<code>ls -la $BACKUP_DIR/*.tar.gz</code>
BACKUP_DIR="/backup/files"
<code>read -p "Enter backup filename: " BACKUP_FILE</code>
RESTORE_DIR="/restore"
<code>if [ ! -f $BACKUP_DIR/$BACKUP_FILE ]; then</code>
 
<code>echo "Error: Backup file not found"</code>
# Список доступных бэкапов
<code>exit 1</code>
echo "Available backups:"
<code>fi</code>
ls -la $BACKUP_DIR/*.tar.gz
<code>mkdir -p $RESTORE_DIR</code>
 
<code>tar -xzf $BACKUP_DIR/$BACKUP_FILE -C $RESTORE_DIR</code>
# Запрос имени файла бэкапа
<code>echo "Files restored to $RESTORE_DIR"</code>
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>
<code>sudo nano /usr/local/bin/restore-mysql.sh</code>
sudo nano /usr/local/bin/restore-mysql.sh
</code>


2. Добавьте содержимое:
2. Добавьте содержимое:
<code>
<code>BACKUP_DIR="/backup/databases"</code>
#!/bin/bash
<code>MYSQL_USER="root"</code>
 
<code>MYSQL_PASS="password"</code>
# Настройки
<code>echo "Available MySQL backups:"</code>
BACKUP_DIR="/backup/databases"
<code>ls -la $BACKUP_DIR/*.sql.gz</code>
MYSQL_USER="root"
<code>read -p "Enter backup filename: " BACKUP_FILE</code>
MYSQL_PASS="password"
<code>if [ ! -f $BACKUP_DIR/$BACKUP_FILE ]; then</code>
 
<code>echo "Error: Backup file not found"</code>
# Список доступных бэкапов
<code>exit 1</code>
echo "Available MySQL backups:"
<code>fi</code>
ls -la $BACKUP_DIR/*.sql.gz
<code>gunzip -c $BACKUP_DIR/$BACKUP_FILE | mysql -u $MYSQL_USER -p$MYSQL_PASS</code>
 
<code>echo "MySQL database restored successfully"</code>
# Запрос имени файла бэкапа
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>
<code>sudo nano /usr/local/bin/backup-optimized.sh</code>
sudo nano /usr/local/bin/backup-optimized.sh
</code>


2. Добавьте содержимое:
2. Добавьте содержимое:
<code>
<code>BACKUP_DIR="/backup"</code>
#!/bin/bash
<code>SOURCE_DIR="/var/www"</code>
 
<code>DATE=$(date +%Y%m%d_%H%M%S)</code>
# Настройки
<code>tar --create --gzip --file $BACKUP_DIR/optimized_backup_$DATE.tar.gz \</code>
BACKUP_DIR="/backup"
<code>--exclude='*.tmp' \</code>
SOURCE_DIR="/var/www"
<code>--exclude='*.log' \</code>
DATE=$(date +%Y%m%d_%H%M%S)
<code>--exclude='*.cache' \</code>
 
<code>$SOURCE_DIR</code>
# Создание сжатого архива с максимальным сжатием
<code>md5sum $BACKUP_DIR/optimized_backup_$DATE.tar.gz > $BACKUP_DIR/optimized_backup_$DATE.md5</code>
tar --create --gzip --file $BACKUP_DIR/optimized_backup_$DATE.tar.gz \
<code>echo "Optimized backup created: optimized_backup_$DATE.tar.gz"</code>
    --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>
<code>sudo nano /usr/local/bin/backup-incremental.sh</code>
sudo nano /usr/local/bin/backup-incremental.sh
</code>


2. Добавьте содержимое:
2. Добавьте содержимое:
<code>
<code>BACKUP_DIR="/backup"</code>
#!/bin/bash
<code>SOURCE_DIR="/var/www"</code>
 
<code>DATE=$(date +%Y%m%d_%H%M%S)</code>
# Настройки
<code>tar --create --gzip --file $BACKUP_DIR/incremental_backup_$DATE.tar.gz \</code>
BACKUP_DIR="/backup"
<code>--newer-mtime="1 day ago" \</code>
SOURCE_DIR="/var/www"
<code>$SOURCE_DIR</code>
DATE=$(date +%Y%m%d_%H%M%S)
<code>echo "Incremental backup created: incremental_backup_$DATE.tar.gz"</code>
 
# Создание инкрементального архива
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. Устранение неполадок ==
Строка 497: Строка 305:


1. Проверьте статус cron:
1. Проверьте статус cron:
<code>
<code>sudo systemctl status cron</code>
sudo systemctl status cron
</code>


2. Проверьте логи cron:
2. Проверьте логи cron:
<code>
<code>sudo tail -f /var/log/cron.log</code>
sudo tail -f /var/log/cron.log
</code>


3. Проверьте права на скрипты:
3. Проверьте права на скрипты:
<code>
<code>ls -la /usr/local/bin/backup-*.sh</code>
ls -la /usr/local/bin/backup-*.sh
</code>


== Заключение ==
== Заключение ==

Версия от 19:59, 14 октября 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):

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