SQL Server на Linux — установка и настройка с нуля

sql server на linux - установка

SQL Server прекрасно работает на Linux начиная с версии 2017, поддерживает Ubuntu, RHEL и SLES, устанавливается через пакетный менеджер за 10 минут и обеспечивает ту же производительность, что и на Windows. Для продакшена нужна лицензия Standard или Enterprise, для тестов подойдёт бесплатная Developer Edition.

Зачем SQL Server на Linux?

Странный вопрос, да? Продукт Microsoft на линуксе. Звучит как шутка из 2010-х. Но времена изменились, и изменились серьёзно.

Мой знакомый Олег, сисадмин со стажем 15 лет, когда первый раз услышал про SQL Server на Ubuntu — рассмеялся. А потом попробовал на своём Supermicro SuperServer. И затих. Потому что работает. Реально работает, без оговорок и костылей.

Причин запускать SQL Server на Linux несколько:

  • Не нужна лицензия Windows Server — экономия ощутимая
  • Контейнеризация через Docker и Kubernetes — линукс тут родная среда
  • Команда знает Linux лучше, чем Windows — бывает и такое
  • Инфраструктура уже на Linux, добавлять Windows-сервер не хочется
  • Производительность на одном железе сопоставимая, иногда даже чуть лучше

По факту, Microsoft сама активно продвигает этот вариант. Azure SQL Database внутри работает на варианте Linux. Вот в чём прикол — корпорация, которая десятилетиями продвигала Windows Server, теперь сама запускает свою СУБД на линуксе.

Какие дистрибутивы поддерживаются

Не все. Это важно знать заранее.

Для SQL Server 2022 официально поддерживаются:

  • Ubuntu 20.04, 22.04
  • Red Hat Enterprise Linux 8.x, 9.x
  • SUSE Linux Enterprise Server 15

Debian? Не поддерживается. Arch Linux? Даже не думайте. CentOS? Формально через RHEL-репозитории, но без гарантий. Если ваш дистрибутив не в списке — лучше не рисковать на проде.

Установка на Ubuntu 22.04

Короче, показываю на примере Ubuntu — самый популярный вариант. Весь процесс занимает минут десять, если интернет нормальный.

# Импортируем ключ репозитория Microsoft
# Без этого apt не будет доверять пакетам
curl https://packages.microsoft.com/keys/microsoft.asc | 
  sudo tee /etc/apt/trusted.gpg.d/microsoft.asc

# Добавляем репозиторий SQL Server 2022
sudo add-apt-repository 
  "$(curl https://packages.microsoft.com/config/ubuntu/22.04/mssql-server-2022.list)"

# Обновляем список пакетов и ставим SQL Server
sudo apt update
sudo apt install -y mssql-server

После установки пакета нужно запустить конфигурацию. Тут выбираете редакцию и задаёте пароль sa.

# Запускаем первоначальную настройку
# Выбираем редакцию и задаём пароль для sa
sudo /opt/mssql/bin/mssql-conf setup

# Проверяем что сервис запустился нормально
systemctl status mssql-server

На этапе выбора редакции система предложит варианты: Evaluation, Developer, Express, Web, Standard, Enterprise. Для тестов берите Developer — она бесплатная и без ограничений.

Пароль sa должен быть сложным: минимум 8 символов, заглавные и строчные буквы, цифры, спецсимволы. Иначе конфигурация не пройдёт и выдаст ошибку.

Установка инструментов командной строки

Тут такое дело — SQL Server Management Studio (SSMS) на Linux не работает. Это Windows-приложение. Но есть альтернативы, и они вполне рабочие.

# Ставим sqlcmd и bcp - утилиты командной строки
curl https://packages.microsoft.com/keys/microsoft.asc | 
  sudo tee /etc/apt/trusted.gpg.d/microsoft.asc

sudo add-apt-repository 
  "$(curl https://packages.microsoft.com/config/ubuntu/22.04/prod.list)"

sudo apt update
sudo apt install -y mssql-tools18 unixodbc-dev

# Добавляем в PATH чтобы sqlcmd был доступен отовсюду
echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc
source ~/.bashrc

Теперь можно подключиться к серверу:

# Подключаемся локально и проверяем версию
# Флаг -C нужен если используете самоподписанный сертификат
sqlcmd -S localhost -U sa -P 'ВашПароль' -C

-- Внутри sqlcmd выполняем запрос
SELECT @@VERSION;
GO

Кстати, Azure Data Studio — отличная кроссплатформенная альтернатива SSMS. Работает на Linux, macOS и Windows. Бесплатная, с поддержкой Jupyter notebooks для SQL. Мой знакомый Сергей, DBA в финтехе, полностью перешёл на неё на своём ThinkPad X1 Carbon с Ubuntu и говорит, что обратно на SSMS не хочет.

Базовая настройка после установки

Поставили — хорошо. Теперь настраиваем. Некоторые параметры критически важны для нормальной работы.

# Настраиваем лимит памяти через mssql-conf
# Не давайте SQL Server сожрать всю оперативку
sudo /opt/mssql/bin/mssql-conf set memory.memorylimitmb 4096

# Включаем Agent (нужен для scheduled jobs)
sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true

# Меняем порт если нужно (по умолчанию 1433)
sudo /opt/mssql/bin/mssql-conf set network.tcpport 1434

# После изменений перезапускаем сервис
sudo systemctl restart mssql-server

Ну и firewall не забудьте открыть. На Ubuntu с ufw это элементарно:

# Открываем порт 1433 для подключений
sudo ufw allow 1433/tcp

Что работает, а что нет

Если честно, большинство фич SQL Server на Linux работают идентично Windows-версии. Но есть исключения, и о них лучше знать заранее.

Работает на Linux:

  • Ядро движка базы данных — полностью
  • T-SQL — весь синтаксис без ограничений
  • Репликация — транзакционная и snapshot
  • Always On Availability Groups — да, на линуксе тоже
  • Full-text search — полнотекстовый поиск
  • SQL Server Agent — планировщик задач
  • In-Memory OLTP — таблицы в памяти

Не работает на Linux:

  • SSRS (Reporting Services) — только на Windows
  • SSAS (Analysis Services) — только на Windows
  • SSIS (Integration Services) — только на Windows
  • Machine Learning Services с R/Python — ограниченно
  • FileTable — не поддерживается
  • Stretch Database — не поддерживается

Грубо говоря, сам движок СУБД работает полностью, а вот satellite-сервисы типа отчётов и аналитики — пока только под Windows. Для большинства веб-приложений это вообще не проблема.

Docker — самый быстрый способ

Знаете что? Если вам нужен SQL Server для разработки или тестов, Docker — это вообще элементарно.

# Одна команда - и сервер готов через 30 секунд
docker run -e "ACCEPT_EULA=Y" 
  -e "MSSQL_SA_PASSWORD=Str0ng!Pass#2024" 
  -e "MSSQL_PID=Developer" 
  -p 1433:1433 
  --name sqlserver 
  -v sqldata:/var/opt/mssql 
  -d mcr.microsoft.com/mssql/server:2022-latest

Volume sqldata нужен, чтобы данные сохранялись при перезапуске контейнера. Без него после docker rm все базы пропадут (а это неприятный сюрприз в пятницу вечером).

Производительность: Linux vs Windows

Вопрос, который задают все. Ответ — сопоставимая. Microsoft провела кучу бенчмарков, и разница в пределах 2-3% в обе стороны в зависимости от типа нагрузки.

На OLTP-нагрузках Linux иногда чуть быстрее из-за меньшего overhead ядра ОС. На аналитических запросах с большими сканами — примерно одинаково. Разница настолько мала, что выбирать ОС нужно по другим критериям: компетенции команды, инфраструктура, стоимость лицензий.

А ещё лицензия для продакшена нужна в любом случае — Standard или Enterprise. Если ищете где купить, загляните на keytrust24.store. На Linux экономите только на лицензии Windows Server, а за SQL Server платите одинаково на обеих платформах.

Безопасность на Linux

Кстати, про безопасность. SQL Server на Linux работает под отдельным пользователем mssql, а не под root. Это правильный подход — даже если кто-то найдёт уязвимость в SQL Server, доступ к системе будет ограничен.

Несколько важных моментов:

  • TLS-шифрование для подключений — настраивается через mssql-conf, рекомендуется включить сразу
  • Transparent Data Encryption (TDE) — шифрование данных на диске, работает так же как на Windows
  • Пароль sa должен быть сложным — SQL Server на Linux строже проверяет парольную политику
  • SELinux на RHEL — SQL Server поддерживает работу с включённым SELinux
# Настраиваем TLS-сертификат для шифрования соединений
# Подставьте свои пути к сертификату и ключу
sudo /opt/mssql/bin/mssql-conf set network.tlscert /etc/ssl/certs/mssql.pem
sudo /opt/mssql/bin/mssql-conf set network.tlskey /etc/ssl/private/mssql.key
sudo /opt/mssql/bin/mssql-conf set network.forceencryption 1
sudo systemctl restart mssql-server

Бэкапы на Linux

Бэкапы работают стандартно через T-SQL. Единственное отличие — пути файловой системы.

-- Бэкап базы на линуксе
-- Обратите внимание на прямые слеши вместо обратных
BACKUP DATABASE MyDatabase
TO DISK = '/var/opt/mssql/backup/mydb.bak'
WITH COMPRESSION, STATS = 10;

-- Автоматический бэкап через cron (вместо Task Scheduler)
-- Добавляем в crontab: crontab -e
-- 0 2 * * * /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P 'Pass' -C -Q "BACKUP DATABASE MyDB TO DISK='/backup/mydb_$(date +%Y%m%d).bak' WITH COMPRESSION"

Мониторинг SQL Server на Linux

На Windows для мониторинга SQL Server используют Performance Monitor и Dynamic Management Views. На Linux Performance Monitor нет, но DMV работают точно так же. А ещё есть стандартные linux-инструменты.

# Смотрим потребление ресурсов процессом SQL Server
top -p $(pgrep sqlservr)

# Проверяем, сколько памяти ест SQL Server
ps aux | grep sqlservr

# Мониторим дисковую активность
iostat -x 1

Для полноценного мониторинга в продакшене используйте Grafana + Telegraf. Telegraf умеет собирать метрики из SQL Server через DMV, а Grafana красиво их визуализирует. По факту это стандарт мониторинга для SQL Server на Linux в серьёзных инфраструктурах.

Кстати, если вы переезжаете с Windows на Linux, базы данных можно перенести через бэкап и восстановление. Делаете BACKUP DATABASE на Windows, копируете .bak файл на Linux-сервер, делаете RESTORE DATABASE. Пути файлов поменяются (с C:Data на /var/opt/mssql/data/), но данные перенесутся полностью. Мой знакомый DBA Алексей мигрировал базу на 500 ГБ с Windows Server 2019 на Ubuntu 22.04 — весь процесс занял около часа, включая проверку целостности данных.

Итого

SQL Server на Linux — это не эксперимент и не игрушка. Это полноценный production-ready вариант, который используют тысячи компаний по всему миру. Устанавливается за 10 минут, настраивается стандартными linux-инструментами, работает с той же производительностью. Если ваша инфраструктура на Linux — нет причин тащить Windows Server только ради SQL Server.