Ejecución de Microsoft SQL Server en Linux

4 de octubre de 2023

Lang: cs en de es

¿Sabía que Microsoft SQL Server también se puede ejecutar en Linux? Gracias a que esto es posible, quien necesite utilizar necesariamente Microsoft SQL Server ahora puede deshacerse del sistema operativo Windows. ¿Cómo hacerlo? Cómo ejecutar y probar MS SQL Server fácilmente en Linux, voy a describir en este artículo.

La capacidad de ejecutar Microsoft SQL Server (MSSQL) en el sistema operativo Linux se anunció por primera vez en marzo de 2016, cuando se lanzó la versión 2016 de SQL Server. Esta versión de MS SQL Server trajo compatibilidad con Linux, lo que hizo posible instalar y ejecutar MS SQL en varias distribuciones de Linux.

Así que ahora puedes reemplazar fácilmente los servidores Windows por máquinas Linux.

Instalación y puesta en marcha

La forma más sencilla de probar Microsoft SQL Server es utilizar Docker. Si tienes instalado Docker. No necesitarás nada más, y ponerlo en marcha y luego borrarlo es rápido y sencillo.

Utiliza el siguiente comando para iniciar el contenedor docker de MS SQL Server versión 2022 desde una imagen docker. Si la imagen no se ha descargado todavía se descargará primero.

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=d0_n0t_be_l@zy_h3r3" -p 1433:1433 -d mcr.microsoft.com/mssql/server:2022-latest
Al ejecutarlo también se confirma la licencia y se establece la contraseña en d0_n0t_be_l@zy_h3r3. La contraseña debe ser suficientemente compleja. Si es simple MS SQL server no arrancará y verás un error en la consola:
ERROR: No se pudo establecer la contraseña de administrador del sistema: La validación de la contraseña falló. La contraseña no cumple los requisitos de la directiva de contraseñas de SQL Server porque es demasiado corta. La contraseña debe tener al menos 8 caracteres..

Lo ideal es crear un fichero docker-compose y ejecutar el contenedor MS SQL con él.
Ejemplo docker-compose.yml con la configuración del servidor MS SQL para probar:

versión: 3.7

services:
  
    mssql:
      imagen: mcr.microsoft.com/mssql/server:2022-latest

      entorno:
          - ACCEPT_EULA=Y
          - SA_PASSWORD=d0_n0t_be_l@zy_h3r3

      volúmenes:
          - ./dump:/srv
      puertos:
          - 1433:1433

Utiliza el comando docker-compose up para iniciar la configuración del contenedor.

En ambos casos, Microsoft SQL Server estará entonces disponible en el puerto estándar 1433 de su máquina.

El parámetro de entorno SA_PASSWORD y MSSQL_SA_PASSWORD parecen ser equivalentes.

Por supuesto, otra opción es preparar un VPS con una distribución de Linux compatible e instalar manualmente MS SQL allí. Sin embargo, este procedimiento es más laborioso y también ocupará más espacio en disco.
Además, según he mirado el procedimiento de instalación no sigue los estándares de Unix y de las distribuciones. Por ejemplo, sólo se admiten determinadas distribuciones de Linux. Así que en lugar de mantener un VPS de este tipo, prefiero un VPS puro en el que la aplicación en cuestión se ejecute en un contenedor que pueda borrar o restaurar en cualquier momento. Aquí hay una señal instalación de MS SQL Server en Linux.

Conexión y uso de la BD

Necesitará conectarse a la base de datos no sólo mediante programación, sino también como administrador de la base de datos. Para ello, puedes utilizar un cliente de consola o un cliente gráfico. Cada método tiene sus ventajas por lo que te mostraré ambas opciones.

Cliente Gráfico

Yo uso el DBeaver cliente gráfico para conectarme a la base de datos Microsoft SQL server. Este programa está escrito en el lenguaje de programación Java, por lo que es multiplataforma y permite conexiones a muchos tipos de servidores de bases de datos.

dbeaver mssql

Cliente de consola

