feat: complete V1 phases 0-7
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
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"
|
||||
Reference in New Issue
Block a user