Cómo instalar y configurar MariaDB en Ubuntu y CentOS

Aprendamos a instalar y configurar MariaDB, un popular sistema de gestión de bases de datos relacionales MySQL (RDBMS) de código abierto.

Es desarrollado por la comunidad y tiene la opción de soporte comercial. MariaDB tiene la intención de seguir siendo altamente compatible con MySQL, aunque existen algunas desviaciones.

En este artículo, cubriremos la instalación y configuración de MariaDB en Ubuntu 20.x y CentOS 7.x/8.x y al final revisaremos algunas de las mejores prácticas para asegurar y mejorar su rendimiento.

Maria DB en Ubuntu

En Ubuntu 20.x, MariaDB está disponible directamente desde sus repositorios predeterminados. Usaremos apt para esta tarea.

Primero actualice los datos de los repositorios apt por:

$ sudo apt update

Una vez que se actualicen los datos del repositorio, ejecute:

$ sudo apt install mariadb-server

Esto instalará MariaDB y los paquetes necesarios. Confirme con ‘Y’ para cualquier mensaje que pueda recibir durante la ejecución del comando anterior.

Do you want to continue? [Y/n] Y

MariaDB en CentOS 7.x

Para CentOS 7.x, la versión MariaDB disponible del repositorio predeterminado de CentOS es 5.x. Vamos a instalar la última versión disponible de MariaDB.

Para esto, primero debemos configurar un repositorio yum adicional. MariaDB proporciona una manera fácil de usar el script mariadb_repo_setup. Para obtener la configuración del repositorio, ejecute los siguientes comandos en su sistema CentOS 7.x:

$ sudo yum install wget
$ wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup
$ chmod +x mariadb_repo_setup
$ sudo ./mariadb_repo_setup

Este script configurará el repositorio yum requerido para instalar automáticamente la última versión de MariaDB. Al momento de escribir este artículo, es 10.x.

O, en caso de que desee utilizar el método manual, puede configurar un repositorio yum manual creando un nuevo archivo de repositorio como:

$ sudo vi /etc/yum.repos.d/MariaDB.repo

Luego agregue los siguientes detalles al archivo de repositorio y guárdelo:

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.5/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Ahora, para instalar MariaDB, ejecute el siguiente comando:

$ sudo yum install MariaDB-server

Confirme las indicaciones que aparecen durante la instalación ingresando ‘y’:

Is this ok [y/d/N]: y

Esto completa la instalación del servidor MariaDB y los paquetes dependientes.

MariaDB en CentOS 8.x

Para CentOS 8.x, la versión disponible de los repositorios predeterminados es 10.3 o posterior. Podemos instalar MariaDB directamente usando el comando DNF:

sudo dnf install mariadb-server

De lo contrario, para obtener la última versión disponible, puede seguir la forma manual como se indica en la sección anterior para CentOS 7.x y eso debería ayudarlo a trabajar.

Iniciando MariaDB

En una máquina Ubuntu, tendrá el servicio MariaDB ejecutándose inmediatamente después de la instalación, mientras que para CentOS, debemos habilitar e iniciar manualmente los servicios relevantes.

En cualquier caso, tanto para Ubuntu como para CentOS, ejecute los siguientes comandos para iniciar el servicio MariaDB, habilitarlo en el arranque y verificarlo:

$ sudo systemctl start mariadb.service
$ sudo systemctl enable mariadb.service
$ sudo systemctl status mariadb.service

Producción:

$ sudo systemctl start mariadb.service
$ sudo systemctl enable mariadb.service
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
$ sudo systemctl status mariadb.service
● mariadb.service - MariaDB 10.5.8 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           └─migrated-from-my.cnf-settings.conf
   Active: active (running) since Thu 2020-12-31 13:20:04 IST; 13s ago
     Docs: man:mariadbd(8)
           https://mariadb.com/kb/en/library/systemd/
 Main PID: 13521 (mariadbd)
   Status: "Taking your SQL requests now..."
   CGroup: /system.slice/mariadb.service
           └─13521 /usr/sbin/mariadbd

Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] InnoDB: 10.5.8 started; log sequence number 45118; transaction id 20
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] Plugin 'FEEDBACK' is disabled.
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] InnoDB: Buffer pool(s) load completed at 201231 13:20:04
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] Server socket created on IP: '::'.
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] Reading of all Master_info entries succeeded
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] Added new Master_info '' to hash table
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] /usr/sbin/mariadbd: ready for connections.
Dec 31 13:20:04 centos7vm mariadbd[13521]: Version: '10.5.8-MariaDB'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MariaDB Server
Dec 31 13:20:04 centos7vm systemd[1]: Started MariaDB 10.5.8 database server.
$

