Configuración básica de MariaDB.

Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: https://www.alcancelibre.org/

Licencia de este documento: Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1

© 1999-2024 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector hace mal uso de éstos.

Introducción.

Alma Linux, Rocky Linux y Red Hat™ Enterprise Linux incluyen MariaDB™ como reemplazo nativo para MySQL™.

Acerca de MariaDB™.

MariaDB™ es un DBMS (DataBase Management System) o sistema de gestión de base de datos SQL (Structured Query Language o Lenguaje Estructurado de Consulta) multi-usuario y multi-hilo. Es un proyecto derivado de MySQL™ con licencia GNU/GPLv2, desarrollado por Michael Widenius —autor original de MySQL™— y una enorme comunidad de desarrolladores de software libre. Se diferencia principalmente de MySQL™ en que incluye dos nuevos motores de almacenamiento: Aria —que funciona como reemplazo para MyISAM— y XtraDB —que funciona como reemplazo para InnoDB. Es completamente compatible con MySQL™ gracias a que utiliza las mismas órdenes, interfaces, APIs y bibliotecas, siendo su objetivo poder reemplazar de manera transparente a MySQL™ en todos los escenarios.

MariaDB™ tuvo su origen cuando MySQL™ AB fue adquirido en 2008 por Sun Microsystems, que a su vez fue adquirido por Oracle Corporation en 2009. MySQL™ fue reemplazado de forma transparente por MariaDB™ en la mayoría de los distribuciones de GNU/Linux como medida para hacer frente a la mala gestión que ha venido haciendo Oracle sobre el proyecto MySQL™ quienes en un inicio se dedicaron a eliminar funcionalidad para resolver problemas de seguridad.

URL: https://mariadb.com/

Equipamiento lógico necesario.

Ejecute lo siguiente para instalar los paquetes correspondientes al cliente y servidor:

dnf -y install mariadb mariadb-server

Modificaciones necesarias en el muro cortafuegos.

Al igual que MySQL™, MariaDB™ utiliza el puerto 3306/TCP. Se recomienda jamás abrir este puerto cuando entre las conexiones de cliente y servidor haya Internet o redes públicas de por medio, aún con el soporte para TLS habilitado. Evitará que los molestos y masivos ataques de fuerza bruta ocasionen una denegación de servicio (DoS).

Si necesita acceder de manera remota hacia MariaDB™ para realizar tareas administrativas, por favor procure hacerlo a través de una VPN o bien abriendo el puerto específicamente hacia una dirección IP o bloque de direcciones IP.

Abrir el puerto de MariaDB™ hacia una dirección IP o bloque de direcciones IP.

Genere una nueva zona en el muro cortafuegos del sistema denominada dbadmin, habilite sólo el servicio mysql y recargue configuración ejecutando lo siguiente:

firewall-cmd --new-zone=dbadmin --permanent
firewall-cmd --zone=dbadmin --add-service=mysql --permanent
firewall-cmd --reload

Determine exactamente qué dirección IP o bloque de direcciones IP tendrán acceso a MariaDB™ pasando por el muro cortafuegos.

En el siguiente ejemplo se limita el acceso hacia el servicio mysql en la zona dbadmin del muro cortafuegos exclusivamente a la dirección IP de red local 192.168.100.121:

firewall-cmd --zone=dbadmin --add-source=192.168.100.121/32 --permanent
firewall-cmd --reload

Para añadir más direcciones IP o bloques de direcciones IP, sólo es necesario añadir éstos como fuente de origen. En el siguiente ejemplo se habilita el acceso hacia el servicio mysql en la zona dbadmin del muro cortafuegos a la dirección IP pública 189.129.117.172:

firewall-cmd --zone=dbadmin --add-source=189.129.117.172/32 --permanent
firewall-cmd --reload

En el siguiente ejemplo se limita el acceso hacia el servicio mysql en la zona dbadmin del muro cortafuegos al bloque de direcciones IP de red local 172.16.0.0/12:

firewall-cmd --zone=dbadmin --add-source=172.16.0.0/12 --permanent
firewall-cmd --reload

Procedimientos.

MariaDB™ tiene un funcionamiento prácticamente idéntico al de MySQL™, por lo cual será muy sencillo utilizarlo si se está familiarizado con MySQL™.

Archivos y directorios de configuración.

Las base de datos se almacenarán dentro del directorio /var/lib/mysql.

