Cómo instalar, proteger y ajustar el rendimiento del servidor de base de datos MariaDB


Un servidor de base de datos es un componente crítico de la infraestructura de red necesaria para las aplicaciones actuales. Sin la capacidad de almacenar, recuperar, actualizar y eliminar datos (cuando sea necesario), la utilidad y el alcance de las aplicaciones web y de escritorio se vuelven muy limitados.

Además, saber cómo instalar, administrar y configurar un servidor de base de datos (para que funcione como se espera) es una habilidad esencial que todo administrador de sistemas debe tener.

En este artículo repasaremos brevemente cómo instalar y asegurar un servidor de base de datos MariaDB y luego explicaremos cómo configurarlo.

Instalación y protección de un servidor MariaDB

En CentOS 7.x, MariaDB reemplazó a MySQL, que todavía se puede encontrar en Ubuntu (junto con MariaDB). Lo mismo es cierto para openSUSE.

En aras de la brevedad, solo usaremos MariaDB en este tutorial, pero tenga en cuenta que además de tener diferentes nombres y filosofías de desarrollo, ambos sistemas de gestión de bases de datos relacionales (RDBMS para abreviar) son casi idénticos.

Esto significa que los comandos del lado del cliente son los mismos en MySQL y MariaDB, y los archivos de configuración se nombran y se ubican en los mismos lugares.

Para instalar MariaDB, haga:

--------------- On CentOS/RHEL 7 and Fedora 23 --------------- 
# yum update && yum install mariadb mariadb-server # CentOS 

--------------- On Debian and Ubuntu --------------- 
$ sudo aptitude update && sudo aptitude install mariadb-client mariadb-server 

--------------- On openSUSE --------------- 
# zypper update && zypper install mariadb mariadb-tools # openSUSE

Tenga en cuenta que, en Ubuntu, se le pedirá que ingrese una contraseña para el usuario raíz de RDBMS.

Una vez que se hayan instalado los paquetes anteriores, asegúrese de que el servicio de la base de datos se esté ejecutando y se haya activado para iniciarse en el arranque (en CentOS y openSUSE deberá realizar esta operación manualmente, mientras que en Ubuntu el proceso de instalación ya se habrá ocupado de ello para ti):

--------------- On CentOS/RHEL 7 and Fedora 23 --------------- 
# systemctl start mariadb && systemctl enable mariadb 

--------------- On openSUSE --------------- 
# systemctl start mysql && systemctl enable mysql

Luego ejecute el script mysql_secure_installation . Este proceso le permitirá:

  1. establecer/restablecer la contraseña para el usuario raíz de RDBMS
  2. eliminar los inicios de sesión anónimos (permitiendo así que solo los usuarios con una cuenta válida inicien sesión en el RDBMS)
  3. deshabilite el acceso de root para máquinas que no sean localhost
  4. eliminar la base de datos de prueba (a la que cualquiera puede acceder)
  5. active los cambios asociados con 1 a 4.

Para obtener una descripción más detallada de este proceso, puede consultar la sección posterior a la instalación en Instalar la base de datos MariaDB en RHEL/CentOS/Fedora y Debian/Ubuntu.

Configuración del servidor MariaDB

Las opciones de configuración predeterminadas se leen de los siguientes archivos en el orden indicado: /etc/mysql/my.cnf , /etc/my.cnf y ~ /.my.cnf .

La mayoría de las veces, solo existe /etc/my.cnf . Es en este archivo donde estableceremos la configuración de todo el servidor (que se puede anular con la misma configuración en ~/.my.cnf para cada usuario).

Lo primero que debemos tener en cuenta acerca de my.cnf es que las configuraciones están organizadas en categorías (o grupos) donde cada nombre de categoría está entre corchetes.

Las configuraciones del sistema del servidor se dan en la sección [mysqld] , donde normalmente encontrará solo las dos primeras configuraciones en la tabla siguiente. El resto son otras opciones de uso frecuente (donde se indique, cambiaremos el valor predeterminado con uno personalizado de nuestra elección):

Cambiaremos esto para indicarle al servicio que escuche solo en su dirección principal (192.168.0.13):

bind_address u003d 192.168.0.13 bind_address u003d 0.0.0.0 puerto representa el puerto donde escuchará el servidor de la base de datos.

Reemplazaremos el valor predeterminado (3306) con 20500 (pero debemos asegurarnos de que nada más esté usando ese puerto):
puerto u003d 20500

Si bien algunas personas argumentarán que la seguridad a través de la oscuridad no es una buena práctica, cambiar los puertos de aplicación predeterminados por otros más altos es un método rudimentario, pero efectivo, para desalentar los análisis de puertos. puerto u003d 3306 innodb_buffer_pool_size es el grupo de búfer (en bytes) de memoria que se asigna para datos e índices a los que se accede con frecuencia cuando se usa Innodb (que es el predeterminado en MariaDB) o XtraDB como motor de almacenamiento.

