Pesquisa de site

Como instalar, proteger e ajustar o desempenho do servidor de banco de dados MariaDB


Um servidor de banco de dados é um componente crítico da infraestrutura de rede necessária para os aplicativos atuais. Sem a capacidade de armazenar, recuperar, atualizar e excluir dados (quando necessário), a utilidade e o escopo dos aplicativos da Web e de desktop tornam-se muito limitados.

Além disso, saber instalar, gerenciar e configurar um servidor de banco de dados (para que funcione conforme o esperado) é uma habilidade essencial que todo administrador de sistema deve ter.

Neste artigo revisaremos brevemente como instalar e proteger um servidor de banco de dados MariaDB e depois explicaremos como configurá-lo.

Instalando e protegendo um servidor MariaDB

No CentOS 7.x, o MariaDB substituiu o MySQL, que ainda pode ser encontrado no Ubuntu (junto com o MariaDB). O mesmo se aplica ao openSUSE.

Para resumir, usaremos apenas MariaDB neste tutorial, mas observe que além de terem nomes e filosofias de desenvolvimento diferentes, ambos os Sistemas de Gerenciamento de Banco de Dados Relacionais (RDBMSs forte> para abreviar) são quase idênticos.

Isso significa que os comandos do lado do cliente são os mesmos no MySQL e no MariaDB, e os arquivos de configuração são nomeados e localizados nos mesmos locais.

Para instalar o MariaDB, faça:

--------------- 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

Observe que, no Ubuntu, você será solicitado a inserir uma senha para o usuário root do RDBMS.

Uma vez instalados os pacotes acima, certifique-se de que o serviço de banco de dados esteja rodando e tenha sido ativado para iniciar na inicialização (no CentOS e no openSUSE você precisará realizar esta operação manualmente , enquanto no Ubuntu o processo de instalação já terá sido resolvido para você):

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

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

Em seguida, execute o script mysql_secure_installation. Este processo permitirá que você:

  1. definir/redefinir a senha do usuário root do RDBMS
  2. remover logins anônimos (permitindo assim que apenas usuários com uma conta válida façam login no RDBMS)
  3. desabilitar o acesso root para máquinas diferentes de localhost
  4. remova o banco de dados de teste (que qualquer pessoa pode acessar)
  5. ative as alterações associadas de 1 a 4.

Para uma descrição mais detalhada deste processo, você pode consultar a seção Pós-instalação em Instalar o banco de dados MariaDB no RHEL/CentOS/Fedora e Debian/Ubuntu.

Configurando o servidor MariaDB

As opções de configuração padrão são lidas nos seguintes arquivos na ordem especificada: /etc/mysql/my.cnf, /etc/my.cnf e ~ /.meu.cnf.

Na maioria das vezes, apenas existe /etc/my.cnf. É neste arquivo que definiremos as configurações de todo o servidor (que podem ser substituídas pelas mesmas configurações em ~/.my.cnf para cada usuário).

A primeira coisa que precisamos observar sobre my.cnf é que as configurações são organizadas em categorias (ou grupos), onde cada nome de categoria é colocado entre colchetes.

As configurações do sistema do servidor são fornecidas na seção [mysqld], onde normalmente você encontrará apenas as duas primeiras configurações na tabela abaixo. O restante são outras opções usadas com frequência (quando indicado, alteraremos o valor padrão por um personalizado de nossa escolha):

Setting and description

Valor padrão

datadir is the directory where the data files are stored.

datadir=/var/lib/mysql

socket indicates the name and location of the socket file that is used for local client connections. Keep in mind that a socket file is a resource that is utilized to pass information between applications.

socket=/var/lib/mysql/mysql.sock

bind_address is the address where the database server will listen on for TCP/IP connections. If you need your server to listen on more than one IP address, leave out this setting (0.0.0.0 which means it will listen on all IP addresses assigned to this specific host).

We will change this to instruct the service to listen only on its main address (192.168.0.13):

bind_address=192.168.0.13

bind_address=0.0.0.0

port represents the port where the database server will be listening.

We will replace the default value(3306) with 20500 (but we need to make sure nothing else is using that port):
port=20500