El archivo de configuración principal corresponde a /etc/my.cnf, pero se utilizan también archivos dentro del directorio /etc/my.cnf.d.

Las opciones para el servidor se pueden añadir o modificar editando el archivo /etc/my.cnf.d/mariadb-server.cnf.

Las opciones para los clientes se pueden añadir o modificar editando el archivo /etc/my.cnf.d/mysql-clients.cnf.

Activar e iniciar el servicio mariadb.

Ejecute lo siguiente para activar e iniciar por primera vez el servicio mariadb:

systemctl enable --now mariadb

Ejecute lo siguiente para detener el servicio mariadb

systemctl stop mariadb

Ejecute lo siguiente para iniciar el servicio mariadb:

systemctl start mariadb

Ejecute lo siguiente para reiniciar el servicio mariadb:

systemctl restart mariadb

Asignación de contraseña al usuario root.

Después de la instalación e inicio del servicio de MariaDB™, el usuario root carecerá de contraseña. Ejecute mysql_secure_installation si necesita poner en producción inmediatamente el servidor. Iniciará un asistente que le permitirá:

Se le solicitará ingresar una inexistente contraseña actual. Sólo pulse la tecla ↵ (ENTER) y luego asigne la nueva contraseña. Responda con Y para todo lo demás.

mysql_secure_installation

La salida será similar a la siguiente:

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] 
Enabled successfully!
Reloading privilege tables..
 ... Success!

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

Change the root password? [Y/n] 
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!

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] 
 ... 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] 
 ... 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] 
 - 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] 
 ... 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!

En adelante será necesario ejecutar mysql con la opción -p a cualquier sentencia del intérprete de mandatos. Ésto aplicará también para mysqladmin y mysqldump. Ejemplos:

mysql -uroot -p
mysqladmin -uroot -p create nuevabd
mysqladmin -uroot -p drop nuevabd
mysqldump -uroot -p --opt --events --all-databases > respaldo-mariadb.sql

Recuperación de la contraseña de root.

Siga el siguiente procedimiento en caso de que haya extraviado la contraseña de root para MariaDB™.

Acceda al sistema operativo como root.

Detenga el servicio mariadb:

systemctl stop mariadb

Ejecute mysqld_safe con la opción --skip-grant-tables, enviando el proceso a segundo plano:

mysqld_safe --skip-grant-tables &

Ingrese al intérprete de MariaDB™ ejecutando mysql sin argumentos u opciones:

mysql

Ejecute desde el intérprete de MariaDB™ lo siguiente para asignar una nueva contraseña:

UPDATE mysql.user SET Password=PASSWORD('nueva-contraseña') WHERE User='root';
FLUSH PRIVILEGES;

Salga del intérprete de MariaDB™ ejecutando lo siguiente:

exit;

Detenga el servicio ejecutando mysqladmin con la opción -p y shutdown como argumento. Se solicitará se ingrese la nueva contraseña asignada.

mysqladmin -p shutdown

Inicie nuevamente el servicio mariadb:

systemctl start mariadb

Verifique el cambio de contraseña ejecutando mysql y la opción -p e ingrese la nueva contraseña.

mysql -uroot -p

Salga del intérprete de mandatos de MariaDB™ ejecutando lo siguiente:

exit;

Por favor, procure memorizar o almacenar en un lugar seguro la nueva contraseña asignada al usuario root de MariaDB™.

SELinux y MariaDB™.

SELinux tiene tres políticas que aplican para MariaDB™ y MySQL™.

Ejecute lo siguiente sólo si necesita que el servicio mariadb ejecute en un puerto distinto al 3306:

setsebool -P mysql_connect_any=1

La política mysql_connect_http permite habilitar o deshabilitar las conexiones entre servidor Web y servicio mariadb. De modo predeterminado está política está habilitada. Ejecute lo siguiente para validar que esté habilitada esta política.

getsebool mysql_connect_http

Si acaso estuviese deshabilitada, puede habilitarla de nuevo ejecutando lo siguiente:

setsebool -P mysql_connect_http=1

La política selinuxuser_mysql_connect_enabled determina si se habilita o deshabilita el acceso al servicio mariadb a los usuarios regulares locales. De modo predeterminado está deshabilitada. Ejecute lo siguiente para permitir que usuarios regulares locales puedan acceder al servicio mariadb:

setsebool -P selinuxuser_mysql_connect_enabled=1

