MariaDB: Optimización de la instalación y el rendimiento

En este artículo consideraré la instalación, configuración básica y optimización del rendimiento del servidor de base de datos MariaDB en Linux CentOS 7. Al final del artículo mostraré algunos ejemplos de archivos de configuración de MariaDB para que pueda elegir el mejor parámetros para su servidor de base de datos.

Instalar MariaDB en CentOS

Recientemente, MariaDB se ha agregado al repositorio base estándar de CentOS 7, pero su versión en el repositorio es 5.5. Esta versión no está actualizada, tiene algunos problemas de rendimiento y no proporciona búsqueda de texto completo en InnoDB. Para instalar la versión actual de MariaDB, primero debe agregar el repositorio de desarrolladores de mariadb.org.

Instala el nano editor usando yum:

yum install nano -y

Luego abra el archivo del repositorio para editarlo:

nano /etc/yum.repos.d/mariadb.repo

Agregue el siguiente texto allí:

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

Guarde el archivo de configuración mariadb.repo e instale el servidor y el cliente MariaDB:

yum --disablerepo=AppStream install MariaDB-server MariaDB-client -y

La instalación está completa, ahora necesita agregar el servicio mariadb al inicio:

systemctl start mariadb
systemctl enable mariadb

Verifique el estado del servicio:

systemctl status mariadb

El servicio mariadb está activo y en ejecución, por lo que puede continuar con la configuración.

Asegurar el servidor MariaDB

Una vez que hayamos instalado y ejecutado el servidor MariaDB, podemos pasar a la configuración de seguridad. Ejecute el script integrado:

/usr/bin/mysql_secure_installation

En primer lugar, le pedirá que ingrese la contraseña de root (después de la instalación inicial de mariadb no se ha establecido ninguna contraseña), por lo que presionamos ENTER y establecemos una contraseña compleja en el siguiente paso. Luego, puede presionar ENTER hasta el final de la ejecución del escenario. Se eliminarán los usuarios anónimos, un inicio de sesión raíz remoto y las tablas de prueba, y se actualizarán los privilegios.

Para conectarse de forma remota al servidor mariadb, debe crear algunas reglas para el firewall de Linux usando iptables:

iptables -I INPUT -p tcp --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables-save > /etc/sysconfig/iptables

Opcionalmente, puede permitir conexiones salientes a bases de datos remotas de MariaDB:

iptables -I OUTPUT -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT

Prueba de conexión MariaDB

Debe asegurarse de que MariaDB se haya instalado correctamente.

Vamos a conectarnos al servidor de base de datos usando la herramienta mysqladmin incorporada:

mysqladmin version

El comando devuelve lo siguiente:

mysqladmin Ver 9.1 Distrib 10.4.7-MariaDB, for Linux on x86_64
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Server version 10.4.7-MariaDB
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/lib/mysql/mysql.sock
Uptime: 59 min 35 sec
Threads: 10 Questions: 24 Slow queries: 0 Opens: 28 Flush tables: 1 Open tab

Significa que MariaDB se ha instalado correctamente, la base de datos está en funcionamiento.

Puede conectarse a la consola del servidor mariadb para ejecutar comandos SQL de forma interactiva:

mysql -u root -p

Archivo de configuración MariaDB – my.cnf

Por lo general, después de instalar MariaDB, agrego mi configuración estándar al archivo de configuración /etc/my.cnf que funciona en la mayoría de los servidores y no ha causado ningún problema hasta ahora. Borre my.cnf y agregue el siguiente texto:

[mysqld]
local-infile=0
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
max_allowed_packet = 128M
sql_mode = ""
log-error = /var/log/mysql-error.log
# Cache parameters
query_cache_size = 16M
table_open_cache = 4096
thread_cache_size = 16
key_buffer_size = 8M
thread_stack = 256K
join_buffer_size = 2M
sort_buffer_size = 2M
# Parameters for temporary tables
tmpdir = /tmp
max_heap_table_size = 32M
tmp_table_size = 32M
# InnoDB parameters
innodb_file_per_table
innodb_buffer_pool_size = 32M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
innodb_use_native_aio = 0
transaction-isolation = READ-COMMITTED
character-set-server = utf8
collation-server = utf8_unicode_ci
init-connect = "SET NAMES utf8 COLLATE utf8_unicode_ci"
skip-name-resolve
[mysqldump]
quick
quote-names
max_allowed_packet = 128M
default-character-set = utf8
[mysql]
[isamchk]
key_buffer = 16M
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

