Понадобилось на работе для тестов поюзать ms-sql server, благо он есть и для linux, иначе бы мне пришлось предать свою сущность… Итак приступим.
Требования:
– docker;
– docker-compose;
– linux.
Клонируем из git проект
git clone https://gitlab.com/itc-life/docker-mssql cd docker-mssql
Собираем образ
docker-compose build
Далее правим docker-compose.yml
Приводим к необходимому виду:
– правим пароль – он должен соответствовать требованиям надежности мелкомягких – иначе не заведется.
Как пример.
version: '2'
services:
mssql-server-server:
build: docker/mssql-server-server/.
container_name: mssql-server-server
hostname: mssql-server-server
ports:
- "1433:1433"
- "5022:5022"
volumes:
- "./data/mssql-server:/var/opt/mssql"
- "./backups:/backups"
environment:
- "ACCEPT_EULA=Y"
- "SA_PASSWORD=YourStrong!Passw0rd"
- "MSSQL_PID=Express"
- "MSSQL_LCID=1049" # русский
- "MSSQL_COLLATION=1049"
- "MSSQL_MEMORY_LIMIT_MB=3500" #задает максимальный объем памяти (в МБ), который можно использовать SQL Server. По умолчанию он составляет 80% от общего объема физической памяти.
- "MSSQL_TCP_PORT=1433"
- "MSSQL_IP_ADDRESS=0.0.0.0"
- "MSSQL_BACKUP_DIR=/backups" #Задайте расположение каталога резервного копирования по умолчанию.
- "MSSQL_DATA_DIR=/var/opt/mssql/data" #Перейдите в каталог, где создаются новые базы данных файлы данных SQL Server (.mdf).
- "MSSQL_LOG_DIR=/var/opt/mssql/log" #где создаются новые файлы журналов (LDF) базы данных SQL Server.
- "MSSQL_DUMP_DIR=/var/opt/mssql/dumps" #где SQL Server будет Депонировать дампы памяти и другие файлы для устранения неполадок по умолчанию.
- "MSSQL_ENABLE_HADR=0" #Включение группы доступности. Например "1" включена и отключена "0" - репликация
- "MSSQL_AGENT_ENABLED=true" #Включите агент SQL Server. Например «true» включен, и «false» отключена. По умолчанию агент отключен.
- "MSSQL_MASTER_DATA_FILE" #Задает расположение файла данных базы данных master.
- "MSSQL_ERROR_LOG_FILE" #Задает расположение файла журнала базы данных master.
- "MSSQL_MASTER_LOG_FILE" #Задает расположение файлов журнала ошибок.
restart: always
networks:
mssql-server-net:
aliases:
- mssql-server
networks:
mssql-server-net:
driver: bridge
Запускаем
docker-compose up -d
Заходим внутрь докер контейнерв
docker exec -ti -u 0 mssql-server-server sh -c 'stty cols 250 && stty rows 100 && bash'
Восстановим дамп из бэкапа
Иы пробросили каталог ./backups внутрь докер контейнера в каталог /backups.
Восстановим дамп из файла(например) GRN_MAIN.bak
Для этого выполним sql – просмотрим инфу о файле.
docker exec -it mssql-server-server /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'YourStrong!Passw0rd' -Q "RESTORE FILELISTONLY FROM DISK = '/backups/GRN_MAIN.bak'"
Нас интересует имя GRN_MAIN.mdf и его расположение, а также имя GRN_MAIN_1.ldf и его расположение.
Теперь произведем восстановление из дампа.
Из консоли
docker exec -it mssql-server-server /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'YourStrong!Passw0rd' -Q " RESTORE DATABASE GRN_MAIN FROM DISK = '/backups/GRN_MAIN.bak' WITH MOVE 'GRN_MAIN_Data' TO '/var/opt/mssql/data/GRN_MAIN.mdf', MOVE 'GRN_MAIN_Log' TO '/var/opt/mssql/data/GRN_MAIN_1.ldf'"
Ждем окончания. Всё ок.
Или из GUI для ms-sql – например – DBEAVER.
Сначала просмотрим инфу о файле.
RESTORE FILELISTONLY FROM DISK = '/backups/GRN_MAIN.bak'
RESTORE DATABASE GRN_MAIN FROM DISK = '/var/opt/mssql/backup/GRN_MAIN.bak' WITH MOVE 'GRN_MAIN_Data' TO '/var/opt/mssql/data/GRN_MAIN.mdf', MOVE 'GRN_MAIN_Log' TO '/var/opt/mssql/data/GRN_MAIN_1.ldf' GO
docker exec -it mssql-server-server /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'YourStrong!Passw0rd' -Q "BACKUP DATABASE [GRN_MAIN] TO DISK = N'/backups/GRN_MAIN_backup.bak' WITH NOFORMAT, NOINIT, NAME = 'GRN_MAIN-full', SKIP, NOREWIND, NOUNLOAD, STATS = 10"
Другие команды
Показать версию
docker exec -it mssql-server-server /opt/mssql-tools/bin/sqlcmd \ -S localhost -U SA -P 'YourStrong!Passw0rd' \ -Q 'SELECT @@VERSION'


