Introducción a los Sistemas Gestores de Bases de Datos:

En este artículo veremos como se instalan y se configuran los distintos Sistemas Gestores de Bases de Datos en equipos Debian 12. Este proceso dependiendo de qe gestor estemos hablando, puede ser más o menos complejo.

Un sistema gestor de bases de datos (SGBD) es un software que facilita la creación, administración y manipulación de bases de datos. Permite a los usuarios almacenar, organizar y consultar grandes volúmenes de datos de manera eficiente y segura. Los SGBD ofrecen herramientas para gestionar la integridad y seguridad de los datos, realizar consultas complejas y generar informes, entre otros servicios.

Objetivo:

La misión principal es como instalar y configurar en equipos Debian 12, los siguientes SGBD:

  • Oracle 19c.

  • PostgreSQL.

  • MariaDB.

  • MongoDB.

Instalación de Oracle 19c en Debian 12:

img

Oracle originalmente no está pensado para ser instalado el sistemas Debian , sino para distribucaiones RedHat y equivalentes con paquetes RPM . Así que el primer paso es transformar el paquete RPM a un paquete DEB gracias a la herramienta Alien.

Para instalar alien en nuestro equipo Debian:

sudo apt install alien

Con alien instalado hay que descargar el paquete RPM de Oracle, desde su página web:

img

Para transformar el paquete de rpm a deb (tarda bastante):

alien -c --scripts oracle-database-ee-19c-1.0-1.x86_64.rpm

Con el paquete preparado ahora es momento preparar el sistema.

Preparación del Sistema

Con el paquete descargado es momento de preparar el equipo para la instalación:

Dependecias:

Para que Oracle funcione correctamente, se necesita instalar siguientes dependencias:

sudo apt install bc ksh libaio1 gawk
  • bc: Calculadora de precisión arbitraria para realizar cálculos matemáticos complejos desde la terminal.
  • ksh: Intérprete de comandos (shell) de Unix que proporciona un entorno avanzado para scripting.
  • libaio1: Biblioteca para realizar operaciones de entrada/salida asíncrona, mejorando el rendimiento de aplicaciones de disco.
  • gawk: Implementación del lenguaje awk para procesamiento y manipulación de datos en texto.

img

Por otra parte necesita la herramienta netstat. Para ver a que paquete pertenece:

sudo apt install apt-file
sudo apt-file update

sudo apt-file search netstat | grep bin/netstat$

img

Como se ve, pertenece al paquete net-tools, así que procedemos a instalarlo:

sudo apt install net-tools

Configuraciones Previas:

También hay que configurar una serie de parámetros que son:

Darle una ip estatica al equipo:

sudo nano /etc/network/interfaces

Con el siguiente contenido (estos son mis datos, modificar según la necesidad):

auto enp1s0
iface enp1s0 inet static
address 192.168.122.123
netmask 255.255.255.0
gateway 192.168.122.1
sudo systemctl restart network

img

Declarar la misma ip en el archivo hosts:

sudo nano /etc/hosts

img

Crear el grupo dba, y el usuario oracle y añadir tanto oracle como a debian al grupo dba.

sudo groupadd dba
sudo useradd -m -g dba -s /bin/bash oracle
sudo passwd oracle
sudo usermod -aG dba debian
sudo usermod -aG dba oracle

O tambien:

sudo groupadd dba
sudo adduser --ingroup dba oracle
sudo passwd oracle
sudo adduser debian dba

img

Instalación y configuración

Con el equipo preparado, es momento de instalar el paquete convertido a deb con dpkg:

sudo dpkg -i oracle-database-ee-19c_1.0-2_amd64.deb

img

Luego de la instalación para configurar Oracle hay que utilizar un script que trae por defecto que esta en /etc/init.d/oracledb_ORCLCDB-19c con el parámetro configure:

sudo /etc/init.d/oracledb_ORCLCDB-19c configure

img

