DEV Community

Cover image for Reduzindo o Uso de Memória do MySQL no Docker
Kaio Enzo
Kaio Enzo

Posted on

Reduzindo o Uso de Memória do MySQL no Docker

O MySQL pode consumir uma quantidade significativa de memória, especialmente em sistemas com recursos limitados, como VPSs. Recentemente tive problema com memória em minha VPS rodando vários containers WordPress com MySQL, os containers do MySQL estavam utilizando cerca de 500mb idle, após as alterações documentadas aqui, reduzi para cerca de 150mb!

Neste artigo, explico como reduzir o uso de memória configurando um container MySQL no Docker. Incluímos um exemplo de arquivo my.cnf otimizado, um docker-compose.yml com volume mapeado e uma explicação sobre permissões para o arquivo de configuração.

Passo 1: Criando o Arquivo de Configuração my.cnf

Crie um arquivo de configuração chamado mysql-low-memory-my.cnf em um diretório apropriado no host.

[mysqld]
# Define o tamanho do buffer principal utilizado pelo InnoDB
innodb_buffer_pool_size = 128M

# Diminui o tamanho do buffer de chave (MyISAM)
key_buffer_size = 8M

# Define o número máximo de conexões simultâneas
max_connections = 50

# Reduz o cache de threads
thread_cache_size = 8

# Limita o tamanho de tabelas temporárias em memória
tmp_table_size = 16M
max_heap_table_size = 16M

# Desativa o Performance Schema para economizar memória
performance_schema = 0

# Reduz o tamanho do buffer de log
innodb_log_buffer_size = 4M

# Ajusta o cache de tabelas abertas
table_open_cache = 200
Enter fullscreen mode Exit fullscreen mode

Passo 2: Alterar Permissões do Arquivo

Após criar o arquivo mysql-low-memory-my.cnf, é importante alterar suas permissões para que o MySQL leia-o corretamente e ele não seja editável por outros processos ou usuários.

chmod 0444 mysql-low-memory-my.cnf
Enter fullscreen mode Exit fullscreen mode

Passo 3: Configurando o docker-compose.yml

No arquivo docker-compose.yml, adicione o volume mapeando o arquivo de configuração para o container MySQL:

services:
  mysql:
    image: mysql:8
    container_name: mysql-container
    environment:
      MYSQL_ROOT_PASSWORD: yourpassword
    volumes:
      - './mysql-low-memory-my.cnf:/etc/mysql/conf.d/mysq-low-memory-my.cnf'
    ports:
      - "3306:3306"
Enter fullscreen mode Exit fullscreen mode

Passo 4: Iniciando o Container

docker compose up -d
Enter fullscreen mode Exit fullscreen mode

Pronto! Agora você tem um container rodando com baixo uso de memória! Lembre-se que as configurações podem impactar na performance do seu banco de dados, então, ajuste de acordo com a sua necessidade.

Para verificar o uso de memória do container, use o comando abaixo:

docker stats mysql-container
Enter fullscreen mode Exit fullscreen mode

Repositório com o código utilizado

Image of Datadog

The Essential Toolkit for Front-end Developers

Take a user-centric approach to front-end monitoring that evolves alongside increasingly complex frameworks and single-page applications.

Get The Kit

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay