Как стать автором
Обновить

Установка MS SQL Server на Linux

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров8.2K

В этой статье я научу вас устанавливать Microsoft SQL Server 2022 на Linux и мы развернем тестовую базу данных от Microsoft в операционной системе Linux.

Мы будем использовать пакетным менеджером Yum для Linux дистрибутивов: RedHat (RHEL), CentOS, Scientific Linux и DPKG (Debian Package) – система управления пакетами в Debian и дистрибутивах на его основе, например Ubuntu и набирающем популярность Astra Linux, в связи с импортозамещением. Поэтому команды я приведу для обоих пакетных менеджеров. Так же рассмотрим универсальный способ запуска через Docker.

Microsoft SQL Server — система управления реляционными базами данных (СУБД), разработанная корпорацией Microsoft. Основной используемый язык запросов (диалект SQL) — Transact-SQL (T-SQL).

Для взаимодействия с СУБД MS SQL Server используются 2 основных способа:
1. Служебная программа sqlcmd
2. Microsoft SQL Server Management Studio (SSMS)

Конечно вы можете использовать привычный для вас DBeaver или DataGrip или любой другой инструмент администрирования базы данных.

Оглавление:

  1. Выбор выпуска

  2. Запуск MS SQL Server через Docker

  3. Установка MS SQL Server на Ubuntu 20.04.6 LTS (Debian, Astra Linux)

  4. Установка MS SQL Server на Oracle Linux Server 8.7 (RedHat (RHEL), CentOS)

  5. Служебная программа sqlcmd

  6. Microsoft SQL Server Management Studio (SSMS)

  7. Работа со службой  Database Engine

  8. SQL команды для подробной информации о сервере

  9. Full-Text Search

  10. Простой пример развертывания БД для Linux

  11. Развертывание тестовой БД Microsoft для Linux

Выбор выпуска

Выпуски SQL Server имеют бесплатные лицензии: Evaluation, Developer и Express.

  1. Express является бесплатной для использования редакцией. Функционал довольно ограничен, самое ощутимое ограничение экспресс версии — максимальный размер базы 10 ГБ. Эта редакция подойдет для небольших проектов, например, студенческих работ или для обучения SQL/T-SQL.

  2. Developer редакция так же как и Enterprise не имеет никаких ограничений и её можно использовать бесплатно, но она может использоваться только для разработки и тестирования приложений.

  3. Web редакция почти ничем не отличается от standard, кроме как более сильными ограничениями в функционале и соответственно более низкой стоимости лицензирования;

  4. Standard это полноценная платная редакция, но многих функций всё еще нет. Максимальный объём оперативной памяти, который сможет использовать SQL Server – 128 ГБ, также отсутствуют группы доступности AlwaysOn и другие компоненты. Standard предназначен для приложений в небольших организациях.

  5. Evaluation — ознакомительная редакция SQL Server, которая предоставляет полный функционал Enterprise и работает в течении 180 дней (может быть обновлена до полноценной версии).

  6. Enterprise включает в себя все возможные функции и компоненты, никаких ограничений нет. Корпоративная редакция обычно используется крупными корпорациями или компаниями, которым необходим функционал этой версии.

SQL Server Developer — идеальный выбор для людей, которые создают и тестируют приложения.

Подробнее: https://learn.microsoft.com/ru-ru/sql/sql-server/editions-and-components-of-sql-server-2022?view=sql-server-ver16

Запуск MS SQL Server через Docker

# Извлечь образ, при необходимости, и запустить контейнер c MS SQL Server на порту 1433 и именем контейнера mssql1
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=strongPassword123" -p 1433:1433 --name mssql1 -d mcr.microsoft.com/mssql/server:2022-latest

# Вывести список всех контейнеров
docker ps -a

# Служебная программа sqlcmd позволяет вводить инструкции Transact-SQL
docker exec -it mssql1 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P strongPassword123

# Удалить созданный вами контейнер
docker rm mssql1 -f

Подробнее:

  1. https://learn.microsoft.com/ru-ru/sql/linux/sql-server-linux-docker-container-deployment?view=sql-server-ver15&pivots=cs1-bash

  2. https://hub.docker.com/_/microsoft-mssql-server

Установка MS SQL Server на Ubuntu 20.04.6 LTS (Debian, Astra Linux)

Подробнее: https://learn.microsoft.com/ru-ru/sql/linux/quickstart-install-connect-ubuntu?view=sql-server-ver16

wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/20.04/mssql-server-2022.list)"
sudo apt-get update
sudo apt-get install -y mssql-server
sudo /opt/mssql/bin/mssql-conf setup
systemctl status mssql-server

Открыть порты

# Восстановление настроек по умолчанию
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Разрешаем подключение
sudo ufw allow 1433
# активировать UFW
sudo ufw enable

# Дополнительно:
# диапазоны портов и протокол
sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udp

Подробнее:

  1. https://learn.microsoft.com/ru-ru/sql/linux/quickstart-install-connect-red-hat?view=sql-server-ver16

Установка MS SQL Server на Oracle Linux Server 8.7 (RedHat (RHEL), CentOS)

sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/8/mssql-server-2022.repo
sudo yum install -y mssql-server
sudo /opt/mssql/bin/mssql-conf setup
systemctl status mssql-server

Открыть порты

sudo firewall-cmd --zone=public --add-port=1433/tcp --permanent
sudo firewall-cmd --reload

Служебная программа sqlcmd

Для работы программы sqlcmd требуется установка ODBC Driver for SQL Server, подводным камнем тут является то, что нам нужна именно 17 версия для работы с Microsoft SQL Server 2022 (RTM-CU4) (KB5026717).

1) Для работы из-под Windows 10 из Windows Terminal (PowerShell)

Download ODBC Driver for SQL Server

2) RHEL 8

sudo curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/8/prod.repo
sudo yum remove unixODBC-utf16 unixODBC-utf16-devel
sudo yum install -y mssql-tools unixODBC-devel
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc

3) Ubuntu 20.04

sudo apt-get update
sudo apt install curl
curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list | sudo tee /etc/apt/sources.list.d/msprod.list
sudo apt-get update
sudo apt-get install mssql-tools unixodbc-dev
sudo apt-get update
sudo apt-get install mssql-tools
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc

Локальное подключение

sqlcmd -S localhost -U sa -P strongPassword123

# Выход из приглашения команды sqlcmd
QUIT

Подробнее:

  1. https://learn.microsoft.com/ru-ru/sql/tools/sqlcmd/sqlcmd-utility?view=sql-server-ver16

Microsoft SQL Server Management Studio (SSMS)

SQL Server Management Studio (SSMS) — это интегрированная среда для управления любой инфраструктурой SQL.

Скачивание SQL Server Management Studio (SSMS)

Работа со службой  Database Engine

#Проверьте состояние службы Database Engine
sudo systemctl status mssql-server
 
#Остановить, запустить или перезапустить службу Database Engine
sudo systemctl stop mssql-server
sudo systemctl start mssql-server
sudo systemctl restart mssql-server

SQL команды для подробной информации о сервере

SELECT Name from sys.databases;
SELECT @@VERSION as Version
SELECT SERVERPROPERTY('ServerName') as 'Container ID'
SELECT SERVERPROPERTY('Edition') as Edition
SELECT CURRENT_USER; 
GO

Full-Text Search on Linux

Полнотекстовый поиск позволяет выполнять полнотекстовые запросы к символьным данным в таблицах SQL Server. Это позволит нам выполнить загрузку данных из .csv файлов в БД.

RHEL

sudo yum install -y mssql-server-fts
sudo yum check-update
sudo yum update mssql-server-fts

Ubuntu

sudo apt-get update 
sudo apt-get install -y mssql-server-fts