Pero dará un error porque hay que modificar una línea, en la sección configure_perform , como se ve en la imagen:

-J-Doracle.assistants.dbca.validate.ConfigurationParams=false

img

Ahora sí, al ejecutar el script, arranca sin problemas:

sudo /etc/init.d/oracledb_ORCLCDB-19c configure

Con todo lo anterior configurado, al ejecutarlo ya funciona y se configura sin problemas:

img

Por último hay que declarar las variables de entorno de oracle al final del archivo ~/.bashrc:

sudo nano /home/debian/.bashrc

Con este contenido:

export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1
export ORACLE_SID=ORCLCDB
export ORACLE_BASE=/opt/oracle
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export PATH=$ORACLE_HOME/bin:$PATH

img

Y aplico los cambios con:

source ~/.bashrc

. ~/.bashrc

Usando Oracle:

Para conectarse a la base de datos como sysdba es con el comando:

sqlplus / as sysdba

img

  • Lo que conecta automáticamente y permite entrar en la base de datos (si falla comprobar que el usuario esta dentro del grupo dba, y que tenga las variables correctas).

El siguiente paso antes de empezar a usar Oracle, hay que modificar la sesión con para permitir la creación de usuarios y demás funciones en la sesión actual:

alter session set "_ORACLE_SCRIPT=true;

img

Ahora he creado un usuario y le he dado algunos privilegios de ejemplo (luego fueron modificados), le tuve que cambiar la contraseña y posteriormente ya me dejó entrar (el usuario lleva comillas al ser minúscula, ya que sin ellas me lo detectaba como mayúsculas y no funcionaba):

img

img

He creado una tabla de ejemplo de videojuegos para esta parte:

img

Configuración del Cliente Remoto:

En el cliente remoto, en este caso Debian también, lo primero es descargar sqlplus de su página, en mi caso los 2 paquetes zip:

img

Estos zip hay que descomprimirlos en el directorio /opt/oracle (si no existe como es mi caso, crearlo manualmente) y declarar las variables de entorno de oracle nueva:

sudo unzip instantclient-sqlplus-linux.x64-21.4.0.0.0dbru.zip
export LD_LIBRARY_PATH=/opt/oracle/instantclient_21_4:$LD_LIBRARY_PATH
export PATH=$LD_LIBRARY_PATH:$PATH
source ~/.bashrc

img

El siguiente paso es habilitar las conexiones remotas iendo al archivo /opt/oracle/product/19c/dbhome_1/network/admin/listener.ora desde la máquina servidor, y en la parte de host ponerlo todo a 0.0.0.0.

img

De nuevo en el servidor, hay que poner en escucha a oracle y para ello es con lsnrctl (si falla porque no se encuentra es porque no estan bien configurados los parametros de la red o las variables).

lsnrctl start

img

Y por último en el cliente, hay que ir al mismo archivo que en el servidor (si no existe se crea y se deja con el siguiente contenido) poniendo la ip del servidor:

img

img

Y para conectarse desde el cliente al servidor es con:

sqlplus usuario/pass@//ip:puerto/bbdd

Si falla, hay que ingresar el usuario en mi caso andres, y en el campo de la contraseña pass@//ip:puerto/bbdd, es decir:

sqlplus "andres"/debian12345.@//192.168.122.123:1521/ORCLCDB 

Todo eso en el campo de la contraseña. En mi caso tuve que poner “andres” por el tema de las minúsculas que explique antes.

img

Como se ve en la imagen de arriba, desde el cliente se puede conectar a la base de datos y hacer una consulta sobre la tabla de videojuegos que cree antes en el servidor.

Para finalizar, hay que recordar que cada vez que se inicie el sistema hay que iniciar oracle con:

img

Instalación de PostgreSQL en Debian 12:

img

PostgreSQL es un sistema de gestión de bases de datos relacional y orientado a objetos.