Actualizar desde una versión anterior de MariaDB™.

La herramienta mysql_upgrade examina el directorio de datos en busca de incompatibilidades. Realiza tareas, tales como:

Si actualizó desde una versión anterior de MariaDB™, ejecute lo siguiente:

mysql_upgrade -uroot -p

Crear y eliminar bases de datos.

Acceda al interprete de mandatos de MariaDB™:

mysql -uroot -p

Ejecute lo siguiente desde el intérprete de mandatos de MariaDB™ para crear una nueva base de datos:

create database nuevabasededatos;

Ejecute lo siguiente desde el intérprete de mandatos de MariaDB™ para eliminar una nueva base de datos:

drop database nuevabasededatos;

Salga del interprete de mandatos de MariaDB™:

exit;

De manera alternativa, puede realizar estas mismas dos operaciones utilizando mysqladmin.

Ejecute lo siguiente para crear una nueva base de datos:

mysqladmin -uroot -p create nuevabasededatos

Ejecute lo siguiente para eliminar una nueva base de datos:

mysqladmin -uroot -p drop nuevabasededatos

Respaldo y restauración de bases de datos.

Para respaldar una base de datos desde el anfitrión local, ejecute mysqldump con las opciones --opt ―que añade automáticamente las opciones --add-drop-table, --add-locks, --create-options, --quick, --extended-insert, --lock-tables, --set-charset y --disable-keys, la opción -u con el nombre de usuario a utilizar, la opción -p para indicar que se ingresará una contraseña, el nombre de la base de datos, > para guardar la salida estándar ―STDOUT― en un archivo y el nombre del archivo donde se guardará el respaldo. Ejemplo:

mysqldump --opt -uroot -p basedatos > respaldo.sql

Para restaurar un respaldo, ejecute mysql con las opciones -u con el nombre de usuario con privilegios sobre la base de datos a restaurar, -p para indicar que se utilizará contraseña, el nombre de la base de datos a restaurar, < para indicar que la entrada estándar ―STDIN― será un archivo y el nombre del archivo con el respaldo de la base de datos. Ejemplo:

mysql -uroot -p basedatos < respaldo.sql

Para respaldar todas la bases de datos, ejecute mysqldump con las opciones --opt, --events, --all-databases para indicar que se respaldarán todas la bases de datos, la opción -u con root como usuario, la opción -p para indicar que se utilizará contraseña, el símbolo > para guardar la salida estándar ―STDOUT―en un archivo y el nombre del archivo donde se guardará el respaldo. Ejemplo:

mysqldump --opt --events --all-databases -u root -p > respaldo-todo.sql

Para restaurar todas las bases de datos a partir de un único archivo de respaldo, ejecute mysql con la opción -u con root como usuario, la opción -p para indicar que se utilizará contraseña, el símbolo < para indicar que la entrada estándar ―STDIN― será un archivo y el nombre del archivo con el respaldo de todas las bases de datos. Ejemplo:

mysql -uroot -p < respaldo-todo.sql

Permisos de acceso a las bases de datos.

Ingrese al intérprete de MariaDB™ con el usuario root:

mysql -uroot -p

Ejecute lo siguiente para asignar los permisos select (seleccionar), insert (insertar), update (actualizar), create (crear), alter (alterar), delete (eliminar) y drop (descartar) sobre las tablas de una base de datos al usuario prueba desde el anfitrión local:

GRANT select, insert, update, create, alter, delete, drop
ON base-de-datos.*
TO usuario@localhost IDENTIFIED BY 'Us3Un4B3n4C0ntr4s3ñ4';

Puede otorgar al usuario todos los permisos sobre la base de datos ejecutando algo similar a lo siguiente:

GRANT all ON base-de-datos.*
TO usuario@localhost IDENTIFIED BY 'Us3Un4B3n4C0ntr4s3ñ4';

Ejecute algo similar al ejemplo anterior, pero definiendo el usuario y una dirección específica IP del anfitrión remoto para permitir el acceso hacia una base de datos desde un anfitrión remoto. Ejemplo:

GRANT select, insert, update, create, alter, delete, drop
ON base-de-datos.*
TO usuario@192.168.70.2 IDENTIFIED BY 'Us3Un4B3n4C0ntr4s3ñ4';

Puede otorgar al usuario todos los permisos sobre la base de datos ejecutando lo siguiente:

