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-latestVolume 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.