Desarrollado como software de código abierto , es una gran alternativa, ya que entre sus funcionalidades, se incluyen la gestión de transacciones, recuperación ante fallos, replicación y soporte para extensiones, lo que lo convierte en una opción ideal tanto para pequeñas aplicaciones como para grandes sistemas empresariales.

Instalación y configuración:

Para instalar Postgresql en un equipo basado en Debian , es mucho más sencillo que el caso de Oracle , ya que se encuentra en los mismos repositorios:

sudo apt install postgresql

img

Ahora compruebo que no ha habido errores durante la instalación:

sudo service postgresql status

img

Usando Postgre:

Con todo funcionando correctamente, he accedido a la base de datos y le he modificado la contraseña al usuario postgres. También he creado un usuario y le he dado privilegios (como prueba):

sudo -u postgres psql
alter user postgres with password 'debian12345';

img

Luego he creado la base de datos practica3 y he creado la misma tabla de antes:

create database practica3;

c\ practica 3
  • Donde c\ es para usar la base de datos recién creada.

img

Y le he añadido algunos datos:

img

Ahora voy a configurar un usuario llamado andres:

create user andres with password 'debian12345';

En el archivo /etc/postgresql/15/main/pg_hba.conf hay que añadir la línea para el usuario andres pueda conectarse remotamente a la base de datos llamada practica3. Hay que añadirlo al final del archivo y reiniciar el servicio:

sudo nano /etc/postgresql/15/main/pg_hba.conf

Añadiendo en mi caso:

host    practica3    andres    0.0.0.0/0    scram-sha-256

Reinicio para aplicar los cambios:

sudo systemctl restart postgresql

O también:

sudo service postgresql restart 

img

Y por último le doy privilegios sobre la tabla videojuegos con:

c\ practica3

grant select, insert, update, delete on table videojuegos to andres;
  • Esta tabla, pertenece a la base de datos antes creada practica3.

img

img

Configuración del Acceso Remoto:

Para configurar el acceso remoto y que los clientes puedan conectarse al servidor Postgres, hay que configurarlo para escuchar (en este caso, la mejor opción es solamente añadir los equipos remotos, para más seguridad) en todas las direcciones ip. Para ello, hay que modificar el archivo de configuración /etc/postgresql/15/main/pg_hba.conf y descomentar la parte de listen_addresses que viene comentada por defecto, quitando el localhost y añadir '*'.

img

El siguiente paso, para permitir las conexiones remotas es modificar el archivo /etc/postgresql/15/main/pg_hba.conf y añadirle mi red que es 192.168.122.0/24 (en esta captura no aparece el usuario andres porque fue tomada antes de crearlo).

img

Y reinicio postgres, para aplicar cambios:

sudo service postgresql restart

img

Configuración del Cliente Remoto:

Ahora toca instalar en el cliente, el paquete postgresql-client:

sudo apt install postgresql-client

img

Y para conectarnos remotamente al servidor es de la siguiente manera:

psql -h ip -p puerto -U usuario -d basededatos

En este ejemplo, me he conectado con el usuario postgres . Pero en la siguiente lo haré con el usuario andres.

psql -h 192.168.122.123 -p 5432 -U postgres -d practica3
  • La ip, es la del servidor donde hemos instalado Postgre.

  • Usa el puerto 5432 (opcional), con el usuario postgres conectandome a la base de datos practica3.

img

Y por último para conectarme con el usuario andres (ya configurado más arriba):

img

Y de esta manera se instala Postgresql y se permite el acceso de usuarios remotos. Hay muchas más configuraciones, esto es una instalación y uso simple.

Instalación de Mariadb en Debian 12:

MariaDB es un sistema de gestión de bases de datos derivado de MySQL con licencia GPL (General Public License). Es desarrollado por Michael (Monty) Widenius fundador de MySQL, la fundación MariaDB y la comunidad de desarrolladores de software libre.

Introduce dos motores de almacenamiento nuevos, uno llamado Aria (que reemplaza a MyISAM) y otro llamado XtraDB (en sustitución de InnoDB).