GRANT all ON base-de-datos.*
TO usuario@192.168.70.2 IDENTIFIED BY 'Us3Un4B3n4C0ntr4s3ñ4';

Ejecute algo similar a lo anterior, pero definiendo el nombre del usuario entre comillas simples, arroba y el símbolo % entre comillas simples para permitir el acceso hacia una base de datos desde cualquier anfitrión. Ejemplo:

GRANT all ON base-de-datos.*
TO 'usuario'@'%' IDENTIFIED BY 'Us3Un4B3n4C0ntr4s3ñ4';

Optimización de MySQL.

Optimizar MariaDB™ cambiando algunas de las opciones por defecto puede mejorar significativamente el rendimiento del servicio.

Deshabilitar la resolución de nombres de anfitrión.

MariaDB™ mantiene un cache de anfitriones utilizados en la memoria, la cual contiene las direcciones IP, nombres de anfitrión y errores de información asociados a éstos. El cache sólo se utiliza para conexiones TCP remotas con otros anfitriones y jamás lo utiliza para conexiones a través de la interfaz de retorno del sistema (loopback, 127.0.0.1) o conexiones hechas a través del archivo de zócalo, tubería o bien memoria compartida.

MariaDB™ utiliza la dirección IP del cliente para verificar si el nombre de anfitrión de éste está en el cache de anfitriones por cada nueva conexión. Se intentará resolver el nombre de anfitrión cuando el nombre es inexistente, resolviendo primero la dirección IP, luego resolviendo el nombre, comparando el resultado de la dirección IP original para verificar que correspondan. Luego esta información es almacenada en el cache de anfitriones.

El objetivo del cache es evitar hacer nuevamente una consulta de DNS por cada conexión de cliente y evitar el almacenamiento de información de errores que ocurren en el proceso de conexión de los clientes. Cuando ocurren demasiados errores desde un anfitrión en particular y se rebasa el valor de la variable max_connect_errors (el valor es 10 de modo predeterminado), se bloquea el acceso desde dicho anfitrión.

Cuando un anfitrión es bloqueado, éste sólo podrá acceder de nuevo si se reinicia el servicio o si se limpia manualmente el cache de anfitriones. Ésto último se realiza ejecutando lo siguiente desde el intérprete de mandatos del sistema:

mysqladmin -p flush-hosts

Cuando se tiene un DNS muy lento, se carece de uno que resuelva los nombres de los anfitriones o bien se tiene demasiados anfitriones haciendo conexiones hacia el servidor, deshabilitar el cache de anfitriones o hacerlo más grande mejora el rendimiento considerablemente. La consecuencia de deshabilitar el cache de anfitriones es que en adelante sólo se podrán otorgar permisos de acceso y realizar conexiones utilizando direcciones IP, es decir utilizando usuario@a.b.c.d en lugar de usuario@anfitrión.dominio.tld.

Para deshabilitar el cache de anfitriones se requiere editar el archivo /etc/my.cnf.d/mariadb-server.cnf:

vim /etc/my.cnf.d/mariadb-server.cnf

Y añadir la siguiente opción en la sección [mysqld]:

skip-name-resolve

Ejemplo:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mariadb/mariadb.log
pid-file=/run/mariadb/mariadb.pid
# Deshabilitar la resolución de nombres de anfitrión
skip-name-resolve

Guarde el archivo, salga del editor del texto y reinicie el servicio para aplicar los cambios:

systemctl restart mariadb

Si se desea hacer más grande el cache de anfitriones —cuyo valor predeterminado es 128 anfitriones— de debe cambiar el valor de HOST_CACHE_SIZE por cualquier valor entre 0 y 2048 y volver a compilar MariaDB™ desde código fuente —motivo por el cual es más práctico deshabilitar el cache de anfitriones.

Aumentar el tamaño de cache de consultas.

Cuando se habilita el cache de consultas en memoria y se dispone de suficiente de ésta, el desempeño del servidor se incrementa considerablemente. El valor predeterminado del tamaño cache de consultas —query_cache_size— es 8 MiB. Los valores permitidos son enteros múltiplos de 1024 (bytes). Para establecer un tamaño de cache de consultas de 32 MiB, el valor correspondiente para query_cache_size sería 33882112 bytes.

Ingrese al intérprete de MariaDB™ con el usuario root:

mysql -uroot -p

Verifique el valor de la variable query_cache_size ejecutando lo siguiente:

SHOW VARIABLES LIKE '%query_cache%';

