Instalação e Configuração do MariaDB: Guia Completo para Ubuntu e CentOS

Vamos explorar o processo de instalação e configuração do MariaDB, um sistema de gerenciamento de banco de dados relacional (SGBDR) de código aberto, amplamente utilizado e derivado do MySQL.

Este sistema é desenvolvido por uma comunidade ativa, oferecendo também opções de suporte comercial. O MariaDB foi concebido para manter uma alta compatibilidade com o MySQL, embora existam algumas distinções importantes.

Neste guia, vamos detalhar a instalação e configuração do MariaDB em sistemas Ubuntu 20.x e CentOS 7.x/8.x. Adicionalmente, examinaremos práticas recomendadas para aprimorar a segurança e o desempenho do seu banco de dados.

Instalação do MariaDB no Ubuntu

No Ubuntu 20.x, o MariaDB está disponível diretamente nos repositórios padrão do sistema. Utilizaremos o gerenciador de pacotes apt para realizar essa instalação.

Primeiramente, atualize as informações dos repositórios do apt executando o seguinte comando:

sudo apt update

Após a atualização dos repositórios, proceda com a instalação do MariaDB, utilizando o seguinte comando:

sudo apt install mariadb-server

Este comando instalará o MariaDB e seus pacotes dependentes. Confirme a instalação digitando ‘Y’ quando solicitado pelo sistema durante a execução do comando.

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

Instalação do MariaDB no CentOS 7.x

No CentOS 7.x, a versão do MariaDB disponível no repositório padrão é a 5.x. Vamos optar pela instalação da versão mais recente do MariaDB.

Para isso, será necessário configurar um repositório yum adicional. O MariaDB oferece um script para simplificar este processo, denominado mariadb_repo_setup. Execute os seguintes comandos em seu sistema CentOS 7.x para obter a configuração do repositório:

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

Este script configura automaticamente o repositório yum necessário para instalar a versão mais recente do MariaDB. No momento da redação deste artigo, essa versão é a 10.x.

Como alternativa, você pode configurar um repositório yum manualmente, criando um novo arquivo de repositório:

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

Adicione as seguintes informações ao arquivo e salve-o:

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

Para instalar o MariaDB, utilize o seguinte comando:

sudo yum install MariaDB-server

Confirme todos os prompts que aparecem durante a instalação digitando ‘y’.

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

Este procedimento conclui a instalação do servidor MariaDB e seus pacotes dependentes.

Instalação do MariaDB no CentOS 8.x

No CentOS 8.x, a versão disponível nos repositórios padrão é a 10.3 ou mais recente. Podemos instalar o MariaDB diretamente através do comando dnf:

sudo dnf install mariadb-server

Caso deseje instalar a versão mais recente, você pode seguir o procedimento manual descrito na seção do CentOS 7.x.

Iniciando o MariaDB

Em sistemas Ubuntu, o serviço MariaDB é iniciado automaticamente logo após a instalação. No entanto, em sistemas CentOS, é necessário habilitar e iniciar manualmente os serviços.

Em ambos os sistemas, Ubuntu e CentOS, utilize os comandos abaixo para iniciar o serviço MariaDB, habilitá-lo na inicialização e verificar seu status:

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

Resultado:

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.

Protegendo o MariaDB

Como primeiro passo após a instalação, devemos proteger a instalação do MariaDB. Isso inclui definir uma senha para o usuário root, desabilitar logins remotos para o usuário root, remover o banco de dados de teste, remover usuários anônimos e, finalmente, recarregar os privilégios.

Para proteger o MariaDB, execute o seguinte comando:

sudo mysql_secure_installation

Você pode seguir os prompts padrão com as ações recomendadas, a menos que tenha alguma necessidade específica de configuração.

Resultado:

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!

Neste exemplo, utilizaremos a autenticação do sistema, portanto, não definiremos uma senha de root separada para o MariaDB, pois ele já é seguro. Se necessário, você também pode configurar uma senha de root específica.

Validação da Configuração

