Migrar um banco de dados SQL Server do Windows para o Linux usando backup e restauração
Aplica-se a:SQL Server - Linux
O recurso de backup e restauração do SQL Server é a maneira recomendada de migrar um banco de dados do SQL Server no Windows para o SQL Server no Linux. Neste tutorial, você percorre as etapas necessárias para mover um banco de dados para o Linux com técnicas de backup e restauração.
- Criar um arquivo de backup no Windows com o SSMS
- Instalar um shell bash no Windows
- Mova o arquivo de backup para Linux a partir do shell bash
- Restaure o arquivo de backup no Linux com Transact-SQL
- Executar uma consulta para verificar a migração
Você também pode criar um Grupo de Disponibilidade Always On do SQL Server para migrar um banco de dados do SQL Server do Windows para o Linux. Consulte sql-server-linux-availability-group-cross-platform.
Pré-requisitos
Os seguintes pré-requisitos são necessários para concluir este tutorial:
Em uma máquina Windows:
- SQL Server instalado.
- SQL Server Management Studio instalado.
- Banco de dados de destino a ser migrado.
Em uma máquina Linux:
- SQL Server (Red Hat Enterprise Linux, SUSE Linux Enterprise Serverou Ubuntu) com ferramentas de linha de comando.
Criar um backup no Windows
Há várias maneiras de criar um arquivo de backup de um banco de dados no Windows. As etapas a seguir usam o SQL Server Management Studio (SSMS).
Inicie SQL Server Management Studio em sua máquina Windows.
Na caixa de diálogo de conexão, digite localhost.
No Pesquisador de Objetos, expanda Bancos de Dados.
Clique com o botão direito do rato na base de dados de destino, selecione Tarefase, em seguida, selecione Cópia de Segurança....
Na caixa de diálogo Backup do Banco de Dados, verifique se tipo de Backup é Completo e Backup para é de Disco . Anote o nome e o local do arquivo. Por exemplo, um banco de dados chamado
YourDB
no SQL Server 2019 (15.x) tem um caminho de backup padrão deC:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\YourDB.bak
.Selecione OK para fazer backup do banco de dados.
Outra opção é executar uma consulta Transact-SQL para criar o arquivo de backup. O comando Transact-SQL a seguir executa as mesmas ações que as etapas anteriores para um banco de dados chamado 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
Instalar um shell bash no Windows
Para restaurar o banco de dados, você deve primeiro transferir o arquivo de backup da máquina Windows para a máquina Linux de destino. Neste tutorial, movemos o arquivo para o Linux a partir de um shell bash (janela do terminal) em execução no Windows.
Instale um shell bash em sua máquina Windows que suporte os comandos scp (cópia segura) e ssh (login remoto). Dois exemplos incluem:
- O Subsistema Windows para Linux (Windows 10)
- O shell Git Bash (https://git-scm.com/downloads)
Abra uma sessão bash no Windows.
Copie o arquivo de backup para Linux
Na sessão bash, navegue até o diretório que contém o arquivo de backup. Por exemplo:
cd 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\'
Use o comando scp para transferir o arquivo para a máquina Linux de destino. O exemplo a seguir transfere
YourDB.bak
para o diretório base douser1
no servidor Linux com um endereço IP de 192.168.2.9:scp YourDB.bak user1@192.168.2.9:./
Aqui está a saída esperada:
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
Dica
Existem alternativas ao uso de scp para transferência de arquivos. Uma delas é usar Samba para configurar um compartilhamento de rede SMB entre Windows e Linux. Para obter um passo a passo sobre o Ubuntu, consulte Samba como um servidor de arquivos. Uma vez estabelecido, pode-se aceder a ele como uma partilha de ficheiros de rede no Windows, tal como \\machinenameorip\share
.
Mova o arquivo de backup antes de restaurar
Neste ponto, o arquivo de backup está no seu servidor Linux no diretório inicial do usuário. Antes de restaurar o banco de dados para o SQL Server, você deve colocar o backup em um subdiretório do /var/opt/mssql
, pois ele pertence ao usuário mssql
e ao grupo mssql
. Se você estiver procurando alterar o local de backup padrão, consulte o artigo Configurar com mssql-conf.
Na mesma sessão bash do Windows, conecte-se remotamente à sua máquina Linux de destino com ssh. O exemplo a seguir se conecta à máquina Linux
192.168.2.9
como usuáriouser1
.ssh user1@192.168.2.9
Agora você está executando comandos no servidor Linux remoto.
Entre no modo de superusuário.
sudo su
Crie um novo diretório de backup. O parâmetro
-p
não faz nada se o diretório já existir.mkdir -p /var/opt/mssql/backup
Mova o arquivo de backup para esse diretório. No exemplo a seguir, o arquivo de backup reside no diretório base do
user1
. Altere o comando para corresponder ao local e ao nome do arquivo de backup.mv /home/user1/YourDB.bak /var/opt/mssql/backup/
Saia do modo de superusuário.
exit
Restaure seu banco de dados no Linux
Para restaurar o backup do banco de dados, você pode usar o comando RESTORE DATABASE
Transact-SQL (TQL).
As etapas a seguir usam a ferramenta sqlcmd. Se você ainda não instalou as ferramentas do SQL Server, consulte Instalar as ferramentas de linha de comando do SQL Server sqlcmd e bcp no Linux.
No mesmo terminal, inicie sqlcmd. O exemplo a seguir se conecta à instância local do SQL Server com a conta
sa
. Digite a senha quando solicitado ou especifique a senha adicionando o parâmetro-P
.sqlcmd -S localhost -U sa
No prompt
>1
, digite o seguinte comandoRESTORE DATABASE
, pressionando ENTER após cada linha (não é possível copiar e colar todo o comando de várias linhas de uma só vez). Substitua todas as ocorrências deYourDB
pelo nome do seu banco de dados.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
Você deve receber uma mensagem de que o banco de dados foi restaurado com êxito.
RESTORE DATABASE
pode retornar um erro como o exemplo a seguir: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.).
Nesse caso, o banco de dados contém arquivos secundários. Se esses arquivos não forem especificados na cláusula
MOVE
doRESTORE DATABASE
, o procedimento de restauração tentará criá-los no mesmo caminho do servidor original.Você pode listar todos os arquivos incluídos no backup:
RESTORE FILELISTONLY FROM DISK = '/var/opt/mssql/backup/YourDB.bak'; GO
Você deve obter uma lista como o exemplo a seguir (listando apenas as duas primeiras colunas):
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 ..............
Você pode usar essa lista para criar cláusulas
MOVE
para os arquivos extras. Neste exemplo, aRESTORE 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
Verifique a restauração listando todos os bancos de dados no servidor. O banco de dados restaurado deve ser listado.
SELECT name FROM sys.databases; GO
Execute outras consultas no banco de dados migrado. O comando a seguir alterna o contexto para o banco de dados
YourDB
e seleciona linhas de uma de suas tabelas.USE YourDB; SELECT * FROM YourTable; GO
Quando terminar de usar sqlcmd , digite
exit
.Quando terminar de trabalhar na sessão remota ssh, digite
exit
novamente.
Próximo passo
Neste tutorial, você aprendeu como fazer backup de um banco de dados no Windows e movê-lo para um servidor Linux executando o SQL Server. Você aprendeu a:
- Usar o SSMS e o Transact-SQL para criar um arquivo de backup no Windows
- Instalar um shell Bash no Windows
- Use scp para mover arquivos de backup do Windows para o Linux
- Use ssh para se conectar remotamente à sua máquina Linux
- Realoque o arquivo de backup para se preparar para a restauração
- Use sqlcmd para executar comandos Transact-SQL
- Restaure o backup do banco de dados com o comando
RESTORE DATABASE
- Execute a consulta para verificar a migração
Em seguida, explore outros cenários de migração para o SQL Server no Linux.