Reemplazaremos el valor predeterminado con 256 MB:

innodb_buffer_pool_size u003d 256M innodb_buffer_pool_size u003d 134217728 skip_name_resolve indica si los nombres de host se resolverán o no en las conexiones entrantes. Si se establece en 1, como haremos en esta guía, solo direcciones IP.

A menos que requiera nombres de host para determinar los permisos, es recomendable deshabilitar esta variable (para acelerar las conexiones y consultas) estableciendo su valor en 1:

skip_name_resolve u003d 1 skip_name_resolve u003d 0 query_cache_size representa el tamaño (en bytes) disponible para la caché de consultas en el disco, donde los resultados de las consultas SELECT se almacenan para uso futuro cuando una consulta idéntica (para se realiza la misma base de datos y utilizando el mismo protocolo y el mismo juego de caracteres).

Debe elegir un tamaño de caché de consultas que coincida con sus necesidades en función de 1) la cantidad de consultas repetitivas y 2) la cantidad aproximada de registros que se espera que devuelvan esas consultas repetitivas. Estableceremos este valor en 100 MB por el momento:

query_cache_size u003d 100M query_cache_size u003d 0 (lo que significa que está deshabilitado por defecto) max_connections es el número máximo de conexiones de cliente simultáneas al servidor. Estableceremos este valor en 30:
max_connections u003d 30 Cada conexión usará un hilo y, por lo tanto, consumirá memoria. Tenga en cuenta este hecho al configurar max_connections. max_connections u003d 151 thread_cache_size indica el número de subprocesos que el servidor asigna para su reutilización después de que un cliente se desconecta y libera el (los) subproceso (s) previamente en uso. En esta situación, es más barato (en términos de rendimiento) reutilizar un hilo que crear una instancia de uno nuevo.

Nuevamente, esto depende de la cantidad de conexiones que espera. Podemos establecer con seguridad este valor en la mitad del número de max_connections:

thread_cache_size u003d 15 thread_cache_size u003d 0 (deshabilitado por defecto) En CentOS, necesitaremos decirle a SELinux que permita que MariaDB escuche en un puerto no estándar (20500) antes de reiniciar el servicio:

# yum install policycoreutils-python
# semanage port -a -t mysqld_port_t -p tcp 20500

Luego reinicie el servicio MariaDB.

Ajuste del rendimiento de MariaDB

Para ayudarnos a verificar y ajustar la configuración según nuestras necesidades específicas, podemos instalar mysqltuner (un script que proporcionará sugerencias para mejorar el rendimiento de nuestro servidor de base de datos y aumentar su estabilidad):

# wget https://github.com/major/MySQLTuner-perl/tarball/master
# tar xzf master

Luego cambie el directorio a la carpeta extraída del tarball (la versión exacta puede diferir en su caso):

# cd major-MySQLTuner-perl-7dabf27

y ejecútelo (se le pedirá que ingrese las credenciales de su cuenta administrativa de MariaDB)

# ./mysqltuner.pl

La salida de la secuencia de comandos es en sí misma muy interesante, pero vayamos al final donde se enumeran las variables para ajustar con el valor recomendado:

La configuración query_cache_type indica si la caché de consultas está deshabilitada (0) o habilitada (1). En este caso, mysqltuner nos aconseja que lo desactivemos.

Entonces, ¿por qué se nos aconseja que lo desactivemos ahora? La razón es que la caché de consultas es útil principalmente en escenarios de alta lectura/baja escritura (que no es nuestro caso, ya que acabamos de instalar el servidor de la base de datos).

ADVERTENCIA: Antes de realizar cambios en la configuración de un servidor de producción, le recomendamos que consulte a un administrador de base de datos experto para asegurarse de que una recomendación dada por mysqltuner no tendrá un impacto negativo en una configuración existente.

Resumen

En este artículo hemos explicado cómo configurar un servidor de base de datos MariaDB después de haberlo instalado y asegurado. Las variables de configuración enumeradas en la tabla anterior son solo algunas configuraciones que quizás desee considerar al preparar el servidor para su uso o al ajustarlo más adelante. Consulte siempre la documentación oficial de MariaDB antes de realizar cambios o consulte nuestros consejos de ajuste de rendimiento de MariaDB:

Como siempre, no dude en informarnos si tiene alguna pregunta o comentario sobre este artículo. ¿Hay alguna otra configuración de servidor que le guste usar? Siéntase libre de compartir con el resto de la comunidad utilizando el formulario de comentarios a continuación.