Как автоматизировать создание резервной копии, загрузить резервную копию и восстановить резервную копию postgres в Windows 10? - PullRequest
0 голосов
/ 10 июля 2019

Чтобы автоматически получить последнюю производственную базу данных на моем локальном компьютере с Windows, я хочу автоматизировать этот процесс с помощью следующих команд:

1 - Создать резервную копию

curl -H "Username: sian@kurt.com" -H "ApiKey: 2c299965-2458-4708-908c-37519859e139" --data-raw '{"Comment" :  "SK"} https://deploy.x.com/api/1/apps/hdibb/environments/Production/snapshots -X POST > RES_CreateBackup.json

Результат в следующем ответе массива, где мне нужно захватить идентификатор объекта object.snapshot для самого последнего snahshopID (который будет использоваться во 2-й команде); 20a105e1-d8b3-4b0e-822a-6fcecfa8e67c

[{
  "SnapshotID": "20a105e1-d8b3-4b0e-822a-6fcecfa8e67c",
  "Comment": "Manually created snapshot via API",
  "State": "Completed",
  "ExpiresOn": 1570697660000,
  "CreatedOn": 1562748860000,
  "ModelVersion": "0.0.1.812"
},{
  "SnapshotID": "ecbd5a14-5a4a-43d2-9e59-4d6eae94c568",
  "Comment": "Automatically created nightly snapshot",
  "State": "Completed",
  "ExpiresOn": 1563930109000,
  "CreatedOn": 1562720509000,
  "ModelVersion": "0.0.1.812"
},{
  "SnapshotID": "f6bf15dc-0f7a-483a-b1f1-dc957de921b8",
  "Comment": "SK",
  "State": "Completed",
  "ExpiresOn": 1570599876000,
  "CreatedOn": 1562651076000,
  "ModelVersion": "0.0.1.812"
....

2 - Получить резервную копию URL

curl -H "Username: si@kurt.nl" -H "ApiKey: 2c299965-2458-4708-908c-37519859e139" https://deploy.x.com/api/1/apps/hdibb/environments/Production/snapshots/20a105e1-d8b3-4b0e-822a-6fcecfa8e67c -X GET > RES_GetBackup.json

В результате получается следующий URL-адрес для загрузки файла резервной копии, откуда мне нужны только файлы для 3-й команды;

{
  "FilesOnly": "https://schnapps-prod-2-eu-central-1.mendix.com/v1/service_instances/a9510a6c-25e3-4f22-ab42-9ffc71e6a352/snapshots/f6bf15dc-0f7a-483a-b1f1-dc957de921b8/download?content=files_only&expire=20190709055628&signature=6AE5E5BC1D870C79C3373F309F6F9EA3E541C337F0FF26D7A591A231713F3DC4D4F0C51FCFCFF88FA4D1263307A7DE7E",
  "DatabaseOnly": "https://schnapps-prod-2-eu-central-1.mendix.com/v1/service_instances/a9510a6c-25e3-4f22-ab42-9ffc71e6a352/snapshots/f6bf15dc-0f7a-483a-b1f1-dc957de921b8/download?content=database_only&expire=20190709055628&signatA7C9D3014D2D2E582FBFA90ED85884F15648241F42",
  "DatabaseAndFiles": "https://schnapps-prod-2-eu-central-1.mendix.com/v1/service_instances/a9510a6c-25e3-4f22-ab42-9ffc71e6a352/snapshots/f6bf15dc-0f7a-483a-b1f1-dc957de921b8/download?content=files_and_database&expire=20190709055628&signature=A5CAF4422A6A3BFE1CB3B0DCF7C930954F1D992D3D756F5EA396752D0F37CDEBF659DD5CEDC4FFA8AB3D86BD89C22BE23F3391A5AAEA21102BB6DDDD6BE89765CF51597F8E7F700E1554170F82ED35ED0BA3AE70A13C3FB84356592AD5B6F53B743"
}

3 - Загрузить резервную копию файла с URL ... ???? Я пока не знаю, как это сделать в cmd ... ??

4 - Восстановите резервную копию postgres, создав новую базу данных, а затем восстановите ее там

createdb -h localhost -p 5433 -U postgres OC_P_1007
cd C:\Program Files\PostgreSQL\11
pg_restore -h localhost -p 5433 -U postgres -d testdb2 C:\Users\SK\Downloads\1007.db

Мой вопрос:

1 - Как я могу автоматизировать команды, указав последующие команды с вводом из предыдущей команды (например, идентификатор снимка и ссылка для скачивания)?

2 - Как загрузить файл резервной копии с URL-адреса в команде?

3 - Как я могу настроить это так, чтобы оно выполнялось ежедневно в 9 часов без каких-либо ручных действий?

4 - Какой язык программирования / написания сценариев вы бы посоветовали как самый простой в настройке?

1 Ответ

0 голосов
/ 10 июля 2019

Ваши вопросы не ограничиваются одной конкретной проблемой, поэтому я предложу этот непроверенный пример в ответ на вопросы 1 и 2:

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion

Set "NAME=sian@kurt.com"
Set "APIK=2c299965-2458-4708-908c-37519859e139"
Set "BURL=https://deploy.x.com/api/1/apps/hdibb/environments/Production/snapshots"

For /F Tokens^=4Delims^=^" %%A In (
    'Curl -H "Username: %NAME%" -H "ApiKey: %APIC%" --data-raw "{\"Comment\":\"SK\"}" %BURL% -X POST 2^>NUL^|FindStr /I "\"SnapshotID\""'
)Do For /F Tokens^=4Delims^=^" %%B In (
    'Curl -H "Username: %NAME%" -H "ApiKey: %APIC%" %BURL%/%%A -X GET 2^>NUL^|FindStr /I "\"FilesOnly\""'
)Do Echo Downloading latest snapshot from %%B . . .&GoTo Next
:Next
Pause
GoTo :EOF

Обратите внимание, что я изменил параметр --data-raw в 'создать резервную копию', потому что вы, похоже, использовали одну одинарную кавычку, вместо двух , но у меня есть ощущение, что двойные кавычки работают лучше! Не стесняйтесь корректировать это цитирование, если оно не работает должным образом, и не забывайте проверять / корректировать строки 4, 5 и 6 тоже.

Пока я просто Echo указываю URL-адрес загрузки в окне консоли, как только вы определились со способом загрузки, смело заменяйте Echo Downloading latest snapshot from %%B . . . командой загрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...