Asegurar MariaDB

Como primer paso después de la instalación de MariaDB, debemos asegurar su implementación configurando una contraseña de root, deshabilitando el inicio de sesión root remoto, eliminando la base de datos de prueba y los usuarios anónimos, y finalmente recargando los privilegios.

Ejecute el siguiente comando para fortalecer MariaDB:

$ sudo mysql_secure_installation

Puede seguir las indicaciones predeterminadas con acciones sugeridas a menos que tenga un requisito específico para desviarse.

Producción:

$ sudo mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] n
 ... skipping.

You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] n
 ... skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
$

Aquí usaremos la autenticación del sistema, así que no configure una contraseña raíz separada para MariaDB, ya que ya es segura. Si lo necesita, siempre puede configurar una contraseña de root separada también.

Validación de configuración

Para verificar su configuración de MariaDB, ejecute (especifique la contraseña que configuró mientras ejecutaba mysql_secure_installation o, si se omite en ese momento, use las credenciales de raíz de su sistema):

$ sudo mysqladmin -u root -p version
Enter password:
mysqladmin  Ver 9.1 Distrib 10.5.8-MariaDB, for Linux on x86_64
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Server version          10.5.8-MariaDB
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/lib/mysql/mysql.sock
Uptime:                 53 min 17 sec

Threads: 2  Questions: 77  Slow queries: 0  Opens: 20  Open tables: 14  Queries per second avg: 0.024
$

Puede configurar una nueva cuenta de administrador en lugar de la raíz como se muestra a continuación (cambie el valor de la contraseña con el que desea configurar para la cuenta de administrador):

$ sudo mariadb
Welcome to the MariaDB monitor.  Commands end with ; or g.
Your MariaDB connection id is 44
Server version: 10.5.8-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

