Migrar um banco de dados do SQL Server do Windows para o Linux usando o recurso de 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 em Windows para o SQL Server em Linux. Neste tutorial, você percorrerá as etapas necessárias para mover um banco de dados para o Linux com as técnicas de backup e restauração.
- Criar um arquivo de backup em Windows com SSMS
- Instalar um shell Bash no Windows
- Mover o arquivo de backup para o Linux a partir do shell Bash
- Restaurar o arquivo de backup no Linux com o 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. Confira sql-server-linux-availability-group-cross-platform.
Prerequisites
Os pré-requisitos a seguir são necessários para concluir esse tutorial:
Em um computador Windows:
- SQL Server instalado.
- SQL Server Management Studio instalado.
- Banco de dados de destino a ser migrado.
Em um computador Linux:
- SQL Server (Red Hat Enterprise Linux, SUSE Linux Enterprise Server ou Ubuntu) com ferramentas de linha de comando.
Criar um backup em Windows
Há várias maneiras de criar um arquivo de backup de um banco de dados em Windows. As etapas a seguir usam o SSMS (SQL Server Management Studio).
Inicie o SQL Server Management Studio em seu computador Windows.
Na caixa de diálogo de conexão, insira localhost.
No Pesquisador de Objetos, expanda Bancos de Dados.
Clique com o botão direito do mouse no banco de dados desejado, selecione Tarefas e, em seguida, selecione Fazer backup....
Na caixa de diálogo Fazer backup do banco de dados, verifique se o Tipo de backup está definido como Completo e se Fazer backup em está definido como Disk. Observe o nome e a localização do arquivo. Por exemplo, um banco de dados chamado
YourDB
no SQL Server 2019 (15.x) terá o caminho de backup padrãoC:\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, primeiro você precisa transferir o arquivo de backup do computador Windows para o computador Linux de destino. Neste tutorial, movemos o arquivo para o Linux por meio de um shell Bash (janela de terminal) em execução no Windows.
Instale em seu computador Windows um shell Bash compatível com os comandos scp (cópia segura) e ssh (logon remoto). Dois exemplos são:
- O Subsistema Windows para Linux (Windows 10)
- O Shell Bash do Git (https://git-scm.com/downloads)
Abra uma sessão do Bash no Windows.
Copie o arquivo de backup para o Linux
Na sessão do 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 o computador Linux de destino. O exemplo a seguir transfere
YourDB.bak
para o diretório base douser1
no servidor Linux com o endereço IP 192.0.2.9:scp YourDB.bak user1@192.0.2.9:./
Dica
Há alternativas ao uso do comando scp para transferência de arquivos. Deve-se usar o Samba para configurar um compartilhamento de rede de SMB entre o Windows e o Linux. Para obter um passo a passo no Ubuntu, consulte Samba como um servidor de arquivos. Depois de estabelecido, você pode acessá-lo como um compartilhamento de arquivo de rede do Windows, como \\machinenameorip\share
.
Mova o arquivo de backup antes de restaurar
Neste ponto, o arquivo de backup está no servidor Linux, no diretório base do seu usuário. Antes de restaurar o banco de dados no SQL Server, você deve colocar o backup em um subdiretório de /var/opt/mssql
, pois esse é possuído pelo usuário mssql
e 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 ao seu computador Linux de destino com o comando ssh. O exemplo a seguir conecta-se ao computador Linux
192.0.2.9
como usuáriouser1
.ssh user1@192.0.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 fará 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 à localização e ao nome do seu arquivo de backup.mv /home/user1/YourDB.bak /var/opt/mssql/backup/
Saia do modo de superusuário.
exit
Restaurar seu banco de dados no Linux
Para restaurar o backup do banco de dados, você pode usar o comando RESTORE DATABASE
do Transact-SQL (TQL).
As etapas a seguir usam a ferramenta sqlcmd. Caso ainda não tenha instalado as ferramentas do SQL Server, confira Instalar as ferramentas de linha de comando sqlcmd e bcp do SQL Server no Linux.
No mesmo terminal, inicie o sqlcmd. O exemplo a seguir conecta-se à instância local do SQL Server com o usuário
SA
. Insira a senha quando solicitado ou especifique a senha adicionando o parâmetro-P
.sqlcmd -S localhost -U SA
No prompt
>1
, insira o comandoRESTORE DATABASE
a seguir, pressionando ENTER após cada linha (você não pode 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
Deve ser exibida uma mensagem informando que o banco de dados foi restaurado com sucesso.
RESTORE DATABASE
pode retornar um erro como no 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
deRESTORE DATABASE
, o procedimento de restauração tentará criá-los no mesmo caminho que o servidor original.Você pode listar todos os arquivos incluídos no backup:
RESTORE FILELISTONLY FROM DISK = '/var/opt/mssql/backup/YourDB.bak'; GO
Deve ser exibida uma lista como no 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 adicionais. Neste exemplo,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
Verifique a restauração listando todos os bancos de dados do servidor. O banco de dados restaurado deve constar na lista.
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 o sqlcmd, digite
exit
.Quando terminar de trabalhar na sessão ssh remota, digite
exit
novamente.
Próxima etapa
Neste tutorial, você aprendeu a fazer backup de um banco de dados em Windows e movê-lo para um servidor Linux que executa o SQL Server. Você aprendeu a:
- Usar o SSMS e o Transact-SQL para criar um arquivo de backup em Windows
- Instalar um shell Bash em Windows
- Usar o comando scp para mover arquivos de backup do Windows para o Linux
- Usar o comando ssh para conectar-se remotamente ao seu computador Linux
- Relocar o arquivo de backup para se preparar para a restauração
- Usar o sqlcmd para executar comandos Transact-SQL
- Restaurar o backup do banco de dados com o comando
RESTORE DATABASE
- Executar a consulta para verificar a migração
Em seguida, explore outros cenários de migração para o SQL Server em Linux.