Установка MS SQL Server 2017 на Debian 9/Ubuntu 18.04 и восстановление из бэкапа

Наконец-то дошли руки самостоятельно испытать слияние двух чудо миров Microsoft и Linux в виде установки СУБД SQL Server 2017 на Debian 9.

Как написано в статье по ссылке, в SQL Server 2017 используется одно и то же ядро СУБД на всех поддерживаемых платформах, включая Linux. Тем не менее некоторые функции в настоящее время не поддерживаются в Linux (неподдерживаемые функции и службы, а также известные проблемы).

Также, довольно информативна страница часто задаваемых вопросов (FAQ).

Список платформ Linux, официально поддерживающиеся на данный момент:

  • Red Hat Enterprise Linux 7.3 или 7.4
  • SUSE Linux Enterprise Server до версии 12 с пакетом обновления 2
  • Ubuntu 16.04
  • Подсистема docker 1.8+

Установка СУБД на Debian 9

Написаны рекомендации по производительности и конфигурации для SQL Server в Linux.

Импорт ключей GPG общедоступного репозитория:

Добавление репозитория Microsoft SQL Server 2017 Ubuntu:

Если вы хотите попробовать SQL Server 2019, вместо этого необходимо добавить этот репозиторий:

Установка:

Выбор выпуска, языка и установка пароля системного Администратора:

Об использовании утилиты mssql-conf  для конфигурации SQL Server в Linux написано тут.

Доступные выпуски SQL Server:
1) Evaluation (бесплатный, без прав на использование в рабочем окружении, 180-дневное ограничение)
2) Developer (бесплатный, без прав на использование в рабочем окружении)
3) Express (бесплатная)
4) Web (платный)
5) Standard (платный)
6) Enterprise (платный)
7) Enterprise Core (платный)
8) У меня есть лицензия, купленная через канал розничных продаж, и ключ продукта для ввода.

Изменение номера прослушиваемого TCP-порта со стандартного 1433 и перезапуск службы (если она, конечно, была запущена):

Проверка запущена ли служба:

Или так:

По поводу разрешений на файлы SQL Server:
Все файлы в /var/opt/mssql  должен принадлежать пользователю mssql из одноименной группы mssql, которые, в свою очередь, должны иметь разрешения на чтение и запись всех файлов и каталогов. Обратите внимание, следующих особых сценариев, включающих разрешений файлов и каталогов:
* Для подключенных сетевых ресурсов, которые используются для хранения файлов SQL Server, требуются разрешения владельца mssql.
* Если файлы базы данных или резервных копий находятся в каталоге не по-умолчанию, необходимо также задать разрешения для этого каталога.
* Если значение umask было изменено со значения по-умолчанию 0022, то произойдет сбой при настройке SQL Server после установки. Необходимо вручную применить нужные разрешения для стартовой учетной записи SQL Server.


Создание и восстановление БД из бэкапа

Тут можно пойти, почти как всегда, несколькими путями:
1) использовать родную консоль Linux, вот пример
2) использовать новый Azure Data Studio (Предварительная версия) на Linux — это кросс платформенное средство управления SQL Server, по типу SQL Server Management Studio
2) использовать старый, добрый SQL Server Management Studio

По сложившейся привычке использования продуктов Microsoft на Windows, я запустил свой SSMS 10.50.4000.0 от SQL Server 2008 R2. Т.к. версия у него, мягко говоря, не самая новая, то в работе с Linux периодически вылазили нелепые ошибки.

Создание БД
При создание новой БД нужно подправить путь сохранения файлов базы (убрать имена самих файлов, сгенерированных автоматически):

Восстановление БД из бэкапа
В любом случае нужно наш файл .bak загрузить на сервер, т.к. SSMS не умеет работать с файлами по сети, ну и не надо. Делаем mount сетевой шары, загружаем по FTP или еще как-нибудь.

Чтобы избежать ошибку:
"Не удалось получить монопольный доступ, так как база данных используется."
Устанавливаем монопольный режим у БД:
ПКМ на нашей БД => Свойства => Вкладка Параметры => внизу параметр "Ограничение доступа" установить в "SINGLE_USER"

Непосредственно восстановление
ПКМ на нашей БД => Задачи => Восстановить => База данных

Настраиваем параметры:

1) В базу данных <ИМЯ_БД>
2) С устройства => Добавить. И тут будет ошибочка:

Опять кривая работа со структурой разделов Linux. Нажимаем ОК и видим, что винда прилепила корневым разделом свой любимый “диск C:”. Ну, ничего, переживем как-нибудь. Находим свой файл бэкапа и вперед.


3) Не забываем установить галочку на добавленном “устройстве” в списке.
4) На вкладке Параметры корректируем имена файлов (удаляем лишнее)
5) Ставим галку “Перезаписать существующую БД (WITH REPLACE)”, иначе будет ошибка:
"Резервный набор данных содержит копию базы данных отличной от существующей"

Готово.

Итоговый запрос получился таким:

 

UPDATE:

Позже я все-таки обновил SSMS (установил версию 17.9.1 (2017)), который уже, естественно, работает с Linux без глюков.

 

UPDATE 2:

Кстати, судя по всему, 1С до сих пор не поддерживает СУБД MS SQL Server на Linux’е. Цитата:

Особенности рабочих серверов под управлением Linux

Жаль, хотел запилить сравнение PGSQL и MSSQL на Linux.

 

4 thoughts on “Установка MS SQL Server 2017 на Debian 9/Ubuntu 18.04 и восстановление из бэкапа

  1. Здравствуйте! Я столкнулся с проблемой. Есть старое приложение, которое работало с базой MSDE через odbc. Собственно с течением времени MSDE установить ни на какой сервер уже не представлялось возможным, а единственный sqlexpress который принял файлы нашей базы – это был sqlexpress 2008. Недавно вся организация перешла на linux рабочие места. Приложение в wine заработало, но захотелось перенести и саму базу на линуксовый сервак. Т.К. sqlexpress 2017 который я вкорячил на ubuntu server ни в какую старые файлы mdf хавать не хотел, то я просто экспортировал базу по сети с вмнды на линукс SQL Managment Studio. Все вроде работает, клиенты подключаются, видят данные, но изменить, удалить, записать не могут. В чем может быть проблема? Очень нужна помощь.

  2. Проблема решена. Сделал все по официальной инструкции microsoft по миграции. На сервере с 2008 express”ом делаю бэкап. На ubuntu 18.04 lts устанавливаю sqlexpress 2019. На этом сервере создаю папку /var/opt/mssql/backup, назначаю ее владельцем mssql:mssql, копирую сам бэкап, файлы mdf и ldf. Пытаюсь восстановить получаю ошибки. Сначала ругается на отсутствие файлов – меняем пути со стандартных виндовых на /var/opt/mssql/backup, потом ругается на права доступа к файлу mdf. Меняем владельца этого файла и журнала на mssql:mssql и даем права 666 на эти файлы. На вкладке опции ставлю флажок восстановить с перезаписью базы и флажок “переместить файлы в /var/opt/mssql/data”. Бэкап разворачивается. Все работает.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *