SQL Server на Apple Silicon

Лестница.

Эта запись — небольшой гайд, как пройти курс по базам данных факультета КНиИТ СГУ на MacBook с Apple Silicon. Да, это возможно, но с одной загвоздкой.

В чём же загвоздка? В том, что Microsoft SQL Server на данный момент невозможно поднять на MacBook с Apple Silicon. Поэтому вместо него мы рассмотрим работу c Azure SQL Edge. Да, между ними есть отличия, но будем считать их недостижимыми для нас.

Для работы с Azure SQL Edge поднимем базу данных в Docker контейнере, и будем взаимодействовать с ней из DataGrip.

Шаг 1. Установка Docker.

Docker — это инструмент для запуска изолированных контейнеров, что-то вроде виртуальной машины. Мы хотим запустить нашу базу данных именно внутри контейнера, чтобы сделать её независимой от всего остального, что происходит на компьютере.

На данный момент для наилучшей работы Docker на Apple Silicon, необходимо установить Rosetta 2, что можно сделать одной командой в терминале: softwareupdate --install-rosetta.

Скачать сам Docker можно тут: https://docs.docker.com/desktop/mac/apple-silicon. После установки его можно запустить как любое приложение. Но нас будет интересовать не графический интерфейс, а только сам демон (движок), который запускается в фоне при открытии приложения.

Проверить, что Docker действительно работает, можно, нажав на иконку в menu bar, где должно быть написано “Docker Desktop is running”.

Шаг 2. Установка и запуск Azure SQL Edge.

Здесь, в теории, всё тоже очень просто. Тебе понадобится создать папку, в которой ты и будешь работать, а в ней файл docker-compose.yml со следующим содержанием:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
version: '3.8'
services:
  azure-sql-edge:
    container_name: MySQLServer
    image: mcr.microsoft.com/azure-sql-edge
    restart: always
    environment:
      - ACCEPT_EULA=Y
      - SA_PASSWORD=StrongAndComplicatedPassword123
    ports:
      - '1433:1433'
    volumes:
      - ./data:/var/opt/mssql

Этот файл будет описывать, что и как Docker будет делать, чтобы поднять базу данных. В целом, менять здесь ничего не нужно, кроме переменной SA_PASSWORD, которая указывает пароль от базы данных.

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

После добавления этого файла, можно поднять базу данных написав в терминале, находясь в папке проекта, команду docker-compose up.

Первый запуск должен занять довольно много времени, так как Docker сначала скачает Azure SQL Edge. Также во время запуска ты увидишь сообщения вида WARNING: Failed to connect to SQL because: dial tcp 127.0.0.1:1431... — это нормально, через несколько секунд, когда база данных запустится, ошибка исчезнет.

Когда Docker успешным образом поднимет базу данных, он займёт текущую вкладку терминала (то есть программа не завершится). В это окно будет выводится вся информация, о происходящем внутри контейнера. Однако, если закрыть терминал, то контейнер не остановится. Чтобы его остановить, нужно будет зайти из терминала в эту же папку и написать docker-compose down.

Ну вот и всё! Теперь ты умеешь поднимать и опускать базу данных в Docker-контейнере.

Шаг 3. Подключение к базе данных из DataGrip.

Кажется логичным, что для начала нужно установить DataGrip. Сделать это можно вот тут: https://www.jetbrains.com/ru-ru/datagrip/. После запуска DataGrip ты можешь создать новый проект, дав ему любое название:

Welcome to DataGrip

Теперь необходимо добавить новое подключение к базе данных. Для этого нужно нажать на + в левой верхней панели, выбрать Data Source и в предложенном списке баз данных выбрать Microsoft SQL Server.

Выбор БД

В открывшемся окне необходимо ввести имя пользователя sa (1) и пароль, указанный в docker-compose.yml (2). После этого применить изменения (3) и закрыть окно (4).

Ввод букв

И кажется, что это всё! Ты подключился к своей базе данных из DataGrip и теперь можешь писать и выполнять свои запросы.

Теперь для проверки можешь выполнить несколько запросов.

  1. Создать таблицу:

    1
    2
    3
    4
    5
    
    CREATE TABLE TEST_TABLE
    (
        id int,
        name varchar(255)
    );
    
  2. Добавить в неё строчку:

    6
    7
    
    INSERT INTO TEST_TABLE
    VALUES (1, 'Michael');
    
  3. Вывести содержимое:

    8
    
    SELECT * FROM TEST_TABLE;
    

Если ты увидел внизу сообщения об успехе и впоследствии получившуюся таблицу, значит, ты сделал всё правильно, и всё готово к использованию! Бинго!