Подробнее: Install SQL Server Full-Text Search on Linux

Простой пример развертывания БД для Linux

Это упрощенный пример создания тестовой базы данных от Microsoft.

Этот пример нужен для самостоятельной корректировки SQL-скриптов создания тестовой БД Microsoft на Linux.

Воспроизвести работу примера:

  1. Установить Full-Text Search

  2. Создать sql-скрипты описанные ниже

  3. Перенести SQL файлы на сервер (например через MobaXTerm)

  4. Настроить права доступа для пользователя и группы

  5. Выполнить скрипты в порядке их следования

Команды Linux (для новичков):

# Создаем папку TestMe в директории вашего пользователя - мой пользователь: admin
# /home/admin/
mkdir TestMe
# Загружаем файлы на сервер через ftp встроенный в MobaXTerm
# просто выделив их и перенеся в директорию вашего пользователя 
# Переключаемся на root (суперпользователя)
sudo su
cd /var
mkdir sqlbackup
cd sqlbackup
mkdir TestMe
# переносим файлы в директорию TestMe - cp /home/admin/TestMe/* /var/sqlbackup/TestMe
chown mssql -R sqlbackup/
chgrp mssql -R sqlbackup/

Запуск sql скриптов через sqlcmd при подключении к удаленному серверу по SSH через MobaXTerm

sqlcmd -S localhost -U SA -P strongPassword123 -i /var/sqlbackup/TestMe/ddl.sql

Сами тестовые данные - AddressType.csv

1       Billing {B84F78B1-4EFE-4A0E-8CB7-70E9F112F886}  2008-04-30 00:00:00
2       Home    {41BC2FF6-F0FC-475F-8EB9-CEC0805AA0F2}  2008-04-30 00:00:00
3       Main Office     {8EEEC28C-07A2-4FB9-AD0A-42D4A0BBC575}  2008-04-30 00:00:00
4       Primary {24CB3088-4345-47C4-86C5-17B535133D1E}  2008-04-30 00:00:00
5       Shipping        {B29DA3F8-19A3-47DA-9DAA-15C84F4A83A5}  2008-04-30 00:00:00
6       Archive {A67F238A-5BA2-444B-966C-0467ED9C427F}  2008-04-30 00:00:00

Файл

Описание

ddl.sql

Удаляет БД, если ранее она была создана

Создает БД

Создает таблицу

insert.sql

Вставляет в таблицу данные

select.sql

Делает выборку данных из таблицы

delete.sql

Удаляет все записи из таблицы

ddl.sql

:setvar SqlSamplesSourceDataPath "/var/sqlbackup/TestMe/data/"
:setvar DatabaseName "TestMe"


IF '$(SqlSamplesSourceDataPath)' IS NULL OR '$(SqlSamplesSourceDataPath)' = ''
BEGIN
        RAISERROR(N'The variable SqlSamplesSourceDataPath must be defined.', 16, 127) WITH NOWAIT
        RETURN
END;


SET NOCOUNT OFF;
GO

PRINT CONVERT(varchar(1000), @@VERSION);
GO

PRINT '';
PRINT 'Started - ' + CONVERT(varchar, GETDATE(), 121);
GO

USE [master];
GO
-- ****************************************
-- Drop Database
-- ****************************************
PRINT '';
PRINT '*** Dropping Database';
GO

IF EXISTS (SELECT [name] FROM [master].[sys].[databases] WHERE [name] = N'$(DatabaseName)')
    DROP DATABASE $(DatabaseName);

-- If the database has any other open connections close the network connection.
IF @@ERROR = 3702
    RAISERROR('$(DatabaseName) database cannot be dropped because there are still other open connections', 127, 127) WITH NOWAIT, LOG;
GO


-- ****************************************
-- Create Database
-- ****************************************
PRINT '';
PRINT '*** Creating Database';
GO

CREATE DATABASE $(DatabaseName);
GO

PRINT '';
PRINT '*** Checking for $(DatabaseName) Database';
/* CHECK FOR DATABASE IF IT DOESN'T EXISTS, DO NOT RUN THE REST OF THE SCRIPT */
IF NOT EXISTS (SELECT TOP 1 1 FROM sys.databases WHERE name = N'$(DatabaseName)')
BEGIN
PRINT '*******************************************************************************************************************************************************************'
+char(10)+'********$(DatabaseName) Database does not exist.  Make sure that the script is being run in SQLCMD mode and that the variables have been correctly set.*********'
+char(10)+'*******************************************************************************************************************************************************************';
SET NOEXEC ON;
END
GO

ALTER DATABASE $(DatabaseName)
SET RECOVERY SIMPLE,
    ANSI_NULLS ON,
    ANSI_PADDING ON,
    ANSI_WARNINGS ON,
    ARITHABORT ON,
    CONCAT_NULL_YIELDS_NULL ON,
    QUOTED_IDENTIFIER ON,
    NUMERIC_ROUNDABORT OFF,
    PAGE_VERIFY CHECKSUM,
    ALLOW_SNAPSHOT_ISOLATION OFF;
GO

USE $(DatabaseName);
GO

CREATE TYPE [Name] FROM nvarchar(50) NULL;
GO

CREATE TABLE [Person].[AddressType](
    [AddressTypeID] [int] IDENTITY (1, 1) NOT NULL,
    [Name] [Name] NOT NULL,
    [rowguid] uniqueidentifier ROWGUIDCOL NOT NULL CONSTRAINT [DF_AddressType_rowguid] DEFAULT (NEWID()),
    [ModifiedDate] [datetime] NOT NULL CONSTRAINT [DF_AddressType_ModifiedDate] DEFAULT (GETDATE())
) ON [PRIMARY];
GO

insert.sql

USE [TestMe];
GO

BULK INSERT [Person].[AddressType] FROM '/var/sqlbackup/AdventureWorks/AddressType.csv'
WITH (
    CHECK_CONSTRAINTS,
    DATAFILETYPE = 'char',
    FIELDTERMINATOR= '\t',
    ROWTERMINATOR = '\n',
    KEEPIDENTITY,
    TABLOCK
);
GO

SELECT * FROM [PERSON].[AddressType];
GO

select.sql

USE [TestMe];
GO

SELECT * FROM [PERSON].[AddressType];
GO

delete.sql

USE [TestMe];
GO

DELETE FROM [Person].[AddressType];
GO

SELECT * FROM [Person].[AddressType];
GO

Развертывание тестовой БД Microsoft для Linux

Создадим на сервере Linux директорию /var/sqlbackup/AdventureWorks

SQL samples -> GitHub Repository -> adventure-works -> oltp-install-script

Нам нужен пункт: To install AdventureWorks

Из него скачиваем zip архив с данными и sql скриптом для расскатки БД.

Разархивируем zip

Отредактируем файл instawdb.sql

...
:setvar SqlSamplesSourceDataPath "/var/sqlbackup/AdventureWorks/"
...
:setvar DatabaseName "AdventureWorks"

Удаляем все строчки с: CODEPAGE='ACP', в instawdb.sql

ACP это ANSI, а Linux использует UTF-8, а UTF-8 это расширенный ANSI, а кодовые страницы в Linux не используются, поэтому убрав строки всё будет работать

После переносим .csv данные и единственный sql-скрипт в /var/sqlbackup/AdventureWorks на нашем сервере Linux

Выполняем sql-скрипт

sqlcmd -S localhost -U SA -P strongPassword123 -i /var/sqlbackup/AdventureWorks/instawdb.sql

Теперь у вас есть тестовая база данных =)

Теги:
Хабы:
+13
Комментарии10

Публикации

Истории

Ближайшие события

AdIndex City Conference 2024
Дата26 июня
Время09:30
Место
Москва
Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область