Instalar MariaDB en Debian y realizar operaciones básicas

Por: Juan
06/09/2025

MariaDB

En este artículo expongo mis notas sobre como poner en marcha y gestionar cuestiones básicas de MariaDB sobre Debian Trixie.

¿Qué es MariaDB?

MaríaDB es una base de datos de tipo relacional. El proyecto surge de un fork de MySQL, luego la adquisición de Sun Microsystems por parte de Oracle Corporation. Por temor a que el código pase a ser cerrado, se realizó un fork de MysQL y el proyecto de código abierto pasó a llamarse MariaDB. Si alguna vez trabajaste con MySQL, podés hacerlo sin problemas con MariaDB.

Instalar paquetes necesarios

En Debian, 3 paquetes son necesarios. El paquete 'dev' de MariaDB sólo lo reservamos en caso de que debamos realizar compilaciones dependientes.

Para instalar MariaDB:

sudo apt install mariadb-server mariadb-client mariadb-backup

Luego habilitamos el servicio y lo iniciamos.

sudo systemctl enable mariadb
sudo systemctl start mariadb

Conectando a MariaDB

La cuenta de root

No es necesario crear usuario y contraseña, ya que MariaDB usa unix socks, por lo que el usuario root puede entrar a la consola de MariaDB sin más credenciales que su condición de administrador.

sudo mariadb -u root -p

De cualquier manera, es posible establecer un password para root, pero en ese caso el mismísmo usuario root deberá proveerlo para iniciar sesión.

ALTER USER 'root'@'localhost' IDENTIFIED BY '<password>';

Considero que esto es innecesario, ya que el usuario root es quien puede realizar todas las operaciones sobre el servicio. A mi entender, si pretendo gestionar todas las bases con un único usuario, parece más razonable crear un usuario específico para tal fin con los privilegios establecidos para cada base de datos, y reservar el root sólo para casos de emergencia o para gestiones en un nivel superior.

Tareas iniciales de seguridad

Primero, eliminamos cualquier usuario 'anónimo' que se haya creado al instalar la base de datos:

DELETE FROM mysql.user WHERE User='';

De manera secundaria, borramos todas entradas que permitan el acceso de root desde el exterior:

DELETE FROM mysql.user WHERE User='root' AND Host!='localhost';

Potencialmente puden existir tablas de pruebas. En ese caso las eliminamos:

DROP DATABASE IF EXISTS test;

Todos estos cambios en las tablas de sistema no serán aplicados, a menos que le indiquemos hacerlo. Por eso cada vez que modificamos elementos del sistema, al finalizar debemos decirle que cometa los cambios almacenados en la memoria en el disco:

FLUSH PRIVILEGES;

Hasta aqui hemos puesto a punto el servidor MariaDB de manera mínima como para comenzar a trabajar.

Tareas habituales

Crea base de datos

CREATE DATABASE IF NOT EXISTS <nombre de base de datos>;

Añadir un usuario

En el siguiente comando, el usuario puede acceder desde cualquier ubicación (no sólo local). Para limitarlo localmente debería cambiar '%' por 'localhost' (o la ubicación desde dónde quiero permitir su acceso).

CREATE USER '<nombre de usuario>'@'%' IDENTIFIED BY '<contraseña>';

Muestra los privilegios

SHOW GRANTS FOR '<nombre de usuario>'@'%';

Crear un usuario con misma autoridad que root

Con esta sentencia se debe tener particular cuidado, ya que crea otro 'superusuario' en la tabla, con los mismos privilegios y capaz de modificar al usuario root. La finalidad de esto, habiendo impedido el acceso remoto a root, es tener un usuario con todos los privilegios, pero desconocido para los atacantes.

GRANT ALL PRIVILEGES ON *.* TO `<usuario>`@`%` IDENTIFIED BY '<password>' WITH GRANT OPTION

Otorgar privilegios completos, pero sólo para una base de datos específica

Esto es lo ideal, ya que el usuario podrá unicamente trabajar con una base de datos específicamente.

Para otorgar acceso local únicamente:

GRANT ALL PRIVILEGES ON <base de datos>.* TO '<usuario>'@'localhost' IDENTIFIED BY '<password>';

Puedo cambiar 'localhost' por: '%', entonces el usuario tendrá acceso desde cualquier parte:

GRANT ALL PRIVILEGES ON <base de datos>.* TO '<usuario>'@'%' IDENTIFIED BY '<password>';

Activar binlogs

Si se activan binlogs, el servidor almacenará un log de las operaciones de escritura en las bases. Esto permite restaruar hasta el punto exacto en el cual se produjo un incidente. Para eso, deberemos editar el archivo:

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

Alli, en el apartado [mariadbd] deberemos activar algunas opciones:

[mariadbd]

...

server-id              = 1
log_bin                = /var/log/mysql/mysql-bin.log
expire_logs_days        = 5
max_binlog_size        = 100M
binlog_format = ROW

...

Dónde:

Luego se deberá crear el directorio de almacenamiento y darle permisos correctos:

sudo mkdir -p /var/log/mysql
sudo chown -R mysql:mysql /var/log/mysql
sudo chmod 750 /var/log/mysql

Reiniciar el servicio luego de hacer los cambios.


En esta entrada: Debian Trixie MariaDB