Azure SQL Databaseのバックアップ:ファイル出力

ストレージアクセスキーで出力
7つの引数が必要.

  • SQLサーバの管理者名
  • SQLサーバの管理者パスワード
  • バックアップ元のDB名
  • リソースグループ名
  • SQLサーバ名
  • ストレージのURL(出力先のファイル名を含む)
  • ストレージのアクセスキー
az sql db export --admin-password ${db-admin-password} `
                 --admin-user ${db-admin-user} `
                 --name ${origin_db} `
                 --resource-group ${resource-group} `
                 --server ${myserver} `
                 --storage-key-type StorageAccessKey `
                 --storage-uri ${storage-uri} `
                 --storage-key ${storage-key}

ストレージ関係を省略化してみる(同じサブスクリプションを利用している前提)
storage-keyの取得key1取得する

#ストレージアカウント
${storage-acccount} = ""
#リソースグループ
${resource-group} = ""
#アクセスキーのリストからkey1取得する
az storage account keys list -g ${resource-group} -n ${storage-acccount} --query "[?keyName=='key1'].value|[0]"
'''
ストレージのアクセスキーが減って、ストレージのアカウント名が増えた。  

ストレージのURL(出力先のファイル名を含む)は、
blobサービスのエンドポイントとブロブのコンテナとフィル名の3つで構成されている。  
blobサービスのエンドポイント

'''
#URIのドメイン部分を取得
az storage account show -g ${resource-group} -n ${storage-acccount} --query "primaryEndpoints.blob"
#実行結果は結局:"https://${storage-acccount}.blob.core.windows.net/"
'''


'''
#SQLサーバ名
 ${myserver} =""
#SQLサーバの管理者名
${db-admin-user}=""
#SQLサーバの管理者パスワード
${db-admin-password} =""
#バックアップ元のDB名
${origin_db} =""

#リソースグループ名
${resource-group}=""

#バックアップ先(AzureStorage)
#アカウント
${storage-acccount}=""
#コンテナ
${container-name} =""
#バックアップ先のファイル名
${file} = ""


#ストレージのURL(出力先のファイル名を含む)
${Endpoint} = az storage account show -g ${resource-group} -n ${storage-acccount} --query "primaryEndpoints.blob"
${storage-uri} = ${Endpoint}+${container-name}+"/"+${file}
#ストレージのアクセスキー
${storage-key} = az storage account keys list -g ${resource-group} -n ${storage-acccount} --query "[?keyName=='key1'].value | [0]"


#DBバックアップ実行
az sql db export --admin-password ${db-admin-password} `
                 --admin-user ${db-admin-user} `
                 --name ${origin_db} `
                 --resource-group ${resource-group} `
                 --server ${myserver} `
                 --storage-key-type StorageAccessKey `
                 --storage-uri ${storage-uri} `
                 --storage-key ${storage-key}

Azure SQL Databaseのリストア:DBコピー

現在のDBのバックアップをとって、指定のDBをコピーして戻す。

利用目的

テスト環境をテスト前の状態に戻す

#データベース名
${origin_db} = "";
#元に戻したい状態のデータベース名
${base_db} = ""
#リソースグループ名
${resource-group} = "";
#サーバ名
${myserver} = "" 

${date_now} = Get-Date -Format "yyyyMMdd-HHmm"
${copy_db} = ${origin_db} + "_" + ${date_now}


#エラスティックプール名取得
${elastic-pool} = az sql db show --name ${origin_db}  --resource-group ${resource-group}  --server ${myserver} --query "{elasticPoolName: elasticPoolName}" -o tsv

#DBバックアップ
az sql db copy -g ${resource-group} -s ${myserver} -n ${origin_db} --dest-name ${copy_db} --elastic-pool ${elastic-pool}

#DB削除
az sql db delete -g ${resource-group} -s ${myserver} -n ${origin_db}

#DB特定に戻す。
az sql db copy -g ${resource-group} -s ${myserver} -n ${base_db} --dest-name ${origin_db} --elastic-pool ${elastic-pool}

DBのバックアップからの特定のDBに戻す

#データベース名
${origin_db} = "";
#元に戻したい状態のデータベース名
${base_db} = ""
#リソースグループ名
${resource-group} = "";
#サーバ名
${myserver} = "" 

${date_now} = Get-Date -Format "yyyyMMdd-HHmm"
${copy_db} = ${origin_db} + "_" + ${date_now}


#エラスティックプール名取得
${elastic-pool} = az sql db show --name ${origin_db}  --resource-group ${resource-group}  --server ${myserver} --query "{elasticPoolName: elasticPoolName}" -o tsv

#DBバックアップ
az sql db copy -g ${resource-group} -s ${myserver} -n ${origin_db} --dest-name ${copy_db} --elastic-pool ${elastic-pool}

#DB削除
az sql db delete -g ${resource-group} -s ${myserver} -n ${origin_db}

#DB特定に戻す。
az sql db copy -g ${resource-group} -s ${myserver} -n ${base_db} --dest-name ${origin_db} --elastic-pool ${elastic-pool}

Azure SQL Databaseのコピー

Azure SQL Databaseのコピー

エラスティックプール上のDatabaseを同じエラスティックプール上にコピーする。

データベースをコピーする。

#データベース名
${origin_db} = "";
#リソースグループ名
${resource-group} = "";
#サーバ名
${myserver} = "" 
#エラスティックプール名
${elastic-pool} = ""
#日時の取得
${date_now} = Get-Date -Format "yyyyMMdd-HHmm"
#日時付きの名前を作成
${copy_db} = ${origin_db} + "_" + ${date_now}


az sql db copy -g ${resource-group} -s ${myserver} -n ${origin_db} --dest-name ${copy_db} --elastic-pool ${elastic-pool}

databaseを特定するには

データベース名、リソースグループ名、サーバ名が3つが必要。

az sql db show --name
               --resource-group
               --server

エラスティックプール名を設定から取得できるといいなあ。

エラスティックプール名を取得する

az sql db show --name ${origin_db}  --resource-group ${resource-group}  -
-server ${myserver} --query "{elasticPoolName: elasticPoolName}" -o tsv

データベースをコピーする。(引数3つ)

#データベース名
${origin_db} = "";
#リソースグループ名
${resource-group} = "";
#サーバ名
${myserver} = "" 

${date_now} = Get-Date -Format "yyyyMMdd-HHmm"
${copy_db} = ${origin_db} + "_" + ${date_now}


#エラスティックプール名
${elastic-pool} = az sql db show --name ${origin_db}  --resource-group ${resource-group}  --server ${myserver} --query "{elasticPoolName: elasticPoolName}" -o tsv

az sql db copy -g ${resource-group} -s ${myserver} -n ${origin_db} --dest-name ${copy_db} --elastic-pool ${elastic-pool}

日時の取得

PowerShellで時間を取得したい

#2018/08/09 16:58:39
Get-Date -Format "yyyy/MM/dd HH:mm:ss"
#2018/08/09 04:58:45
Get-Date -Format "yyyy/MM/dd hh:mm:ss"

f:id:manabinjp:20180809170012p:plain

使い道

ファイルのバックアップ

ファイル名の後ろに日時を設定してコピーする

$origin = "わくわくリスト.txt";
$date_now = Get-Date -Format "yyyyMMdd-HHmm"
#拡張子の前の.の前に日付情報を挿入する
$copy = $origin.Substring(0, $origin.LastIndexOf('.')) + $date_now + $origin.Substring($origin.LastIndexOf('.') );
#コピー先のファイル名確認
Write-Host $copy
#コピー実施
Copy-Item $origin $copy