Проблема
У клиента есть приложение node.js на Ubuntu Linux, развернутое в Azure. Приложение использует SQL-базу, также размещенную в Azure.
Задача - выгрузить базу данных и приложение для того, чтобы организовать отладочную среду.
Задача несколько осложняется тем, что на сервере базы данных настроен firewall, ограничивающий доступ к базе с единственного хоста. Настроить firewall возможности нет.
Доступ к хосту на котором крутится приложение есть.
Экспорт-Импорт базы данных SQL из Azure
Для того, чтобы я смог подключиться к SQL-серверу с хоста не разрешенного в firewall, пришлось на хосте с приложением установить haproxy и настроить tcp-proxy до SQL-сервера в Azure:
frontend tcp-in-mssql bind :1433 mode tcp use_backend mssql backend mssql mode tcp server mssqlserver clientname.database.windows.net:1433 check
Теперь я смог подключиться к SQL-серверру в Azure, указав в качестве адреса SQL-сервера адрес хоста с приложением.
Для того, чтобы экспортировать базу нужно:
- Создать на локальном SQL-сервере пустую базу данных.
- Кликнуть правой кнопкой по пустой базе и выбрать Tasks → Import Data…
- В качестве Data Source выбрать .Net Framework Data Provider for SqlServer, а в поле Data → Connection String написать такое:
Data Source=app.hostname.com;Initial Catalog=Web_db;User ID=user;Password=*********;
и нажать Next>
- В качестве Destination выбрать .Net Framework Data Provider for SqlServer, и заполнить поле Data → Connection String аналогично, указав данные локального сервера:
Data Source=localsqlhost;Initial Catalog=Web_db;
и, если используется интегрированная аутентификация, укажем ее тип:
Authentication="Active Directory Integrated";
или логин/пароль в случае SQL-аутентификации. Также, возможно, понадобится выставить Security→TrustServerCertificate = True. Жмем Next.
- Дальше выбираем Copy Data from one or more tables or views
- Выбираем все объекты БД, жмем Next, ставим галочку Run immidiatelly → Next → Finish!.
Discussion