Detengámonos en los parámetros principales de my.cnf con más detalle:

  • datadir es el directorio en el que se almacenan los archivos DB;
  • tmpdir es el directorio para almacenar archivos temporales;
  • omitir-nombre-resolver desactiva la resolución de nombres DNS;
  • max_allowed_packet es el tamaño máximo de paquete permitido. Si su base de datos utiliza campos de blobs, su valor no puede ser menor que el tamaño del campo más grande;
  • max_connections es el número máximo de conexiones abiertas; el parámetro establece cuántos clientes pueden trabajar con el servidor mariadb simultáneamente;
  • # Parámetros de caché La sección incluye todo lo relacionado con la caché de consultas. No se recomienda establecer valores demasiado altos ya que su servidor de base de datos consumirá más recursos;
  • # Parámetros InnoDB la sección incluye todo lo relacionado con las tablas innodb;
  • innodb_buffer_pool_size es el búfer de caché para datos e índices. Si se encuentran 1-2 proyectos en su servidor, establezca el valor en 70-80% de RAM disponible;
  • innodb_flush_method establezca el valor O_DIRECT para Linux, deshabilitará el almacenamiento en caché a nivel del sistema operativo;
  • innodb_flush_log_at_trx_commit este parámetro afecta la velocidad de escritura de las tablas innoDB. Tome este parámetro en serio: si establece 0 aquí, tendrá un mayor rendimiento, pero aumenta el riesgo de pérdida de datos. Prefiero establecer el valor 2 aquí, ya que no he visto ninguna ganancia obvia en el rendimiento del servidor de base de datos, mientras que la seguridad es una prioridad.

Optimización y ajuste del rendimiento para MariaDB

Me gustaría agregar que no es necesario copiar mi archivo de configuración: cada servidor y cada proyecto necesitan sus propios parámetros. Aconsejo usar algunos scripts que verifiquen la configuración de MariaDB automáticamente y brinden algunas recomendaciones sobre la optimización del servidor.

Para optimizar sus parámetros mariadb puede utilizar el Secuencia de comandos Tuning-Primer.sh. Primero, instale herramientas adicionales:

yum install bc net-tools -y

Descargue el script de optimización:

wget https://launchpadlibrarian.net/78745738/tuning-primer.sh

Asigne los permisos de ejecución a un archivo .sh:

chmod +x tuning-primer.sh

Ejecute el script:

./tuning-primer.sh

Después de ejecutarlo, el script le mostrará la información útil que necesita. Las cosas más importantes se resaltarán en rojo. Estas son las cosas que se recomienda corregir.

Por ejemplo, el script mostró que el número de conexiones es mucho menor de lo que he establecido.

script de bash de ajuste de mariadb

Puede cambiar este parámetro tanto en el archivo my.cnf como en la consola. Establecí un valor más bajo (10) y el script lo aprobó:

optimizar el rendimiento de mariadb

Con estas comprobaciones, puede hacer que el rendimiento de su servidor mariadb sea perfecto.

Me gustaría señalar que el tiempo de funcionamiento continuo recomendado del servidor de base de datos es de al menos 48 horas, entonces la información será más precisa y podrá sintonizar su servidor.

Puede agregar una sección para activar un registro de consultas lento. Ayudará a analizar el desempeño de sus proyectos. Agregue lo siguiente a mysqld sección:

slow_query_log = 1 # enable the log of slow queries
long_query_time = 5 # set the time in seconds
slow_query_log_file = /var/log/slow-query.log # the name of your slow query log file and the path to it
log_queries_not_using_indexes # whether to write queries that do not use indexes to the log file

También debe crear archivos de registro para MariaDB y un registro de errores de consulta lento:

touch /var/log/mysql-error.log
touch /var/log/slow-query.log

Reinicie el servicio db:

systemctl restart mariadb

Puede ver su registro de consultas lentas si abre /var/log/slow-query.log o lo verifica en tiempo real:

tail -f /var/log/slow-query.log

De esta forma, podrá analizar las consultas que su proyecto envía a su base de datos y realizar una auditoría.

Si cambia alguna configuración de la base de datos, verifique que no haya errores en la configuración. Después de realizar cualquier cambio en la configuración de my.cnf, debe verificar si hay errores en la configuración:

systemctl status mariadb -l

Comandos básicos de MariaDB Shell

Los comandos cli principales que un administrador tiene que usar con frecuencia en la consola mariadb se muestran a continuación.

Para iniciar sesión localmente en su consola MariaDB, ejecute este comando:

mysql -u root -p

Para conectarse de forma remota a su servidor MariaDB:

mysql -u root -p -h 192.168.1.20

Comandos útiles de MariaDB (MySQL):

create database db1; – crea una base de datos con el nombre db1

show databases; – muestra la lista de bases de datos en el servidor

use db1; – inicie sesión en una base de datos con el nombre db1

show tables; – enumera todas las tablas en la base de datos actual

create user 'project'@'localhost' identified by '$sup#erP@ss1'; – crea un usuario (proyecto) y establece su contraseña en $ sup # erP @ ss1

grant all privileges on database_name.* to project@'localhost'; – otorga todos los privilegios al proyecto del usuario

flush privileges; – actualiza todos los privilegios

show processlist; – ver conexiones DB activas. También puede utilizar este comando:

show status where `variable_name` = 'Threads_connected';

En su consola mysql, puede ver o cambiar algunas variables, como:

SHOW VARIABLES LIKE 'max_error_count';

comandos de la consola de administración mariadb

Cambiar:

SET max_error_count=256;

mariadb establece parámetros a través de cli

En conclusión, me gustaría decir que cuando configura un servidor de base de datos, debe considerar que los proyectos se ubicarán en el servidor. Lo que es aplicable para proyectos menores definitivamente no será adecuado para uno grande. Pruebe, experimente y vea siempre sus registros. En el siguiente artículo, mostraremos cómo proporcionar alta disponibilidad y aumentar el rendimiento de la aplicación mediante la replicación entre servidores de bases de datos MariaDB.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *