Я использую Windows Server 2012. Мне нужно каждые два часа выполнять дамп базы данных и архивировать сгенерированный файл SQL.

Файл zip должен иметь следующий синтаксис: nameOfFile_date_hour.zip .
Мне не нужны минуты и вторые детали для имени файла почтового индекса.
Есть способ сделать это?

Я знаю, как сделать это с Linux, но не могу понять, как это сделать с Windows.

1 ответ1

1

Вы можете написать сценарий PowerShell и запускать планировщик задач Windows каждые 2 часа

Быстрый и грязный пример скрипта:

# Declare variables
$db = "[DB NAME]"
$user = "[DB USERNAME]"
$pw = "[DB PASSWORD]"
$date = (Get-Date).ToString("yyyy-MM-dd_HH.mm.ss")
$mysql_backupfile = ".\backup_$date.sql"
$zipped_backupfile = "$mysql_backupfile.zip"

# Backup MySql database
mysqldump --user=$user --password=$pw --databases $db > $mysql_backupfile

# Compress file using 7zip
sz a -tzip $zipped_backupfile $mysql_backupfile

# Remove uncompressed backup file
rm -Path $mysql_backupfile

Измените имя базы данных, имя пользователя, пароль и формат даты на все, что вам нужно.

Примечание: я не совсем уверен в последствиях безопасности для вставки имени пользователя и пароля непосредственно в сценарий, но если ваш сервер защищен, я уверен, что все будет хорошо. Но вы можете загрузить учетные данные, как вам нравится (например, из переменной среды)

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

Чтобы удалить файлы .zip старше 3 дней:

Get-ChildItem -Filter '*.zip' |
    where { $_.LastWriteTime -lt (Get-Date).AddDays(-3) } |
    Remove-Item

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .