- 17, May 2024
- #1
Вероятно, я учу вас всех сосать яйца, но вот как я делаю резервные копии своих серверов без присмотра, в том числе за пределами площадки.
Надеюсь, некоторые найдут это полезным.
Я использую этот метод на форумах WordPress и IPS/VB. Первый шаг — определить, какой режим резервного копирования вы бы хотели использовать.
Я делаю ежедневное, еженедельное и ежемесячное резервное копирование, поэтому у меня есть 3 файла php (по одному для каждого типа). Вот как выглядит мой daily_backup.php:
Когда мои последние резервные копии устареют на пару дней, я перемещаю их на диск без SSD.
Я всегда добавлял время и дату к имени файла.
Для этого создайте задание cron:
Сделайте то же самое для еженедельных и ежемесячных сценариев.
Последняя часть головоломки — создать внешнюю копию.
Этого можно добиться множеством способов, например, используя Amazon S3, FTP или, в этом примере, Rsync с другим сервером.
Надеюсь, некоторые найдут это полезным.
Я использую этот метод на форумах WordPress и IPS/VB. Первый шаг — определить, какой режим резервного копирования вы бы хотели использовать.
Я делаю ежедневное, еженедельное и ежемесячное резервное копирование, поэтому у меня есть 3 файла php (по одному для каждого типа). Вот как выглядит мой daily_backup.php:
#Sync to Dev
0 2 * * * localuser /usr/bin/rsync -avz -e "ssh -p 4001 -i /localuser/.ssh/id_rsa" /user/backup/ [email protected]:/home/remoteuser/backup
0 2 * * * localuser /usr/bin/rsync -avz -e "ssh -p 4001 -i /localuser/.ssh/id_rsa" /nonssddisk/backup/ [email protected]:/home/remoteuser/backup
PHP: Там много чего происходит, так что давайте разберемся....
Я использую хост на базе SSD с подключенным диском без SSD большего размера.
Когда мои последние резервные копии устареют на пару дней, я перемещаю их на диск без SSD.
# Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed #Daily Backup 0 1 * * * user /usr/bin/php /user/backup/daily_backup.php
PHP: Далее идет сброс и архивирование базы данных сайта.
Я всегда добавлял время и дату к имени файла.
$command = "find /nonssddisk/backup/daily/ -mtime +3 -exec rm -r {} \;"; system($command);
PHP: Теперь мы архивируем файлы сайта, то есть все, что не хранится в базе данных.
$backupFile = '/user/backup/daily/site_daily-' . date("Y-m-d-H-i") . '.tgz'; $command = "tar -czf $backupFile /path/to/html/files/"; system($command);
PHP: Наконец, мы удаляем все старые резервные копии.
$backupFile = '/user/backup/daily/sql_daily-' . date("Y-m-d-H-i") . '.gz'; $command = "mysqldump --defaults-extra-file=/user/.my.cnf -u user -h localhost DatabaseName | gzip > $backupFile"; system($command);
PHP: PHP-скрипт резервного копирования готов, теперь нам нужно обеспечить его запуск каждый день.
Для этого создайте задание cron:
$command = "find /user/backup/daily/ -mtime +2 -exec mv {} /nonssddisk/backup/daily/ \;"; system($command);
Код (разметка): теперь он обеспечивает автоматическое ежедневное резервное копирование вашего сайта, которое хранится локально на этом сайте.
Сделайте то же самое для еженедельных и ежемесячных сценариев.
Последняя часть головоломки — создать внешнюю копию.
Этого можно добиться множеством способов, например, используя Amazon S3, FTP или, в этом примере, Rsync с другим сервером.
<?php date_default_timezone_set("Australia/Brisbane"); $command = "find /user/backup/daily/ -mtime +2 -exec mv {} /nonssddisk/backup/daily/ \;"; system($command); $backupFile = '/user/backup/daily/sql_daily-' . date("Y-m-d-H-i") . '.gz'; $command = "mysqldump --defaults-extra-file=/user/.my.cnf -u user -h localhost DatabaseName | gzip > $backupFile"; system($command); $backupFile = '/user/backup/daily/site_daily-' . date("Y-m-d-H-i") . '.tgz'; $command = "tar -czf $backupFile /path/to/html/files/"; system($command); $command = "find /nonssddisk/backup/daily/ -mtime +3 -exec rm -r {} \;"; system($command); ?>
Код (разметка):