Наконец-то дошли руки самостоятельно испытать слияние двух чудо миров 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 общедоступного репозитория:
1 |
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add - |
Добавление репозитория Microsoft SQL Server 2017 Ubuntu:
1 |
sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/16.04/mssql-server-2017.list)" |
Если вы хотите попробовать SQL Server 2019, вместо этого необходимо добавить этот репозиторий:
1 |
sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/16.04/mssql-server-preview.list)" |
Установка:
1 2 |
sudo apt-get update sudo apt-get install -y mssql-server |
Выбор выпуска, языка и установка пароля системного Администратора:
1 2 |
sudo systemctl stop mssql-server sudo /opt/mssql/bin/mssql-conf setup |
Об использовании утилиты 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 и перезапуск службы (если она, конечно, была запущена):
1 2 |
sudo /opt/mssql/bin/mssql-conf set network.tcpport <new_tcp_port> sudo systemctl restart mssql-server |
Проверка запущена ли служба:
1 |
systemctl status mssql-server |
Или так:
1 |
netstat -tlnp | grep 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)”, иначе будет ошибка:
"Резервный набор данных содержит копию базы данных отличной от существующей"
Готово.
Итоговый запрос получился таким:
1 2 3 4 5 6 7 |
RESTORE DATABASE [TicketsTest] FROM DISK = N'C:\home\ivan\Tickets2008_26-01-2019_02-00-00.bak' WITH FILE = 1, MOVE N'Tickets' TO N'/var/opt/mssql/data/TicketsTest.mdf', MOVE N'Tickets_log' TO N'/var/opt/mssql/data/TicketsTest.ldf', NOUNLOAD, REPLACE, STATS = 10 |
UPDATE:
Позже я все-таки обновил SSMS (установил версию 17.9.1 (2017)), который уже, естественно, работает с Linux без глюков.
UPDATE 2:
Кстати, судя по всему, 1С до сих пор не поддерживает СУБД MS SQL Server на Linux’е. Цитата:
Особенности рабочих серверов под управлением Linux
- не могут взаимодействовать с СУБД Microsoft SQL Server
Жаль, хотел запилить сравнение PGSQL и MSSQL на Linux.
Здравствуйте! Я столкнулся с проблемой. Есть старое приложение, которое работало с базой MSDE через odbc. Собственно с течением времени MSDE установить ни на какой сервер уже не представлялось возможным, а единственный sqlexpress который принял файлы нашей базы – это был sqlexpress 2008. Недавно вся организация перешла на linux рабочие места. Приложение в wine заработало, но захотелось перенести и саму базу на линуксовый сервак. Т.К. sqlexpress 2017 который я вкорячил на ubuntu server ни в какую старые файлы mdf хавать не хотел, то я просто экспортировал базу по сети с вмнды на линукс SQL Managment Studio. Все вроде работает, клиенты подключаются, видят данные, но изменить, удалить, записать не могут. В чем может быть проблема? Очень нужна помощь.
Проблема решена. Сделал все по официальной инструкции 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”. Бэкап разворачивается. Все работает.
Спасибо за инфу, может еще кому пригодится.