Utilizar el cliente de consola es esencial. Sobre todo si quieres gestionar servidores de forma eficiente. En Linux, la utilidad de consola sqlcmd se incluye con la instalación de MS SQL Server. Si estás acostumbrado a conectarte a una base de datos MySQL/MariaDB entonces el uso es similar.

Podemos conectarnos a la base de datos con este comando:

/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'd0_n0t_be_l@zy_h3r3'
Si estás usando docker, necesitas cambiar a docker primero, ver Cómo empezar a usar Docker correctamente. O introduzca este comando, que ejecutará el comando anterior directamente en el contenedor docker, que se llama "app_mssql_1":
docker exec -it app_mssql_1 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'd0_n0t_be_l@zy_h3r3'

Comandos básicos

Comandos como SELECT, INSERT, DELETE y UPDATE funcionan de forma muy similar a otras bases de datos relacionales que utilizan el lenguaje de consulta SQL.

Creación de una tabla:

CREAR TABLA tabla1 ( ID INT PRIMARY KEY, nombre NVARCHAR(50), apellido NVARCHAR(50), edad INT );

Un único servidor en ejecución puede contener visas bases de datos (también llamadas esquemas). Averiguar qué base de datos estamos utilizando actualmente:

select NOMBRE_BASE()
ir a
Base de datos de listas:
select nombre from sys.bases.datos
ir
Comando para cambiar la base de datos utilizada actualmente:
use tempdb
ir a
Crear base de datos: "test":
crear base de datos test
ir a
Eliminar la base de datos "test":
DROP DATABASE test
ir a
Vuelca todas las tablas de la base de datos seleccionada :
SELECT nombre_tabla FROM esquema_informacion.tablas WHERE tipo_tabla = 'TABLA BASE'
ir

Puede utilizar varias consultas SQL para listar usuarios en MS SQL Server, que consultan tablas del sistema que contienen información de usuarios. Una forma común es utilizar la siguiente consulta:

SELECT name, type_desc, create_date FROM sys.server_principals WHERE type IN ('S', 'U')
ir a
Esta consulta muestra los nombres de usuario, los tipos de usuario (S - Inicio de sesión SQL, U - Inicio de sesión Windows) y la fecha de creación del usuario. Debe tener privilegios suficientes para ejecutar la consulta.

Conexión de aplicaciones desde PHP

Para saber cómo conectarse a MS SQL Server desde PHP ver mi artículo conexión a MS SQL usando PHP desde Linux.

Conexión de aplicaciones Node.JS

Para conectar una aplicación escrita en NodeJS a un servidor de base de datos MS SQL Sever, necesitarás instalar un soporte. El llamado controlador de base de datos. Aquí en la documentación oficial hay un detallado guía sobre cómo instalar MS SQL ODBC, que permitirá la comunicación entre tu aplicación NodeJS y el servidor de bases de datos MS SQL Server.

Copia de seguridad y restauración de la base de datos

Microsoft SQL Server instalado en Linux almacena los datos en el directorio /var/opt/mssql/data/. Así que si estás usando docker, deberías tener este directorio ubicado en volumen que sea persistente y no en un contenedor. Porque cuando borras un contenedor, se borra todo su contenido. Puedes hacer una copia de seguridad de este directorio. Pero mejor que copiar los archivos es volcar la base de datos.

Para las copias de seguridad en las que creas un volcado de la base de datos, la consola es genial y puedes automatizar los comandos después. Vuelca la base de datos "YourDatabaseName" al archivo '/path/to/backupfile.bak' con el siguiente comando :

BACKUP DATABASE test TO DISK='/ruta/a/archivo_de_respaldo.bak'
Para restaurar una base de datos desde un archivo de volcado a una base de datos llamada "test", utilice el siguiente comando:
RESTORE DATABASE test FROM DISK = '/path/to/backupfile.bak' WITH REPLACE, RECOVERY
Restaure la base de datos si obtuvo una copia de los archivos de la base de datos del disco del servidor. Para ello, utilice el siguiente comando:
CREATE DATABASE [newdb] ON (FILENAME ='/srv/newdb.mdf'),(FILENAME = '/srv/newdb_log.ldf') FOR ATTACH