Tiene una alta compatibilidad con MySQL ya que posee las mismas órdenes, interfaces, API y bibliotecas, siendo su objetivo poder cambiar un servidor por otro directamente

Instalación y configuración:

Para instalar Mariadb, es de la misma forma que Postgre, ya que se encuentra tambien dentro de los repositorios.

sudo apt install mariadb-server

Una vez instalado, inicio el servicio de MariaDB, para ponerlo en funcionamiento:

sudo systemctl start mariadb

Y de paso lo habilito para que se inicie automáticamente al arrancar (si fuera necesario):

sudo systemctl enable mariadb

img

img

El siguiente paso es configurarlo de manera segura con sudo mysql_secure_installation lo cual hará una serie de preguntas, como por ejemplo, la contraseña de root, eliminar usuarios anónimos, evitar el acceso de remoto de root, etc:

sudo mysql_secure_installation

img

img

Ahora, me conecto como root y creo al usuario andres con el % para que pueda conectarse remotamente, y le doy privilegios para que pueda ver esa base de datos llamada practica3, creada con:

sudo mysql -u root
create database practica3;

create user 'andres'@'%' identified by 'contraseña';

grant all privileges on practica3.* to 'andres'@'%' identified by 'debian12345';

flush privileges;
  • En la cual tengo una tabla de videojuegos para comprobar que se tiene acceso.

img

img

Luego de darle privilegios, hacer un flush privileges para aplicar.

Me conecto con el usuario andres, usando esa base de datos y la tabla:

sudo mysql -u andres -p
use practica3;

select titulo from Videojuegos;

img

Configuración de Acceso Remoto:

Como expliqué también en la práctica de herramientas de fortaleza de contraseñas, para habilitar el acceso remoto en Mariadb, hay que modificar el archivo /etc/mysql/mariadb.conf.d/50-server.cnf y poner 0.0.0.0 en la sección de bind-address para permitir cualquier conexión.

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

img

Y reinicio Mariadb para que se aplique:

sudo systemctl restart mariadb.service

img

Configuración del Cliente Remoto:

En el equipo cliente, hay que instalar mariadb-client para permitir conectarse al servidor:

sudo apt install mariadb-client

Para conectarse al servidor que tiene la ip 192.168.122.123, y poder listar la tabla Videojuegos creada antes:

img

  • Nota: la máquina servidor se llama debianbbdd y la cliente debian.

Instalación de MongoDB en Debian 12:

MongoDB es un sistema de base de datos NoSQL, orientado a documentos y de código abierto.

En lugar de guardar los datos en tablas, tal y como se hace en las bases de datos relacionales, MongoDB guarda estructuras de datos BSON (una especificación similar a JSON) con un esquema dinámico, haciendo que la integración de los datos en ciertas aplicaciones sea más fácil y rápida.

MongoDB es una base de datos adecuada para su uso en producción y con múltiples funcionalidades. Esta base de datos se utiliza mucho en la industria, contando con implementaciones en empresas como MTV Network,2​ Craigslist,3​ Foursquare.4​

El código fuente está disponible para los sistemas operativos Windows, GNU/Linux, OS X y Solaris.

MongoDB no usa tablas , en su lugar utiliza documentos en los cuales, se añaden en las colecciones:

Preparación del Sistema:

Para poder instalar Mongodb se puede hacer desde su web o desde la línea de comandos, en mi caso lo he hecho desde la linea de comandos. Lo primero es obtener la clave gpg y añadir el repositorio de mongodb a nuestro equipo:

curl -fsSL https://pgp.mongodb.com/server-7.0.asc | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/mongodb-server-7.0.gpg

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list

img

Pero personalmente me daba error, así que buscando en la página de Mongo:

https://www.mongodb.com/community/forums/t/mongo-6-x-on-debian-12/232593/4

Encontré la solución que fue crear este repositorio con el siguiente contenido:

deb https://repo.mongo.org/apt/ubuntu jammy/mongodb-org/6.0 multiverse

img

  • Que el repositorio forme parte de Ubuntu, no afecta para nada en este caso. El equipo donde se ha instalado es Debian 12.

Instalación y configuración:

Ahora sí, con el repositorio funcionando y habiendo hecho un apt update, procedo a instalar Mongodb con:

sudo apt update

sudo apt install -y mongodb-org

img

Inicio el servicio y compruebo el estado para que no haya errores:

sudo systemctl start mongod.service

sudo systemctl status mongod.service

img

Usando Mongosh:

Ahora entro al sistema con mongosh:

mongosh

Creo el usuario andres (como admin para hacer pruebas):

db.createUser(
  {
    user: "andres",
    pwd: "debian12345",
    roles: ["readWrite", "dbAdmin"]
  }
)

img

También he creado un documento de prueba en la colección videojuegos:

db.videojuegos.insertOne({
    titulo: "Super Mario Bros",
    desarrolladora:: "Nintendo",
    lanzamiento: new Date("1985-09-13"),
    genero: "Plataformas",
    plataforma: "NES"
})

Para poder ver el documento recien creado:

db.Videojuegos.find()
  • Los datos que he introducido, en otros gestores se llaman tablas, aqui son documentos.

img

Si quisiera añadir otro documento, el proceso es el mismo, indicando el nombre de la colección que es Videojuegos, solo que al realizar la consulta con db.Videojuegos.find(), obtendriamos los dos documentos del ejemplo, tanto “Super Mario Bros” como “The Legend of Zelda”.

db.videojuegos.insertOne({
    titulo: "The Legend of Zelda",
    desarrolladora: "Nintendo",
    lanzamiento: new Date("1986-02-21"),
    genero: "Aventura",
    plataforma: "NES"
})

Devolviendo algo como esto:

db.Videojuegos.find()
[
    {
        "_id": ObjectId("..."),
        "titulo": "Super Mario Bros",
        "desarrolladora": "Nintendo",
        "lanzamiento": ISODate("1985-09-13T00:00:00Z"),
        "genero": "Plataformas",
        "plataforma": "NES"
    },
    {
        "_id": ObjectId("..."),
        "titulo": "The Legend of Zelda",
        "desarrolladora": "Nintendo",
        "lanzamiento": ISODate("1986-02-21T00:00:00Z"),
        "genero": "Aventura",
        "plataforma": "NES"
    }
]

Configuración para Acceso Remoto:

En Mongodb para habilitar las conexiones remotas es similar a Mariadb, hay que modificar su archivo de configuración /etc/mongod.conf y editar la sección bindIp a 0.0.0.0 y authorization: 'enabled', guardar y reiniciar el servicio.

sudo nano /etc/mongod.conf

Modificando la sección bindIp, como ya he dicho por 0.0.0.0para permitir todo (aunque no es recomendable, para este artículo es suficiente).

bindIp: 0.0.0.0

img

Para guardar los cambios y se apliquen, reinicio el servicio de mongodb, y compruebo que no haya errores:

sudo systemctl restart mongod.service

sudo systemctl status mongod.service

img

Configuración del Cliente Remoto:

En el quipo cliente hay que instalar mongosh, en mi caso, lo he decargado de su web: https://www.mongodb.com/try/download/shell eligiendo la version debx64 (sin arm) y lo he instalado con dpkg.

sudo dpkg -i mongodb-mongosh_2.0.2_amd64.deb

img

Para conectarse desde el cliente al servidor a la base de datos test:

mongosh --host ip --username user --password pass --authenticationDatabase test

mongosh --hpst 192.168.122.123 --username andres --password debian12345 --authenticationDatabase test

Una vez dentro ya he podido hacer una consulta con db.videojuegos.find() de la tabla que cree antes en el servidor.

img

Y de esta forma se consigue instalar Mongodb y desde un cliente conectarse a la base de datos del servidor.