MariaDB のバックアップを PowerShell から「mysqldump.exe」を使用して行います。MariaDB のバージョン10.3 で確認しています。
スクリプトファイルが存在するフォルダ内の「dbSave」フォルダにバックアップファイルを保存します。ファイル名は、保存実行時の日付時間です。 (ファイル名の例 「db20221003122345.sql」)
指定された保存日数を超えたファイルは、削除します。mysqldump.exeのオプションは一例です。
# DbSave.ps1
# mariadb バックアップ
$shost = "localhost" # ホスト名 or IPアドレス
$suser = "root" # ユーザ名
$spwd = "root" # パスワード
$isday = 30 # 保存日数
$smysqldump = "`"C:\Program Files\MariaDB 10.3\bin\mysqldump.exe`""
# 保存先フォルダ
$ssaveDir = (Split-Path $MyInvocation.MyCommand.Path -Parent) + "\dbSave"
# 保存ファイル名
$ssavefile = $ssaveDir + "\db" + $(Get-Date).ToString("yyyyMMddHHmmss") + ".sql"
if (-not (Test-Path $ssaveDir)){ # 存在しない場合フォルダ作成
New-Item $ssaveDir -type directory
}
$sarg = "-h" + $shost + " " + "-u" + $suser + " " + "-p" + $spwd + " "
$sarg += "--opt --skip-lock-tables --events "
# $sarg += "--single-transaction " # innodb
$sarg += "--lock-all-tables " # MyISAM,Aria
$sarg += "--hex-blob "
$sarg += " --databases db0 db1 " # 保存するデータベース名
$sarg += " --result-file=" + $ssavefile
#Write-Host $sarg
$psinf = New-Object System.Diagnostics.ProcessStartInfo
$psinf.FileName = $smysqldump
$psinf.Arguments = $sarg
$prc = New-Object System.Diagnostics.Process
$prc.StartInfo = $psinf
[void]$prc.Start()
while($true){
$rtn1 = $prc.WaitForExit(1000) # 終了するまで待つ
if ($rtn1 -eq $true){
break
}
}
$rtn = $prc.ExitCode
Write-Host $rtn
# 保存期間を超えるファイルの削除
$sarfile = Get-ChildItem $ssaveDir\db*.sql -File # ファイル一覧
[DateTime]$dtb = (Get-Date).AddDays(-$isday) # 保存期間
foreach($sfile in $sarfile){
$sf = [string]$sfile
$sfn = [System.IO.Path]::GetFileNameWithoutExtension($sf) # ファイルベース部
if (-not ([regex]::Match($sfn, "db[0-9]{14}"))){
continue
}
$sa = $sfn.Substring(2, 14)
[DateTime]$dta = [DateTime]::ParseExact($sa, "yyyyMMddHHmmss", $null)
if ($dtb.Ticks -gt $dta.Ticks){
[System.IO.File]::Delete($sfile)
}
}
ファイルへの出力は、リダイレクトを使用せず、mysqldump.exe のオプション --result-file= でファイル名を指定しています。
ここでは、バッチファイルに PowerShellスクリプトの呼び出し、実行を記述し、バッチファイルをタスクスケジューラから実行します。
PowerShellスクリプトを呼び出すバッチファイル例 (dbSaveRun.bat)
@echo off
powershell -ExecutionPolicy RemoteSigned -File D:\dbSavePs\DbSave.ps1
「-ExecutionPolicy RemoteSigned」でスクリプトが実行できるように実行ポリシーを変更します。また「-File」で実行するスクリプトファイルを指定します。
バッチファイル「dbSaveRun.bat」をタスクスケジューラに登録します。
下記の設定例は、毎日6時25分にバックアップを実行する設定例です。
HeidiSQLでバックアップファイルからデータベースの復旧を行います。HeidiSQL のデータベース接続設定等は、設定されているものとします。
対象データベースへ接続されている状態で、メニューバー[ファイル]-[SQLファイルを実行]でファイル選択ダイアログを表示します。実行するSQLファイルを選択します。「開く」ボタンでSQLファイルのインポートが実行されます。