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

API Trace View

How I Cut 22.3 Seconds Off an API Call with Sentry 🕒

Struggling with slow API calls? Dan Mindru walks through how he used Sentry's new Trace View feature to shave off 22.3 seconds from an API call.

Get a practical walkthrough of how to identify bottlenecks, split tasks into multiple parallel tasks, identify slow AI model calls, and more.

Read more →

Top comments (0)

Speedy emails, satisfied customers

Postmark Image

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

👋 Kindness is contagious

Discover a treasure trove of wisdom within this insightful piece, highly respected in the nurturing DEV Community enviroment. Developers, whether novice or expert, are encouraged to participate and add to our shared knowledge basin.

A simple "thank you" can illuminate someone's day. Express your appreciation in the comments section!

On DEV, sharing ideas smoothens our journey and strengthens our community ties. Learn something useful? Offering a quick thanks to the author is deeply appreciated.

Okay