Rodar bancos de dados em containers é uma das formas mais eficientes de manter seu ambiente de desenvolvimento limpo e organizado. Neste artigo, vou mostrar como subir uma instância do MySQL 8.0 configurada com persistência de dados, ajuste de timezone e configurações personalizadas usando o Docker Compose.
Por que essa configuração? Link para o cabeçalho
Muitas vezes, ao subir o MySQL 8 padrão, enfrentamos problemas de autenticação com clientes antigos ou restrições de importação de arquivos. A configuração que vamos utilizar resolve três problemas comuns:
- Autenticação: Força o uso do
mysql_native_passwordpara compatibilidade. - Timezone: Configura o horário para
America/Sao_Paulo. - Importação de Arquivos: Libera o
secure_file_privvia arquivo de configuração customizado.
1. Estrutura de Pastas Link para o cabeçalho
Para começar, crie uma pasta para o seu projeto e organize a estrutura da seguinte forma:
meu-projeto-mysql/
├── custom/
│ └── my.cnf
└── docker-compose.yml
2. O Arquivo de Configuração (my.cnf) Link para o cabeçalho
Dentro da pasta custom, crie o arquivo my.cnf. Este arquivo é crucial se você pretende realizar operações como LOAD DATA INFILE ou exportações que exigem permissões de escrita no sistema de arquivos.
[mysqld]
secure_file_priv=""
Nota: A diretiva
secure_file_priv=""desabilita a restrição de diretório para importação e exportação de dados, o que é muito útil em ambientes de desenvolvimento.
3. O Arquivo Docker Compose Link para o cabeçalho
Na raiz do projeto, crie o arquivo docker-compose.yml. Note que mapeamos um volume relativo ao docker compose (./data/mysql) para garantir que os dados persistam mesmo se o container for destruído.
services:
db:
image: mysql:8.0
container_name: mysql-local
restart: always
# Comando essencial para compatibilidade com clientes SQL mais antigos
command:
- "--default-authentication-plugin=mysql_native_password"
environment:
- MYSQL_DATABASE=app
- MYSQL_ROOT_PASSWORD=root
- MYSQL_USER=user
- MYSQL_PASSWORD=12345678
- TZ=America/Sao_Paulo
ports:
- '3306:3306'
volumes:
# Persistência de dados
- ./data/mysql:/var/lib/mysql
# Injeção da configuração customizada
- ./custom/my.cnf:/etc/mysql/conf.d/my.cnf
Detalhes Importantes da Portabilidade: Link para o cabeçalho
- Volumes:
./data/mysql:/var/lib/mysql: O prefixo./indica que a pastadata/mysqlserá criada dentro da mesma pasta onde você executa odocker-compose up. Isso é o ideal para projetos portáteis.
- ./custom/my.cnf:/etc/mysql/conf.d/my.cnf: O MySQL lê automaticamente arquivos .cnf montados neste diretório do container, aplicando nossas regras personalizadas.
4. Executando o Container Link para o cabeçalho
Abra seu terminal na pasta do projeto e execute:
docker-compose up -d
O Docker irá baixar a imagem do MySQL 8.0 (se ainda não tiver) e iniciar o serviço na porta 3306.
5. Testando a Conexão Link para o cabeçalho
Agora você pode conectar no seu banco de dados usando seu cliente favorito (DBeaver, Workbench, HeidiSQL) com as credenciais:
-
Host: localhost
-
Port: 3306
-
Database: app
-
User: user
-
Password: 12345678
Pronto! Agora você tem um ambiente MySQL robusto, persistente e configurado para o fuso horário brasileiro rodando isolado no seu sistema, com a vantagem de que o projeto é totalmente portátil.