La salida será similar a la siguiente:

+------------------------------+---------+
| Variable_name                | Value   |
+------------------------------+---------+
| have_query_cache             | YES     |
| query_cache_limit            | 1048576 |
| query_cache_min_res_unit     | 4096    |
| query_cache_size             | 8388608 |
| query_cache_strip_comments   | OFF     |
| query_cache_type             | ON      |
| query_cache_wlock_invalidate | OFF     |
+------------------------------+---------+
7 rows in set (0.001 sec)

El tamaño predeterminado del cache de consultas mostrará el valor 8388608 que corresponde a 8 MiB.

Ejecute lo siguiente para cambiar el valor de query_cache_size a 32 MiB:

SET GLOBAL query_cache_size = 33882112;

Verifique el cambio ejecutando lo siguiente:

SHOW VARIABLES LIKE '%query_cache%';

La salida será similar a la siguiente:

+------------------------------+----------+
| Variable_name                | Value    |
+------------------------------+----------+
| have_query_cache             | YES      |
| query_cache_limit            | 1048576  |
| query_cache_min_res_unit     | 4096     |
| query_cache_size             | 33882112 |
| query_cache_strip_comments   | OFF      |
| query_cache_type             | ON       |
| query_cache_wlock_invalidate | OFF      |
+------------------------------+----------+
7 rows in set (0.001 sec)

Salga del intérprete de MariaDB™.

exit;

El cambio prevalecerá hasta que sea reiniciado el servicio mariadb. Edite el archivo /etc/my.cnf.d/mariadb-server.cnf para que el cambio sea permanente:

vim /etc/my.cnf.d/mariadb-server.cnf

Añada la siguiente opción en la sección [mysqld]:

query_cache_size = 32M

Ejemplo:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mariadb/mariadb.log
pid-file=/run/mariadb/mariadb.pid
# Deshabilitar la resolución de nombres de anfitrión
skip-name-resolve
# Cache de consultas a 32MiB
query_cache_size = 32M

Reinicie el servicio para aplicar los cambios:

systemctl restart mariadb

Realice algunas consultas al azar hacia cualquier base de datos MariaDB™ hospedada en el servidor a fin de generar algo de actividad. Sólo la primera consulta será un considerablemente más lenta que las subsecuentes. El resto de las consultas deberán ser considerablemente más rápidas.

Vuelva a ingresar al intérprete de MariaDB™ para verificar el estado del cache de consultas:

mysql -u root -p

Ejecute lo siguiente desde el intérprete de MariaDB™:

SHOW STATUS LIKE '%Qcache%';

La salida puede ser similar a la siguiente:

+------------------------------+----------+
| Variable_name                | Value    |
+------------------------------+----------+
| have_query_cache             | YES      |
| query_cache_limit            | 1048576  |
| query_cache_min_res_unit     | 4096     |
| query_cache_size             | 33554432 |
| query_cache_strip_comments   | OFF      |
| query_cache_type             | ON       |
| query_cache_wlock_invalidate | OFF      |
+------------------------------+----------+
7 rows in set (0.001 sec)

Codificación predeterminada.

Al igual que MySQL™, la codificación predeterminada de MariaDB™ es latin1 y la intercalación predeterminada es latin1_swedish_ci. Algunas aplicaciones requieren se que configuré UTF-8 o UTF-16 como codificación predeterminada.

La codificación ucs2 utiliza 2 bytes fijos por cada carácter. Tiene una codificación fija de 16 bits.

La codificación utf8 o utf8mb3 permite de 1 a 3 bytes por carácter. Caracteres del alfabeto latino utilizan 1 byte. Caracteres europeos y de medio oriente utilizan 2 bytes. Caracteres chinos, japoneses, coreanos, etc. utilizan 3 bytes.

La codificación utf8mb4 es similar a utf8 o utf8mb3, pero admite hasta 4 bytes por carácter

La codificación utf16 es similar a ucs2 pero almacena caracteres suplementarios en 32 bits. Funciona con 16 o 32 bits.

La codificación utf32 es similar a utf16 pero tiene una codificación fija de 32 bits.

La lista de codificaciones admitidas por MariaDB™ se puede consultar en https://mariadb.com/kb/en/supported-character-sets-and-collations/.

Si requiere utilizar UTF-8 como codificación predeterminada, edite el archivo /etc/my.cnf.d/mariadb-server.cnf:

