Перенос базы данных SQL Server из Windows в Linux с помощью резервного копирования и восстановления
Применимо к: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. См. статью Настройка кроссплатформенной группы доступности Always On SQL Server в Windows и Linux.
Необходимые компоненты
Для работы с этим руководством необходимо выполнить следующие условия.
Компьютер Windows со следующими компонентами:
- установленный экземпляр SQL Server;
- установленная среда SQL Server Management Studio;
- целевая база данных для переноса.
Компьютер Linux со следующими компонентами:
Создание резервной копии в Windows
Создать файл резервной копии базы данных в Windows можно несколькими способами. В приведенных ниже инструкциях используется SQL Server Management Studio (SSMS).
Запустите SQL Server Management Studio на компьютере Windows.
В диалоговом окне подключения введите localhost.
В обозревателе объектов разверните узел Базы данных.
Щелкните целевую базу данных правой кнопкой мыши, выберите пункт Задачи, а затем Резервное копирование....
В диалоговом окне Резервное копирование базы данных в поле Тип резервной копии должно быть выбрано значение Полная, а в поле Создать резервную копию на — Диск. Запишите имя и расположение файла. Например, база данных с именем YourDB в SQL Server 2016 имеет путь резервного копирования по умолчанию
C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\YourDB.bak
.Нажмите кнопку ОК, чтобы создать резервную копию базы данных.
Примечание.
Другой вариант — выполнить запрос Transact-SQL для создания файла резервной копии. Следующая команда Transact-SQL выполняет те же действия, что и предыдущие инструкции, для базы данных с именем YourDB:
BACKUP DATABASE [YourDB] TO DISK =
N'C:\Program Files\Microsoft SQL Server\MSSQL13.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);
- оболочка Bash GIT (https://git-scm.com/downloads).
Откройте сеанс Bash в Windows.
Копирование файла резервной копии в Linux
В сеансе Bash перейдите к каталогу, в котором содержится файл резервной копии. Например:
cd 'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\'
Перенесите файл на конечный компьютер Linux с помощью команды scp. В следующем примере файл YourDB.bak переносится в домашний каталог пользователя user1 на сервере Linux с IP-адресом 192.0.2.9:
scp YourDB.bak user1@192.0.2.9:./
Совет
При передаче файлов есть альтернативы команде scp. Одна из них — настройка сетевой папки SMB между Windows и Linux с помощью Samba. Пошаговое руководство для Ubuntu см. в статье How to Create a Network Share Via Samba (Создание сетевой папки с помощью Samba). После ее создания вы можете получать к ней доступ как к общей сетевой папке из Windows, например \\machinenameorip\share.
Перенос файла резервной копии перед восстановлением
Сейчас файл резервной копии находится на сервере Linux в домашнем каталоге пользователя. Перед восстановлением базы данных в SQL Server необходимо поместить резервную копию в подкаталог /var/opt/mssql, так как ей владеет пользователь mssql
и группа mssql
. Если вы хотите изменить расположение резервной копии по умолчанию, см. сведения в статье Настройка с помощью mssql-conf.
В том же сеансе Bash в Windows подключитесь удаленно к целевому компьютеру Linux с помощью команды ssh. В следующем примере устанавливается подключение к компьютеру Linux с IP-адресом 192.0.2.9 от имени пользователя user1:
ssh user1@192.0.2.9
Теперь вы выполняете команды на удаленном сервере Linux.
Перейдите в режим суперпользователя.
sudo su
Создайте каталог резервного копирования. Если каталог уже существует, параметр -p не оказывает никакого действия.
mkdir -p /var/opt/mssql/backup
Переместите файл резервной копии в этот каталог. В приведенном ниже примере файл резервной копии находится в домашнем каталоге пользователя user1. Измените команду в соответствии с расположением и именем вашего файла резервной копии.
mv /home/user1/YourDB.bak /var/opt/mssql/backup/
Выйдите из режима суперпользователя.
exit
Восстановление базы данных в Linux
Чтобы восстановить резервную копию базы данных, можно воспользоваться командой Transact-SQL (TQL) RESTORE DATABASE.
Примечание.
В приведенных ниже инструкциях используется программа sqlcmd. Если вы еще не установили средства SQL Server, см. статью Установка программ командной строки SQL Server в Linux.
В том же окне терминала запустите sqlcmd. В приведенном ниже пользователь SA подключается к локальному экземпляру SQL Server. Введите пароль, когда появится запрос, или укажите пароль с помощью параметра -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\MSSQL11.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\MSSQL11.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\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' 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.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по