Понадобилось на работе для тестов поюзать 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'