Para verificar se a configuração do MariaDB foi realizada com sucesso, execute o seguinte comando (informe a senha que você configurou durante a execução do mysql_secure_installation ou, caso tenha optado por não definir uma senha, utilize as credenciais de root do seu 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

Você pode configurar uma nova conta de administrador em substituição do usuário root, conforme demonstrado abaixo (substitua o valor da senha pela senha que deseja definir para a conta 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 o acesso com o novo usuário administrador, utilizando o comando abaixo (informe a senha configurada no passo 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

Otimização do Sistema Operacional

Após a instalação e proteção da sua configuração do MariaDB, é importante realizar ajustes no sistema operacional e no banco de dados para obter um desempenho otimizado. Esses ajustes podem variar dependendo da configuração do seu sistema, do tipo de uso, do número de usuários e outros fatores.

Vamos examinar alguns parâmetros do sistema que podem ser configurados para o MariaDB do ponto de vista do sistema operacional.

Configurações do Kernel Linux – Agendador de E/S

Os agendadores de E/S recomendados para o MariaDB são noop e deadline. Para verificar o agendador atual, utilize o comando cat /sys/block/${DEVICE}/queue/scheduler:

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

Uma mudança temporária no agendador pode ser realizada utilizando o seguinte comando. Essa alteração terá um efeito imediato no desempenho do sistema, se houver:

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

Para tornar essa mudança permanente, é necessário configurá-la no arquivo de configuração do GRUB, conforme demonstrado abaixo, em /etc/default/grub, reconstruir o GRUB e reiniciar o sistema.

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop"

Limites de Recursos – Limite de Arquivos Abertos

O Linux geralmente impõe um limite ao número de descritores de arquivos que cada processo pode abrir. Para um sistema de banco de dados ativo, esse limite pode ser facilmente excedido e impactar o desempenho. Em muitos sistemas Linux, o limite padrão é 1024. Além disso, existem opções de limites flexíveis e rígidos.

Para aumentar esse limite, você pode adicionar as seguintes linhas em seu arquivo /etc/security/limits.conf:

mysql soft nofile 65535
mysql hard nofile 65535

Após reiniciar o sistema, o usuário mysql poderá verificar e utilizar os novos limites. Isso pode ser confirmado utilizando os comandos:

ulimit -Sn
65535
ulimit -Hn
65535

Limites de Recursos – Tamanho do Arquivo Core

O Linux também limita o tamanho dos arquivos core, conforme demonstrado no caso anterior. Esse limite também possui limites flexíveis e rígidos. Por padrão, o limite flexível é definido como 0, o que efetivamente desativa a geração de arquivos core. Para permitir a geração de arquivos core (além de outras configurações necessárias para a geração de core dump), podemos aumentar este valor em /etc/security/limits.conf:

mysql soft core unlimited
mysql hard core unlimited

Após reiniciar o sistema, o usuário mysql poderá verificar os novos valores utilizando o comando ulimit:

ulimit -Sc
unlimited
ulimit -Hc
unlimited

Configurar Swap

O valor de swap no Linux determina a probabilidade do sistema mover uma página da memória para o espaço de swap configurado. Normalmente, o valor padrão é definido como 60, e pode ser verificado utilizando:

sysctl vm.swappiness

Esse valor pode variar de 0 a 100, onde um valor menor significa uma menor probabilidade de uso do swap. Em um servidor de banco de dados que executa apenas o MariaDB, é recomendado reduzir esse valor para 0, para evitar o uso de swap tanto quanto possível. É importante observar que configurar o valor de swappiness para 0 deve ser feito com cautela, considerando outros aspectos de design do sistema. Em cenários de alto uso de memória ou carga de E/S, existe o risco de o processo de falta de memória (OOM) ser eliminado pelo kernel.

Como um valor baixo de swappiness é recomendado para cargas de trabalho de banco de dados, para o MariaDB, é recomendável definir o swappiness para 1. Você pode adicionar a linha abaixo em /etc/sysctl.conf para tornar esta alteração persistente:

vm.swappiness = 1

As alterações terão efeito após a reinicialização do sistema. No entanto, você pode aplicá-las de forma imediata utilizando o comando sysctl:

sysctl -w vm.swappiness=1

Otimizações do Sistema de Arquivos

Para o MariaDB, os melhores sistemas de arquivos Linux são considerados ext4, XFS e Btrfs. Todos estão incluídos no kernel Linux principal e amplamente suportados. Esses sistemas de arquivos estão disponíveis na maioria das distribuições Linux. Cada sistema de arquivos tem suas propriedades e funcionalidades exclusivas. A escolha de um deles deve ser feita com base em uma análise dos requisitos.

Adicionalmente, em um servidor de banco de dados, geralmente não é necessário registrar o tempo de acesso aos arquivos. Podemos desativar essa funcionalidade para melhorar o desempenho. Você pode montar o sistema de arquivos relevante com a opção noatime ou adicioná-la nas opções de montagem do arquivo /etc/fstab para torná-la persistente.

Otimização do Banco de Dados

Existem diversas opções de configuração interna do MariaDB que podem ser personalizadas de acordo com as necessidades e requisitos de cada usuário.

Vamos discutir alguns deles aqui.

O MariaDB é configurado, principalmente, através do arquivo my.cnf.

No Ubuntu, o arquivo my.cnf pode ser encontrado em:

/etc/mysql/my.cnf

Enquanto no CentOS, ele está localizado em:

/etc/my.cnf

A documentação detalhada das variáveis disponíveis para configuração no arquivo pode ser consultada aqui.

Muito também depende do tipo de mecanismo de armazenamento utilizado pelo MariaDB, ou seja, MyISAM e InnoDB ou XtraDB. Cada um deles tem suas vantagens e desvantagens. A escolha de um deles depende dos requisitos do banco de dados e da aplicação.

O parâmetro innodb_buffer_pool_size deve ser configurado para cerca de 80% da sua memória. Isso garante que 80% do seu conjunto de dados esteja armazenado na memória.

Alguns outros parâmetros ajustáveis importantes são:

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

Mais detalhes sobre o ajuste das variáveis do InnoDB ou XtraDB podem ser encontrados aqui. Consulte este guia para todas as opções de ajuste disponíveis para o MariaDB.

Se você tiver interesse, pode consultar estes recursos para aprender SQL e NoSQL.

Conclusão

O MariaDB é uma escolha popular como sistema de gerenciamento de banco de dados relacional (SGBDR). Sua natureza de código aberto e o apoio de uma comunidade ativa contribuem para essa popularidade.

Para obter mais informações, consulte a documentação oficial, que aborda temas como SQL básico, migração, administração do MariaDB, alta disponibilidade, ajuste de desempenho, mecanismos de armazenamento, programação e personalização. Você também pode desabilitar o log binário caso não esteja utilizando um cluster.