Появилась необходимость посмотреть базу данных на MS SQL. Есть файла .bak экспортированный из MS SQL с Windows, соответственно необходимо запустить сервер на MS SQL с Linux, и загрузить БД на сервер.
MS SQL Сервер
Запустим сервер MS SQL — нам хватит Express Edition, таким образом следуя официальному образу от mssql-server запускаем образ:
docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=yourStrong(!)Password' -e 'MSSQL_PID=Express' -p 1433:1433 -d mcr.microsoft.com/mssql/server:2017-latest-ubuntu -v /home/user/dump.bak:/app/dump.bak
с помощью директивы -v
связываем пути файла с дампом до файла внутри образа
Таким образом в папке app
в образе MSSQL будет файл /app/dump.bak
, который мы и будет импортировать.
Подключение
В Linux это можно сделать разными способами, мне удобней было через DBeaver
host: localhost
port: 1433
username: SA
password: yourStrong(!)Password
Импорт .bak
RESTORE DATABASE YourDB
FROM DISK = '/var/opt/mssql/backup/YourDB.bak'
Должно появиться сообщение об успешном восстановлении базы данных.
Но может выйти ошибка, это значит, что база данных содержит дополнительные файлы. Если эти файлы не указаны в предложении MOVE команды RESTORE DATABASE, процедура восстановления попытается создать их по тому же пути, что и на исходном сервере.
Вы можете вывести список всех файлов, содержащихся в резервной копии:
RESTORE FILELISTONLY FROM DISK = '/app/dump.bak'
Вы должны получить список, аналогичный следующему (приводятся только два первых столбца):
LogicalName | PhysicalName |
---|---|
YourDB | Z:\Microsoft SQL Server\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB.mdf |
YourDB_Product | Z:\Microsoft SQL Server\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB_Product.ndf |
YourDB_Customer | Z:\Microsoft SQL Server\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB_Customer.ndf |
YourDB_log | Z:\Microsoft SQL Server\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB_Log.ldf |
Этот список можно использовать для создания предложений MOVE для дополнительных файлов. В этом примере команда RESTORE DATABASE имеет следующий вид:
RESTORE DATABASE YourDB
FROM DISK = '/var/opt/mssql/backup/YourDB.bak'
WITH MOVE 'YourDB' TO '/var/opt/mssql/data/YourDB.mdf',
MOVE 'YourDB_Product' TO '/var/opt/mssql/data/YourDB_Product.ndf',
MOVE 'YourDB_Customer' TO '/var/opt/mssql/data/YourDB_Customer.ndf',
MOVE 'YourDB_Log' TO '/var/opt/mssql/data/YourDB_Log.ldf'
Начнется импорт и появится база данных YourDB с импортированными данными.
Источники
- Перенос базы данных SQL Server из Windows в Linux с помощью резервного копирования и восстановления
- Краткое руководство. Запуск образов контейнеров SQL Server в Docker
- Официальный репозиторий MS-SQL