MariaDB [(none)]> GRANT ALL ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
Query OK, 0 rows affected (0.003 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> exit
Bye
$

Verifique el acceso con el nuevo usuario administrador como (ingrese la contraseña establecida en el paso anterior):

$ mysqladmin -u admin -p version
Enter password:
mysqladmin  Ver 9.1 Distrib 10.5.8-MariaDB, for Linux on x86_64
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Server version          10.5.8-MariaDB
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/lib/mysql/mysql.sock
Uptime:                 56 min 59 sec

Threads: 2  Questions: 83  Slow queries: 0  Opens: 20  Open tables: 14  Queries per second avg: 0.024
$

Optimización del sistema operativo

Después de instalar y asegurar su configuración de MariaDB, debe tomar medidas para ajustar su sistema operativo y base de datos para un rendimiento óptimo. Este ajuste variará según la configuración de su sistema, el tipo de uso, la cantidad de usuarios y otros factores.

Desde la perspectiva del sistema operativo, algunos parámetros del sistema se pueden configurar para MariaDB que discutiremos ahora.

Configuración del kernel de Linux: programador de IO

Los planificadores de E/S recomendados para MariaDB son noop y fecha límite. Para verificar, use cat /sys/block/${DEVICE}/queue/scheduler

$ sudo cat /sys/block/sda/queue/scheduler
[mq-deadline] kyber bfq none
$

Se puede realizar un cambio temporal emitiendo el siguiente comando y su efecto, si lo hubiere, será inmediato en el rendimiento del sistema:

$ sudo echo noop > /sys/block/sda/queue/scheduler

Para que sea persistente, deberá configurarlo en el archivo de configuración de GRUB como se muestra a continuación en /etc/default/grub , reconstruir GRUB y reiniciar el sistema.

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop"

Límites de recursos: límite de archivos abiertos

Linux generalmente limita la cantidad de descriptores de archivos que cada proceso puede abrir. Para un sistema de base de datos activo, este límite puede superar fácilmente o afectar el rendimiento. En muchos sistemas Linux, este límite predeterminado es 1024. Además, existe una opción de límites flexibles y estrictos.

Para aumentar el límite, puede agregar las siguientes líneas en su /etc/security/limits.conf:

mysql soft nofile 65535
mysql hard nofile 65535

Será necesario reiniciar el sistema después de que el usuario de mysql pueda ver y usar los nuevos límites. Esto se puede comprobar como:

$ ulimit -Sn
65535
$ ulimit -Hn
65535

Límites de recursos: tamaño del archivo principal

Linux limita el tamaño de los archivos principales como se ve en el caso anterior. Nuevamente, esto tiene un límite flexible y estricto y, de forma predeterminada, el límite flexible se establece en 0, lo que deshabilita efectivamente la generación de archivos centrales. Para permitir la generación de archivos principales (otras configuraciones necesarias para la generación de volcado de núcleo), podemos aumentar este valor en /etc/security/limits.conf como:

mysql soft core unlimited
mysql hard core unlimited

Después de reiniciar el sistema, el usuario de mysql podrá ver los nuevos valores usando el comando ulimit como:

$ ulimit -Sc
unlimited
$ ulimit -Hc
unlimited

Configurar el intercambio

El valor de intercambio en Linux determina la probabilidad de que el sistema intercambie una página de la memoria para intercambiar el espacio configurado en el sistema. Por lo general, el valor predeterminado se establece en 60, que se puede verificar desde:

sysctl vm.swappiness

Su valor puede variar de 0 a 100, donde un valor más bajo significa una menor probabilidad de intercambio. En un servidor de base de datos que ejecuta solo MariaDB, nos gustaría reducir este valor a 0 para evitar usar el intercambio tanto como sea posible. Tenga en cuenta aquí que establecer el valor de swappiness en 0 debe hacerse con precaución teniendo en cuenta otros factores de diseño del sistema, como en el caso de un alto uso de memoria o carga de E/S, existe la posibilidad de que el núcleo elimine el proceso de falta de memoria (OOM).

Dado que se recomienda una configuración de capacidad de intercambio baja para las cargas de trabajo de la base de datos y, como tal, para las bases de datos MariaDB, se recomienda establecer la capacidad de intercambio en un valor de 1. Puede agregar la siguiente línea en /etc/sysctl.conf para que este cambio sea persistente:

vm.swappiness = 1

Los cambios surtirán efecto después de reiniciar el sistema, aunque siempre puede hacerlo por adelantado usando el comando sysctl:

sysctl -w vm.swappiness=1

Optimizaciones del sistema de archivos

Para MariaDB, los mejores sistemas de archivos de Linux generalmente se consideran ext4, XFS y Btrfs, que están incluidos en el kernel principal de Linux y son ampliamente compatibles. Estos sistemas de archivos están disponibles en la mayoría de las distribuciones de Linux. Cada sistema de archivos tiene sus propiedades y características únicas y se puede elegir según los requisitos después de una revisión adecuada.

Además, es poco probable que necesite registrar el tiempo de acceso al archivo en un servidor de base de datos. Podemos desactivar esto para mejorar el rendimiento. Puede montar el sistema de archivos relevante con la opción noatime o agregarlo en las opciones de montaje en el archivo /etc/fstab para que sea persistente.

Optimización de base de datos

Hay varios ajustes internos para el funcionamiento de MariaDB que se pueden personalizar según los requisitos y necesidades de cada uno.

Discutiremos algunos de ellos aquí.

MariaDB está configurado principalmente por el archivo my.cnf.

En Ubuntu, puede encontrar my.cnf en:

/etc/mysql/my.cnf

Mientras que en CentOS está ubicado en:

/etc/my.cnf

La documentación detallada sobre qué variables están disponibles para ajustar en el archivo de configuración se puede consultar en aquí.

Mucho también depende del tipo de motor utilizado por MariaDB, a saber, MyISAM e InnoDB o XtraDB. Ambos tienen sus propios conjuntos de pros y contras, y elegir uno depende de los requisitos de la base de datos y la aplicación.

Deberíamos establecer innodb_buffer_pool_size en aproximadamente el 80% de su memoria. Esto asegura que el 80% de su conjunto de trabajo esté en la memoria.

Algunos de los otros parámetros ajustables importantes son:

innodb_log_file_size
innodb_flush_method
innodb_thread_sleep_delay
innodb_adaptive_max_sleep_delay
innodb_buffer_pool_instances
innodb_buffer_pool_size
innodb_max_dirty_pages_pct_lwm
innodb_read_ahead_threshold
innodb_thread_concurrency

Se pueden encontrar más detalles sobre el ajuste de las variables InnoDB o XtraDB aquí. Consulte esto guía para todas las opciones de ajuste disponibles para MariaDB.

Si está interesado, consulte estos recursos para aprender SQL y NoSQL.

Conclusión

MariaDB es una de las opciones populares cuando se trata de relaciones DBMS. Ser de código abierto con una comunidad diversa le agrega más.

Para obtener más información, consulte su documentación que incluye temas como SQL básico, migración, administración de MariaDB, alta disponibilidad, ajuste de rendimiento, motores de almacenamiento, programación y personalización. También es posible que desee deshabilitar el registro binario si no utiliza un clúster.