Todas las copias de seguridad deben hacerse entonces automáticamente y guardarse en algún almacenamiento geográficamente separado o solución de backup. Esta es la única manera de garantizar la seguridad de sus datos. Ejemplo Cómo escribir un script para realizar copias de seguridad de MS SQL Server ejecutándose en un contenedor Docker.

Video tutorial

Este es un vídeo demostrativo sobre cómo poner en marcha Microsoft SQL Server utilizando Docker y cómo conectarse a las bases de datos utilizando la consola y el cliente gráfico:

Licencia

Si usas software libre, las licencias son sencillas y no tienes que preocuparte por las licencias. En el caso del software propietario, es más complicado y a veces muy difícil. ¿Qué ocurre con Microsoft SQL Server?

MS SQL Server es una solución propietaria, por lo que debe acordarse de pensar en las licencias, porque si te olvidas de eso, ¡será un problema!

Microsoft ofrece las siguientes opciones a la hora de licenciar MS SQL Server:

  1. Evaluación (gratuita, sin derechos de uso de producción, límite de 180 días)
  2. Desarrollador (gratuito, sin derechos de uso de producción)
  3. Express (gratuito)
  4. Web (DE PAGO)
  5. Estándar (de pago)
  6. Estándar (de pago)
  7. Empresa (de pago)
  8. Empresa (de pago)
  9. Estándar (de pago)
  10. Empresa (de pago)
  11. Empresa Core (PAID)
  12. He adquirido una licencia a través de un canal de venta minorista y dispongo de una clave de producto para introducirla.
  13. Licencia de producto.

Si está ejecutando MS SQL Server utilizando docker, puede utilizar el parámetro MSSQL_PID para especificar qué licencia desea utilizar. Tienes las siguientes opciones:

  • Developer : Esto ejecutará el contenedor utilizando la Developer Edition
  • .
  • Express : Esto ejecutará el contenedor utilizando la Edición Express
  • .
  • Standard : Esto ejecutará el contenedor utilizando la Standard Edition
  • Enterprise : Esto ejecutará el contenedor utilizando la Enterprise Edition
  • EnterpriseCore : Esto ejecutará el contenedor utilizando la Enterprise Edition Core
Si no especifica una variable/licencia, la licencia Developer se establece por defecto.

A efectos operativos, deberá averiguar qué versión de MS SQL Server está utilizando y qué licencia tiene configurada.
Para averiguar la versión de MS SQL Server, utilice el comando:

SELECT @@VERSION
Averigua qué licencia estás utilizando:
SELECT SERVERPROPERTY('Edition');

Aunque la licencia Express es gratuita, tiene muchas limitaciones importantes. Las principales limitaciones son en cuanto al tamaño de la base de datos y los recursos del sistema utilizados. Los límites específicos son:

  • Tamaño máximo de la base de datos de 10 GB
  • Máximo de 1410 MB de memoria
  • Computación máxima de 1 socket o 4 núcleos
  • Algunas características no están deshabilitadas...
  • ect.

Página oficial de licencias de Microsoft SQL Server.

Desde luego si puedes elegir yo te recomendaría migrar la base de datos MS SQL a por ejemplo MySQL/MariaDB. Y si eres un usuario más exigente o usas Oracle, migrar a PotgreSQL. Esto solucionará tus problemas y preocupaciones de licencias.

Aquí tienes más información sobre MariaDB (Mysql) y PostgreSQL.

Base de datos maestra

El sistema de base de datos Microsoft SQL Server contiene una base de datos (esquema) llamada "master". Se trata de una base de datos especial del sistema. Esta base de datos es una de las bases de datos predeterminadas de MS SQL Server y contiene información y metadatos importantes que controlan todo MS SQL Server.

La siguiente información importante se almacena en la base de datos "master":

  • Datos sobre todas las demás bases de datos creadas en el servidor, incluida su ubicación en disco, estado y configuración.
  • Información sobre las bases de datos de inicio de sesión creadas en el servidor.
  • Información sobre nombres de inicio de sesión y permisos de usuario para todo el MS SQL Server.
  • Opciones de configuración y ajustes para MS SQL Server, como parámetros del servidor, métodos de autenticación, configuración de red, etc.
  • .
  • Algunas tablas internas y vistas del sistema que proporcionan acceso a información importante sobre el funcionamiento de MS SQL Server.