While some people will argue that security through obscurity is not good practice, changing the default application ports for higher ones is a rudimentary -yet effective- method to discourage port scans.

porta=3306

innodb_buffer_pool_size is the buffer pool (in bytes) of memory that is allocated for data and indexes that are accessed frequently when using Innodb (which is the default in MariaDB) or XtraDB as storage engine.

We will replace the default value with 256 MB:

innodb_buffer_pool_size=256M

innodb_buffer_pool_size=134217728

skip_name_resolve indicates whether hostnames will be resolved or not on incoming connections. If set to 1, as we will do in this guide, only IP addresses.

Unless you require hostnames to determine permissions, it is advisable to disable this variable (in order to speed up connections and queries) by setting its value to 1:

skip_name_resolve=1

skip_name_resolve=0

query_cache_size represents the size (in bytes) available to the query cache in disk, where the results of SELECT queries are stored for future use when an identical query (to the same database and using the same protocol and same character set) is performed.

You should choose a query cache size that matches your needs based on 1) the number of repetitive queries, and 2) the approximate number of records those repetitive queries are expected to return. We will set this value to 100 MB for the time being:

query_cache_size=100M

query_cache_size=0 (o que significa que está desabilitado por padrão)

max_connections is the maximum number of simultaneous client connections to the server. We will set this value to 30:
max_connections=30Each connection will use a thread, and thus will consume memory. Take this fact into account while setting max_connections.

max_connections=151

thread_cache_size indicates the numbers of threads that the server allocates for reuse after a client disconnects and frees thread(s) previously in use. In this situation, it is cheaper (performance-wise) to reuse a thread than instantiating a new one.

Again, this depends on the number of connections you are expecting. We can safely set this value to half the number of max_connections:

thread_cache_size=15

thread_cache_size=0 (desabilitado por padrão)

No CentOS, precisaremos dizer ao SELinux para permitir que o MariaDB escute em uma porta não padrão (20500 ) antes de reiniciar o serviço:

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

Em seguida, reinicie o serviço MariaDB.

Ajustando o desempenho do MariaDB

Para nos ajudar a verificar e ajustar a configuração de acordo com nossas necessidades específicas, podemos instalar o mysqltuner (um script que fornecerá sugestões para melhorar o desempenho do nosso servidor de banco de dados e aumentar sua estabilidade):

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

Em seguida, mude o diretório para a pasta extraída do tarball (a versão exata pode ser diferente no seu caso):

cd major-MySQLTuner-perl-7dabf27

e execute-o (será solicitado que você insira as credenciais da sua conta administrativa do MariaDB)

./mysqltuner.pl

A saída do script por si só é muito interessante, mas vamos pular para o final, onde as variáveis a serem ajustadas estão listadas com o valor recomendado:

A configuração query_cache_type indica se o cache de consulta está desabilitado (0) ou habilitado (1). Neste caso, mysqltuner está nos aconselhando a desativá-lo.

Então, por que somos aconselhados a desativá-lo agora? A razão é que o cache de consulta é útil principalmente em cenários de alta leitura/baixa gravação (o que não é o nosso caso, já que acabamos de instalar o servidor de banco de dados).

AVISO: Antes de fazer alterações na configuração de um servidor de produção, você é altamente encorajado a consultar um administrador de banco de dados especialista para garantir que uma recomendação dada pelo mysqltuner não terá impacto negativo em uma configuração existente.

Resumo

Neste artigo, explicamos como configurar um servidor de banco de dados MariaDB depois de instalá-lo e protegê-lo. As variáveis de configuração listadas na tabela acima são apenas algumas configurações que você pode considerar ao preparar o servidor para uso ou ao ajustá-lo posteriormente. Sempre consulte a documentação oficial do MariaDB antes de fazer alterações ou consulte nossas dicas de ajuste de desempenho do MariaDB:

Não perca: 15 dicas úteis de ajuste e otimização de desempenho do MariaDB

Como sempre, não hesite em nos informar se tiver alguma dúvida ou comentário sobre este artigo. Há alguma outra configuração de servidor que você gostaria de usar? Sinta-se à vontade para compartilhar com o resto da comunidade usando o formulário de comentários abaixo.