16 lines
1.2 KiB
PowerShell
16 lines
1.2 KiB
PowerShell
param([Parameter(Mandatory=$true)][string]$BackupFile,[Parameter(Mandatory=$true)][string]$TargetDatabase)
|
|||
|
|
$ErrorActionPreference='Stop'
|
||
|
|
if(-not $env:DATABASE_URL){throw 'DATABASE_URL is required'}
|
||
|
|
if($TargetDatabase -notmatch '^[A-Za-z0-9_]+$'){throw 'TargetDatabase contains invalid characters'}
|
||
|
|
$file=(Resolve-Path -LiteralPath $BackupFile).Path
|
||
|
|
$checksum="$file.sha256"
|
||
|
|
if(-not(Test-Path -LiteralPath $checksum)){throw 'checksum file is required'}
|
||
|
|
$expected=(Get-Content -LiteralPath $checksum).Split(' ')[0]
|
||
|
|
if((Get-FileHash -Algorithm SHA256 -LiteralPath $file).Hash.ToLowerInvariant() -ne $expected){throw 'backup checksum mismatch'}
|
||
|
|
$uri=[Uri]$env:DATABASE_URL;$credential=$uri.UserInfo.Split(':',2);$env:MYSQL_PWD=[Uri]::UnescapeDataString($credential[1]);$user=[Uri]::UnescapeDataString($credential[0])
|
||
|
|
& mysql --host $uri.Host --port $uri.Port --user $user --execute "CREATE DATABASE IF NOT EXISTS ``$TargetDatabase`` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
|
||
|
|
if($LASTEXITCODE -ne 0){throw 'target database creation failed'}
|
||
|
|
Get-Content -LiteralPath $file -Raw | & mysql --host $uri.Host --port $uri.Port --user $user $TargetDatabase
|
||
|
|
if($LASTEXITCODE -ne 0){throw 'restore failed'}
|
||
|
|
Write-Output "Restore completed into $TargetDatabase"
|