Como ajustar as configurações do MySQL de acordo com a memória do CloudFlex?

Como ajustar as configurações do MySQL de acordo com a memória do CloudFlex?

Ao instalar ou reinstalar o template CentOS 6.7 + LAMP em seu CloudFlex, são disponibilizados arquivos my.cnf personalizados de configuração do MySQL no diretório /etc/my.cnf.custom do servidor.

A CentralServer disponibiliza estes arquivos de configuração, já otimizados de acordo com a quantidade de memória contratada para o CloudFlex, conforme:

Quantidade de Memória do Servidor
Nome do Arquivo
de 1 a 3 GB
my-1G.cnf
de 4 a 9 GB
my-4G.cnf
de 10 a 15 GB
my-10G.cnf
de 16 a 27 GB
my-16G.cnf
de 28 a 40 GB
my-28G.cnf

Configurando link simbólico

É possível chamar o arquivo my-1G.cnf, do exemplo acima, através de um link simbólico montado em /etc/my.cnf. Para isto, é necessário mover ou renomear o arquivo original existente e, em seguida, criar o link simbólico, conforme:

# mv /etc/my.cnf /etc/my.cnf.default

# ln -s /etc/my.cnf.custom/my-1G.cnf /etc/my.cnf


Segue exemplo de um arquivo my.cnf que pode ser utilizado em um CloudFlex com 2 vCPU e 1 GB de memória. Neste caso, o arquivo será my-1G.cnf:


#::::::::::::::
#Cloud (2 vCPU, 1 GB RAM)
#:::::::::::::

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

#slow_query_log=1
#slow-query-log-file=/var/log/mariadb/mariadb_slow_queries.log
#max_user_connections=20
#max_connections=150
thread_cache_size=8
innodb_file_per_table
skip-name-resolve
wait_timeout=300
interactive_timeout=300
open_files_limit=10000
query_cache_type=1
secure_auth=0
query_cache_limit=2M

#::::::::::::::
#Parâmetros de acordo com o tamanho do Cloud Server
query_cache_size=32M
innodb_buffer_pool_size=256M
key_buffer_size=32M
#::::::::::::::

[mysql.server]
user=mysql
basedir=/var/lib

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid


Os padrões que serão alterados nos arquivos, conforme a configuração do servidor, são:

query_cache_size=32M
innodb_buffer_pool_size=256M
key_buffer_size=32M


Especificações técnicas dos parâmetros

Segue descrição dos parâmetros a serem otimizados:

  • key_buffer_size: Buffer usado para indexar blocos.
  • innodb_buffer_pool_size: Tamanho em bytes do buffer de memória que o InnoDB usa para armazenar dados e índices de suas tabelas.
  • query_cache_size: Quantidade de memória alocada para cache de resultados de pesquisas.
  • max_connections: Número máximo permitido de conexões simultâneas.
  • max_user_connections: Número máximo de conexões por usuário.

Criando script de atualização da memória contratada

Após realizar upgrade de memória, é recomendado alterar os parâmetros para obter maior desempenho dos recursos e serviços. Em caso de downgrade, a readequação destes parâmetros é necessária para o correto funcionamento dos serviços, evitando que o MySQL realize alocação de memória superior aos recursos disponíveis no servidor.

É possível automatizar a configuração dos parâmetros do my.cnf, para isso crie um script de inicialização, conforme os passos a seguir:

1. Mova ou renomeie o arquivo original existente:
# mv /etc/my.cnf /etc/my.cnf.default


2. Acesse o diretório de inicialização do CentOS:
# cd /etc/rc.d/init.d


3. Crie o script a ser utilizado (ex: mycnf.sh):
# touch mycnf.sh


4. Dê permissão de execução para o script criado:
# chmod +x mycnf.sh


5. Abra o arquivo criado e, em seguida, edite-o colando o código abaixo:
#!/bin/bash
# chkconfig: - 10 60
# description: mycnf.sh script

#Remove link simbolico my.cnf
unlink /etc/my.cnf

#Verifica quantidade de memória do servidor
memory=`free -m | head -2 | tail -1 | awk '{print $2}'`

if [ "$memory" -le 3000 ]; then
        ln -s /etc/my.cnf.custom/my-1G.cnf /etc/my.cnf
elif [ "$memory" -gt 3000 ] && [ "$memory" -le 9000 ]; then
        ln -s /etc/my.cnf.custom/my-4G.cnf /etc/my.cnf
elif [ "$memory" -gt 9000 ] && [ "$memory" -le 15000 ]; then
        ln -s /etc/my.cnf.custom/my-10G.cnf /etc/my.cnf
elif [ "$memory" -gt 15000 ] && [ "$memory" -le 27000 ]; then
        ln -s /etc/my.cnf.custom/my-16G.cnf /etc/my.cnf
elif [ "$memory" -gt 27000 ]; then
        ln -s /etc/my.cnf.custom/my-28G.cnf /etc/my.cnf
fi


6. Por fim, adicione o script de inicialização abaixo:
# chkconfig --add mycnf.sh

# chkconfig mycnf.sh on


Assim, na próxima inicialização do sistema, o script será executado verificando a memória disponível no sistema e ajustando o seu arquivo my.cnf.