Migración de una base de datos SQL Server de Windows a Linux mediante Copia de seguridad y restauración
Se aplica a: SQL Server - Linux
La característica Copia de seguridad y restauración de SQL Server es el método recomendado para migrar una base de datos de SQL Server en Windows a SQL Server en Linux. Este tutorial le guía por los pasos necesarios para mover una base de datos a Linux con técnicas de copia de seguridad y restauración.
- Creación de un archivo de copia de seguridad en Windows con SSMS
- Instalación de un shell de Bash en Windows
- Traslado del archivo de copia de seguridad a Linux desde el shell de Bash
- Restauración del archivo de copia de seguridad en Linux con Transact-SQL
- Ejecución de una consulta para comprobar la migración
También puede crear un Grupo de disponibilidad Always On de SQL Server para migrar una base de datos de SQL Server de Windows a Linux. Consulte sql-server-linux-availability-group-cross-platform.
Prerequisites
Debe disponer de lo siguiente para poder completar este tutorial:
En una máquina Windows:
- SQL Server instalado.
- SQL Server Management Studio instalado.
- Una base de datos de destino para migrar.
En una máquina Linux:
- SQL Server (Red Hat Enterprise Linux, SUSE Linux Enterprise Server o Ubuntu) con herramientas de línea de comandos.
Creación de una copia de seguridad en Windows
Hay varias maneras de crear un archivo de copia de seguridad de una base de datos en Windows. Para los pasos siguientes, se usa SQL Server Management Studio (SSMS).
Inicie SQL Server Management Studio en el equipo Windows.
En el cuadro de diálogo de conexión, escriba localhost.
En el Explorador de objetos, expanda Bases de datos.
Haga clic con el botón derecho en la base de datos de destino, seleccione Tareas y, luego, seleccione Hacer copia de seguridad…
En el cuadro de diálogo Copia de seguridad de la base de datos, compruebe que Tipo de copia de seguridad es Completo y que Copia de seguridad en es Disco. Tome nota del nombre y la ubicación del archivo. Por ejemplo, una base de datos denominada
YourDB
en SQL Server 2019 (15.x) tiene una ruta de acceso de copia de seguridad predeterminada deC:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\YourDB.bak
.Seleccione Aceptar para realizar una copia de seguridad de la base de datos.
Otra opción consiste en ejecutar una consulta de Transact-SQL para crear el archivo de copia de seguridad. El siguiente comando de Transact-SQL realiza las mismas acciones que los pasos anteriores para una base de datos denominada 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
Instalación de un shell de Bash en Windows
Para restaurar la base de datos, primero debe transferir el archivo de copia de seguridad del equipo Windows al equipo Linux de destino. En este tutorial, moveremos el archivo a Linux desde un shell de Bash (ventana de terminal) que se ejecuta en Windows.
Instale un shell de Bash en un equipo Windows que admita los comandos scp (copia segura) y ssh (inicio de sesión remoto). Dos ejemplos incluyen:
- El subsistema de Windows para Linux (Windows 10)
- El shell de Bash de Git (https://git-scm.com/downloads)
Abra una sesión de Bash en Windows.
Copia del archivo de copia de seguridad en Linux
En la sesión de Bash, vaya al directorio que contiene el archivo de copia de seguridad. Por ejemplo:
cd 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\'
Use el comando scp para transferir el archivo al equipo Linux de destino. En el ejemplo siguiente se transfiere
YourDB.bak
al directorio particular deuser1
en el servidor Linux con una dirección IP de 192.0.2.9:scp YourDB.bak user1@192.0.2.9:./
Sugerencia
Hay alternativas al uso de scp para la transferencia de archivos. Una consiste en usar Samba para configurar un recurso compartido de red de SMB entre Windows y Linux. Para ver un tutorial sobre Ubuntu, consulte Samba como servidor de archivos. Una vez establecido, puede acceder a él como un recurso compartido de archivos de red desde Windows, como \\machinenameorip\share
.
Traslado del archivo de copia de seguridad antes de la restauración
En este momento, el archivo de copia de seguridad se encuentra en el servidor Linux en el directorio particular del usuario. Antes de restaurar la base de datos a SQL Server, debe colocar la copia de seguridad en un subdirectorio de /var/opt/mssql
, ya que es propiedad del usuario mssql
y del grupo mssql
. Si quiere cambiar la ubicación de copia de seguridad predeterminada, vea el artículo Configuración con mssql-conf.
En la misma sesión de Bash de Windows, conéctese de forma remota al equipo Linux de destino con ssh. En el ejemplo siguiente, se realiza la conexión al equipo Linux
192.0.2.9
como usuariouser1
.ssh user1@192.0.2.9
Ahora está ejecutando comandos en el servidor Linux remoto.
Acceda al modo de superusuario.
sudo su
Cree un directorio de copia de seguridad. El parámetro
-p
no hace nada si el directorio ya existe.mkdir -p /var/opt/mssql/backup
Mueva el archivo de copia de seguridad a ese directorio. En el ejemplo siguiente, el archivo de copia de seguridad reside en el directorio particular de
user1
. Cambie el comando para que coincida con la ubicación y el nombre del archivo de copia de seguridad.mv /home/user1/YourDB.bak /var/opt/mssql/backup/
Salga del modo de superusuario.
exit
Restauración de la base de datos en Linux
Para restaurar la copia de seguridad de base de datos, puede usar el comando RESTORE DATABASE
de Transact-SQL (TQL).
En los pasos siguientes se usa la herramienta sqlcmd. Si no ha instalado las Herramientas de SQL Server, consulte Instalación de las herramientas de línea de comandos sqlcmd y bcpen en Linux.
En el mismo terminal, inicie sqlcmd. En el ejemplo siguiente se conecta a la instancia de SQL Server local con el usuario
SA
. Escriba la contraseña cuando se le solicite o especifíquela mediante la adición del parámetro-P
.sqlcmd -S localhost -U SA
En el símbolo del sistema
>1
, escriba el siguiente comandoRESTORE DATABASE
. Para ello, presione INTRO después de cada línea, ya que no puede copiar y pegar a la vez este comando de varias líneas al completo. Reemplace todas las apariciones deYourDB
por el nombre de la base de datos.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
Debería obtener un mensaje que indica que la base de datos se ha restaurado correctamente.
RESTORE DATABASE
puede devolver un error como el del ejemplo siguiente: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.).
En este caso, la base de datos contiene archivos secundarios. Si estos archivos no se especifican en la cláusula
MOVE
deRESTORE DATABASE
, el procedimiento de restauración intenta crearlos en la misma ruta de acceso que el servidor original.Puede enumerar todos los archivos incluidos en la copia de seguridad:
RESTORE FILELISTONLY FROM DISK = '/var/opt/mssql/backup/YourDB.bak'; GO
Debería obtener una lista como en el siguiente ejemplo (solo se muestran las dos primeras columnas):
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 ..............
Puede usar esta lista para crear cláusulas
MOVE
para los archivos adicionales. En este ejemplo,RESTORE DATABASE
es: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
Compruebe la restauración mediante la enumeración de todas las bases de datos del servidor. La base de datos restaurada debería aparecer en la lista.
SELECT Name FROM sys.Databases GO
Ejecute otras consultas en la base de datos migrada. El comando siguiente cambia el contexto a la base de datos
YourDB
y selecciona las filas de una de sus tablas.USE YourDB SELECT * FROM YourTable GO
Cuando haya terminado de usar sqlcmd, escriba
exit
.Cuando haya terminado de trabajar en la sesión remota de ssh, vuelva a escribir
exit
.
Paso siguiente
En este tutorial ha aprendido a realizar una copia de seguridad de una base de datos en Windows y a moverla a un servidor de Linux con SQL Server. Ha aprendido a:
- Uso de SSMS y Transact-SQL para crear un archivo de copia de seguridad en Windows
- Instalación de un shell de Bash en Windows
- Uso de scp para mover archivos de copia de seguridad de Windows a Linux
- Uso de ssh para conectarse de forma remota al equipo Linux
- Reubicación del archivo de copia de seguridad a fin de prepararlo para la restauración
- Uso de sqlcmd para ejecutar comandos Transact-SQL
- Restauración de la copia de seguridad de base de datos con el comando
RESTORE DATABASE
- Ejecución de la consulta para comprobar la migración
Explore ahora otros escenarios de migración para SQL Server en Linux.