Данный пост ни разу не руководство по бэкапингу чего-либо. Автору (т.е. мне) была удобна такая реализация и именно по этой причине появился этот эпос.
На одном из Linux-серверов с MySQL с помощью SqlDump и Cron еженедельно производится дампирование базы данных в общую smb-папку на том же сервере. Метод бэкапинга, конечно, спорный, но открывать настежь ради нескольких файлов дампа базы данных доступ в сетевую папку на общей шаре — ещё более спорный вариант.
Решил всецело замкнуть резервное копирование на планировщиках и скриптах. С одной стороны работает Bash и Cron, а с другой «Планировщик заданий» и PowerShell.
Допустим Cron запускает скрипт в 5:00 и производится дампирование базы, а «Планировщик заданий» забирает дамп в 6:00 и копирует его в нужную папку.
# Папка источник #
$source = "\\192.168.1.100\backup"
# Папка назначения #
$destination = "D:\backup"
# Файлы в папке источнике #
$sourcefiles = Get-ChildItem -Path $source
# Получение имени файлов в папке назначения #
$destinationfiles = (Get-ChildItem -Path $destination).Name
# Цикл перебора файлов в папке источнике #
foreach($file in $sourcefiles)
{
# Получение имени файла в папке источнике #
$filename = $file.Name;
# Условие, если папка назначения не содержит файла из папки источника #
if($destinationfiles -notcontains $filename)
{
# Копирование файла #
Copy-Item -Path $file.FullName -Destination $destination -Force
}
}
## Удаление бэкапов 2х месячной давности из папки источника - Опционально ##
# Get-ChildItem $source -Recurse -File | Where CreationTime -lt (Get-Date).AddDays(-60) | Remove-Item -Force
## Удаление бэкапов 4х месячной давности из папки назначения - Опционально ##
# Get-ChildItem $destination -Recurse -File | Where CreationTime -lt (Get-Date).AddDays(-120) | Remove-Item -Force
Опционально: можете раскомментировать командлеты для удаления устаревших файлов бэкапа. Из папки источника удаляются файлы, созданные 60+ дней назад, а из папки назначения — 120+.
В качестве послесловия — вот этой командой я создавал дамп базы данных MySQL:
mysqldump -uDBADMIN -pDBADMINPASSWORD DBNAME > /backup/$(date +"%Y-%m-%d").sql
Уточню:
- DBADMIN — имя администратора базы данных;
- DBADMINPASSWORD — пароль администратора базы данных;
- DBNAME — имя базы данных.