vim /etc/my.cnf.d/mariadb-server.cnf

Añada las siguientes líneas en la sección [mysqld]:

collation_server=utf8mb4_unicode_ci
character-set-server=utf8mb4
init_connect='SET collation_connection = utf8mb4_unicode_ci'
init_connect='SET NAMES utf8mb4'

Ejemplo:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mariadb/mariadb.log
pid-file=/run/mariadb/mariadb.pid
# Deshabilitar la resolución de nombres de anfitrión
skip-name-resolve
# Cache de consultas a 32MiB
query_cache_size = 32M
# Codificación predererminada a UTF-8
collation_server=utf8mb4_unicode_ci
character-set-server=utf8mb4
init_connect='SET collation_connection = utf8mb4_unicode_ci'
init_connect='SET NAMES utf8mb4'

Guarde los cambios y salida del editor de texto.

Reinicie el servicio para que surtan efecto los cambios.

systemctl restart mariadb

Para definir igualmente la codificación predeterminada para el mandato mysql, edite el archivo /etc/my.cnf.d/client.cnf:

vim /etc/my.cnf.d/mysql-clients.cnf

Añada la siguiente línea en la sección [mysql]:

default-character-set=utf8mb4

Ejemplo:

[mysql]
default-character-set=utf8mb4

Si requiere utilizar UTF-16 como codificación predeterminada, edite el archivo /etc/my.cnf.d/mariadb-server.cnf:

vim /etc/my.cnf.d/mariadb-server.cnf

Añada las siguientes líneas en la sección [mysqld]:

collation_server=utf16_unicode_ci
character-set-server=utf16
init_connect='SET collation_connection = utf16_unicode_ci'
init_connect='SET NAMES utf16'

Ejemplo:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mariadb/mariadb.log
pid-file=/run/mariadb/mariadb.pid
# Deshabilitar la resolución de nombres de anfitrión
skip-name-resolve
# Cache de consultas a 32MiB
query_cache_size = 32M
# Codificación predererminada a UTF-8
collation_server=utf16_unicode_ci
character-set-server=utf16
init_connect='SET collation_connection = utf16_unicode_ci'
init_connect='SET NAMES utf16'

Guarde los cambios y salida del editor de texto.

Reinicie el servicio para que surtan efecto los cambios.

systemctl restart mariadb

Para definir igualmente la codificación predeterminada para el mandato mysql, edite el archivo /etc/my.cnf.d/client.cnf:

vim /etc/my.cnf.d/mysql-clients.cnf

Añada la siguiente línea en la sección [mysql]:

default-character-set=utf16

Ejemplo:

[mysql]
default-character-set=utf16

Servidores con más de 4 GB RAM.

Si dispone de un servidor que tenga 4 GB RAM o superior, puede añadir las siguientes opciones en la sección [mysqld] del archivo /etc/my.cnf.d/mariadb-server.cnf:

# Máximo tamaño de paquetes a enviar o recibir desde el servidor.
# Valor predeterminado es 16M
max_allowed_packet = 64M
# Controla cuántos subprocesos se almacenan en caché para su uso
# por nuevas conexiones de clientes. Los subprocesos se liberan 
# después de 5 minutos de inactividad.
# Valor predeterminado es 256
thread_cache_size = 768
# El búfer que se asigna al ordenar el índice al hacer REPAIR
# o al crear índices con CREATE INDEX o ALTER TABLE
# Valor predeterminado es 128M
myisam_sort_buffer_size = 384M
# Al leer filas en orden después de una clasificación, las filas se
# leen a través de este búfer para evitar búsquedas en el disco.
# Valor predeterminado es 256K
read_rnd_buffer_size = 2M
# Cada hilo que realiza un escaneo secuencial asigna un búfer de este
# tamaño para cada tabla que escanea. Si realiza muchos escaneos 
# secuenciales, es posible que desee aumentar este valor.
# Valor predeterminado es 128K
read_buffer_size = 768K
# Cada hilo que necesita realizar una clasificación asigna un búfer de
# este tamaño.
# Valor predeterminado es 2M
sort_buffer_size = 6M
# El número de tablas abiertas en caché.
# Valor predeterminado es 2000
table_open_cache = 8000
# El tamaño en bytes de la caché de claves MyISAM, que es el búfer
# utilizado para los bloques de índice MyISAM.
# Valor predeterminado es 128M
key_buffer_size = 384M

Bibliografía.