La base de datos "maestra" es fundamental para el correcto funcionamiento de MS SQL Server. Si se corrompiera o fallara, podría provocar problemas en todo SQL Server. Por lo tanto, es importante asegurarse de que se realiza una copia de seguridad de esta base de datos y de que está protegida frente a accesos no autorizados o riesgos de pérdida de datos.

Operando en Windows vs. Linux

Cuál es la diferencia entre la versión Windows de MS SQL Server y la versión GNU/Linux?

El motor de base de datos principal de SQL Server es el mismo tanto para Windows como para Linux. Sin embargo, MS SQL Server en Linux no soporta actualmente algunas características. Si está interesado en más detalles consulte la documentación en Características y servicios no soportados. Si tiene algún problema, eche un vistazo a la sección Problemas conocidos.

Es mejor el rendimiento de MS SQL Server en Linux que en Windows? Se dice que MS SQL Server en Linux proporciona un rendimiento ligeramente mejor, en general se puede confiar en esta afirmación, porque al menos Windows tiene demandas significativas en los recursos del sistema. No he probado personalmente el rendimiento porque no tengo el tiempo y sobre todo el valor para tratar con el sistema operativo Windows. Por lo tanto, no puedo dar tiros específicos.

Más información aquí: MS SQL Server Linux FAQ

Enlaces

En Internet hay mucha información y documentación sobre la ejecución de MS SQL Server en Linux. Aquí añado algunos enlaces valiosos:

¿Vale la pena pasarse a Linux?

¡Sí que merece la pena!
Al ejecutar MS SQL Server en Linux te ahorras el coste de una licencia de SO Windows y tiempo (es decir, dinero) en mantenimiento, porque gestionar un servidor con SO Linux requiere menos tiempo y es significativamente menos problemático.

No olvide tampoco que las aplicaciones programadas en C# alias .NET ¡pueden ejecutarse en Linux! Esto por fin le permite migrar fácilmente su infraestructura de aplicaciones de Windows a Linux sin tener que reescribir su aplicación y cambiar el motor de base de datos. Después de todo, la propia Microsoft ya ha migrado cloud Azure a GNU/Linux en su mayor parte.

Artículos sobre un tema similar

VMware frente a Proxmox: comparación de rendimiento
GitLab CI/CD: automatización de pruebas y despliegue de aplicaciones
Migración de VPS de VMware a Proxmox
Cambio en las licencias de VMware
Copia de seguridad: el Proxmox Backup Server
Linux como router y cortafuegos
Cómo subir una imagen Docker al Registro Docker
Linux: gestión de volúmenes lógicos
Software RAID para Linux
Ejecutar una aplicación web detrás de un proxy
Migración de correo electrónico
Construcción multietapa Docker
Copia de seguridad de los datos al encender el ordenador
Podman
Importación de Windows a la virtualización Proxmox
Docker y correo PHP
Virtualización Proxmox
Docker y Cron
Lenovo ThinkPad X1 Carbon: puesta en servicio del módem LTE EM7544
Proyecto Yocto: Cree un sistema operativo personalizado para dispositivos integrados
Preparación de un servidor Linux para ejecutar una aplicación web en Python
Cómo solucionar el bajo rendimiento de los archivos compartidos en Docker
Cómo empezar a utilizar Docker correctamente
Instalación de Linux en un servidor HPE ProLiant DL320e dedicado
Cómo poner a prueba una aplicación web
Por qué utilizar el sistema de archivos JFS
Cómo arrancar desde un disco de 4TB con GTP usando UEFI
Sistema de archivos Btrfs
Raspberry PI
WINE - ejecución de programas Windous en Linux
Sistema operativo GNU/Linux

Boletin informativo

Si está interesado en recibir noticias puntuales por correo electrónico.
Puedes registrarte rellenando tu email suscripción de noticias.


+