Настройка автоматических резервных копий — различия между версиями
Admin (обсуждение | вклад) (Новая страница: «= Настройка автоматических резервных копий = == 1. Подготовка системы == * Войдите в систем…») |
Admin (обсуждение | вклад) |
||
Строка 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> |
− | + | <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> |
− | |||
− | |||
− | else | ||
− | |||
− | |||
− | fi | ||
− | |||
− | |||
− | 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> |
− | + | <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 | ||
− | |||
− | done | ||
− | |||
− | |||
− | gzip $BACKUP_DIR/*_backup_$DATE.sql | ||
− | |||
− | |||
− | 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> |
− | + | <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 | ||
− | |||
− | done | ||
− | |||
− | |||
− | gzip $BACKUP_DIR/*_backup_$DATE.sql | ||
− | |||
− | |||
− | 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> |
− | + | <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> | |
− | |||
− | 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 | ||
− | </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> |
− | + | <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> |
− | + | <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> |
− | + | <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 | ||
− | |||
− | else | ||
− | |||
− | |||
− | 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> |
− | + | <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 | ||
− | |||
− | else | ||
− | |||
− | |||
− | 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> |
− | + | <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> |
− | + | <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 | ||
− | |||
− | |||
− | |||
− | 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> |
− | + | <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 | ||
− | |||
− | |||
− | 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> |
− | + | <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 | ||
− | |||
− | |||
− | 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> |
− | + | <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> |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | 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> |
− | + | <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 \ | ||
− | |||
− | |||
− | |||
− | 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 Настройка автоматических резервных копий
- 1.1 1. Подготовка системы
- 1.2 2. Создание директории для резервных копий
- 1.3 3. Настройка резервного копирования файлов
- 1.4 4. Настройка резервного копирования баз данных
- 1.5 5. Настройка автоматического резервного копирования
- 1.6 6. Настройка удаленного резервного копирования
- 1.7 7. Настройка мониторинга резервных копий
- 1.8 8. Восстановление из резервных копий
- 1.9 9. Оптимизация резервного копирования
- 1.10 10. Устранение неполадок
- 1.11 Заключение
Настройка автоматических резервных копий
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):
- [Выделенные серверы](https://ark-hoster.ru/dedicated/) - для проектов с большими объемами данных
- [VPS/VDS серверы](https://ark-hoster.ru/vpsgame/) - для небольших и средних проектов
Наши специалисты помогут с настройкой резервного копирования и обеспечением безопасности ваших данных!