Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к:SQL Server в Linux
Если нужно перенести базу данных из SQL Server в Windows в SQL Server на Linux, рекомендуется использовать функцию резервного копирования и восстановления SQL Server. В этом руководстве описаны действия, необходимые для перемещения базы данных в Linux с методами резервного копирования и восстановления.
- Создайте резервный файл на Windows с помощью SQL Server Management Studio (SSMS)
- установка оболочки Bash в Windows;
- Перемещение файла резервной копии в Linux из оболочки Bash
- Восстановить резервный файл на Linux с помощью Transact-SQL (T-SQL)
- Выполнение запроса для проверки переноса
Для переноса базы данных SQL Server из Windows в Linux можно также создать группу доступности Always On SQL Server. См. Настройка группы доступности SQL Server Always On в Windows и Linux (межплатформенная конфигурация).
Prerequisites
Для работы с этим руководством необходимо выполнить следующие условия.
На компьютере с Windows:
- SQL Server установлен.
- установлен SQL Server Management Studio.
- целевая база данных для переноса.
На компьютере Linux:
- SQL Server (Red Hat Enterprise Linux, SUSE Linux Enterprise Server или Ubuntu) с инструментами командной строки.
Note
Начиная с SQL Server 2025 (17.x), SUSE Linux Enterprise Server (SLES) не поддерживается.
Создание резервной копии в Windows
Создать файл резервной копии базы данных в Windows можно несколькими способами. В приведенных ниже инструкциях используется SQL Server Management Studio (SSMS).
Запустите SQL Server Management Studio на компьютере Windows.
В диалоговом окне подключения введите localhost.
В Обозревателе объектов разверните Базы данных.
Щелкните правой кнопкой мыши целевую базу данных, выберите "Задачи", а затем нажмите кнопку "Создать резервную копию...".
В диалоговом окне «Создание резервной копии базы данных» убедитесь, что для параметра «Тип резервного копирования» выбрано значение «Полный», а для параметра «Резервировать в» — значение «Диск». Обратите внимание на название и местоположение файла. Например, база данных с именем
YourDBSQL Server 2019 (15.x) имеет путь резервногоC:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\YourDB.bakкопирования по умолчанию.Нажмите кнопку ОК, чтобы создать резервную копию базы данных.
Другой вариант — запустить запрос T-SQL для создания резервного файла. Следующая команда T-SQL выполняет те же действия, что и предыдущие шаги для базы данных под названием YourDB:
BACKUP DATABASE [YourDB]
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\YourDB.bak'
WITH NOFORMAT, NOINIT, NAME = N'YourDB-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10;
GO
установка оболочки Bash в Windows;
Чтобы восстановить базу данных, необходимо сначала перенести файл резервной копии с компьютера Windows на целевой компьютер Linux. В этом руководстве мы переместим файл в Linux из оболочки Bash (окно терминала), работающего на Windows.
Установите оболочку Bash на компьютере Windows, поддерживающую команды scp (безопасная копия) и ssh (удаленный вход). Вот два примера:
Откройте сессию Bash на Windows.
Копирование файла резервной копии в Linux
В вашей сессии Bash перейдите в каталог с вашим резервным копием. Рассмотрим пример.
cd 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\'Перенесите файл на конечный компьютер Linux с помощью команды scp. Следующий пример переносит
YourDB.bakв домашний каталогuser1на сервере Linux с IP-адресом 192.168.2.9:scp YourDB.bak user1@192.168.2.9:./Вот что мы должны были увидеть:
The authenticity of host '192.168.2.9 (192.168.2.9)' can't be established. ECDSA key fingerprint is SHA256: aB1cD2eF-3gH4iJ5kL6-mN7oP8qR= Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.2.9' (ECDSA) to the list of known hosts. Password: YourDB.bak 100% 8960KB 7.4MB/s 00:01
Tip
Существуют альтернативные варианты использования SCP для передачи файлов. Одна из них — настройка сетевой папки SMB между Windows и Linux с помощью Samba. Пошаговое руководство по Ubuntu см. в статье Samba как файловый сервер. После установки вы можете получить доступ к нему в качестве сетевой общей папки из Windows, например \\machinenameorip\share.
Перенос файла резервной копии перед восстановлением
Сейчас файл резервной копии находится на сервере Linux в домашнем каталоге пользователя. Перед восстановлением базы данных в SQL Server необходимо поместить резервную копию в подкаталог /var/opt/mssql, так как этот каталог принадлежит пользователю mssql и группе mssql. Если вы хотите изменить расположение резервного копирования по умолчанию, см . статью "Настройка с помощью mssql-conf ".
В той же сессии Windows Bash подключайтесь удалённо к целевому Linux-компьютеру через ssh. В следующем примере выполняется подключение к компьютеру
192.168.2.9Linux в качестве пользователяuser1.ssh user1@192.168.2.9Теперь вы выполняете команды на удаленном сервере Linux.
Введите режим суперпользователя.
sudo suСоздайте каталог резервного копирования. Параметр
-pничего не делает, если каталог уже существует.mkdir -p /var/opt/mssql/backupПереместите файл резервной копии в этот каталог. В следующем примере файл резервной копии находится в домашнем каталоге
user1. Измените команду в соответствии с расположением и именем вашего файла резервной копии.mv /home/user1/YourDB.bak /var/opt/mssql/backup/Выход из режима суперпользователя.
exit
Восстановление базы данных в Linux
Чтобы восстановить резервную копию базы данных, можно использовать команду RESTORE DATABASE T-SQL.
В следующих шагах используется sqlcmd средство. Если вы не установили средства SQL Server, см. статью "Установка средств командной строки SQL Server sqlcmd и bcp SQL Server" в Linux.
В том же терминале запустите
sqlcmd. В следующем примере выполняется подключение к локальному экземпляру SQL Server с учетной записьюsa. Введите пароль при появлении запроса или укажите пароль, добавив-Pпараметр.sqlcmd -S localhost -U saВ командной строке
>1введите следующуюRESTORE DATABASEкоманду, нажав клавишу ВВОД после каждой строки (вы не можете скопировать и вставить всю команду с несколькими строками одновременно). Замените все вхожденияYourDBна имя вашей базы данных.RESTORE DATABASE YourDB FROM DISK = '/var/opt/mssql/backup/YourDB.bak' WITH MOVE 'YourDB' TO '/var/opt/mssql/data/YourDB.mdf', MOVE 'YourDB_Log' TO '/var/opt/mssql/data/YourDB_Log.ldf'; GOВы должны получить сообщение о успешном восстановлении базы данных.
RESTORE DATABASEМожет возвращать ошибку, как показано в следующем примере:File 'YourDB_Product' cannot be restored to 'Z:\Microsoft SQL Server\MSSQL15.GLOBAL\MSSQL\Data\YourDB\YourDB_Product.ndf'. Use WITH MOVE to identify a valid location for the file. Msg 5133, Level 16, State 1, Server servername, Line 1 Directory lookup for the file "Z:\Microsoft SQL Server\MSSQL15.GLOBAL\MSSQL\Data\YourDB\YourDB_Product.ndf" failed with the operating system error 2(The system cannot find the file specified.).Это значит, что база данных содержит дополнительные файлы. Если эти файлы не указаны в
MOVEпредложенииRESTORE DATABASE, процедура восстановления пытается создать их в том же пути, что и исходный сервер.Вы можете вывести список всех файлов, содержащихся в резервной копии:
RESTORE FILELISTONLY FROM DISK = '/var/opt/mssql/backup/YourDB.bak'; GOВам следует получить список, похожий на следующий пример (с перечислением только первых двух столбцов):
LogicalName PhysicalName .............. ------------------- ---------------------------------------------------------------------------- --------------- YourDB Z:\Microsoft SQL Server\MSSQL15.GLOBAL\MSSQL\Data\YourDB\YourDB.mdf .............. YourDB_Product Z:\Microsoft SQL Server\MSSQL15.GLOBAL\MSSQL\Data\YourDB\YourDB_Product.ndf .............. YourDB_Customer Z:\Microsoft SQL Server\MSSQL15.GLOBAL\MSSQL\Data\YourDB\YourDB_Customer.ndf .............. YourDB_Log Z:\Microsoft SQL Server\MSSQL15.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'; GOПроверьте восстановление, получив список всех баз данных на сервере. Восстановленная база данных должна быть указана в списке.
SELECT name FROM sys.databases; GOВыполните другие запросы к перенесенной базе данных. Следующая команда переключает контекст в
YourDBбазу данных и выбирает строки из одной из таблиц.USE YourDB; SELECT * FROM YourTable; GOКогда вы закончите использовать
sqlcmd, введитеexit.Когда вы закончите работу в удаленном сеансе SSH , введите
exitеще раз.
Следующий шаг
В этом руководстве вы узнали, как создать резервную копию базы данных в Windows и переместить ее на сервер Linux с SQL Server. Вы узнали, как:
- Используйте SSMS и T-SQL для создания резервного файла на Windows
- установка оболочки Bash в Windows;
- перенос файлов резервных копий из Windows в Linux с помощью команды scp;
- удаленное подключение к компьютеру Linux с помощью команды ssh;
- перемещение файла резервной копии для подготовки к восстановлению;
- Используйте
sqlcmdдля запуска команд T-SQL - Восстановление резервной копии базы данных с помощью
RESTORE DATABASEкоманды - Выполнение запроса для проверки переноса
Далее вы можете ознакомиться с другими сценариями переноса для SQL Server на Linux.