Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к:SQL Server в Linux
Если нужно перенести базу данных из SQL Server в Windows в SQL Server на Linux, рекомендуется использовать функцию резервного копирования и восстановления SQL Server. В этом руководстве описаны действия, необходимые для перемещения базы данных в Linux с методами резервного копирования и восстановления.
- Создание файла резервной копии в Windows с помощью SSMS
- Установка оболочки Bash в Windows
- Перемещение файла резервной копии в Linux из оболочки Bash
- Восстановление файла резервной копии в Linux с помощью Transact-SQL
- Выполнение запроса для проверки переноса
Для переноса базы данных SQL Server из Windows в Linux можно также создать группу доступности Always On SQL Server. См. sql-server-linux-availability-group-cross-platform.
Предварительные условия
Для работы с этим руководством необходимо выполнить следующие условия.
На компьютере с Windows:
- SQL Server установлен.
- установлен SQL Server Management Studio.
- целевая база данных для переноса.
На компьютере Linux:
- SQL Server (Red Hat Enterprise Linux, SUSE Linux Enterprise Server или Ubuntu) с инструментами командной строки.
Создание резервной копии в 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копирования по умолчанию.Нажмите кнопку ОК, чтобы создать резервную копию базы данных.
Другой вариант — выполнить запрос Transact-SQL для создания файла резервной копии. Следующая команда Transact-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 (удаленный вход). Вот два примера:
- подсистема Windows для Linux (Windows 10);
- Оболочка Git Bash (https://git-scm.com/downloads)
Откройте сеанс 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
Совет
Существуют альтернативные варианты использования 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 команду Transact-SQL (TQL).
В приведенных ниже инструкциях используется программа 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. Вы научились выполнять следующие задачи:
- создание файла резервной копии в Windows с помощью SSMS и Transact-SQL;
- установка оболочки Bash в Windows;
- перенос файлов резервных копий из Windows в Linux с помощью команды scp;
- удаленное подключение к компьютеру Linux с помощью команды ssh;
- перемещение файла резервной копии для подготовки к восстановлению;
- выполнение команд Transact-SQL с помощью sqlcmd;
- Восстановление резервной копии базы данных с помощью
RESTORE DATABASEкоманды - Запустите запрос для проверки переноса.
Далее вы можете ознакомиться с другими сценариями переноса для SQL Server на Linux.