/docker-mysql-server

Objetivo deste tópico é a Implementação do MySQL Communit Server no Linux com Docker em um ambiente de desenvolvimento local.

MIT LicenseMIT

Implementação do MySQL Communit Server no Linux com Docker

Resumo

Esta página foi elaborada, com informações básicas, sobre como instalar e configurar o MySQL Communit Server em um ambiente de desenvolvimento local.

O Docker MySQL Server é uma Imagem otimizada do MySQL Comunit Server. Criado, mantido e apoiado pela equipe MySQL da Oracle.

Aviso

Esta é uma sugestão de uma configuração inicial, para uso em máquinas de testes ou desenvolvimento. Não implemente em um servidor MySQL na produção, sem considerar a segurança e desempenho.

Pré-requisitos:

- Máquina com sistema operacional Linux;
- Você precisa ter o Docker instalado em sua máquina local;

Iniciar a instalação

Baixe a imagem otimizada do MySQL Server Docker

$ docker pull mysql/mysql-server

A imagem foi baixada com sucesso, para visualizar a imagem digite:

$ docker image ls

Iniciaremos um container novo.

Criar os volumes "datasets" e "db_mysql". Criaremos estes volumes por dois motivos:

  1. Porque é uma das formas de compartilhar dados entre os containers e a máquina local;
  2. Para manter o volume /var/lib/mysql persistente;

Os dados gravados no container Docker são voláteis, ou seja, quando um container é encerrado os dados ou configurações adicionais serão perdidos. Então, criar um volume e mapeá-lo em um diretório na máquina local permite mantê-los persistentes.

Esta é uma sugestão, você não precisa a criar esses volumes. Para o ambiente de desenvolvimento que estaremos contruindo será necessário.

Para criamos os volumes persistentes na máquina local digite:

$ docker volume create datasets

$ docker volume create db_mysql

Listar os volumes criados:

$ docker volume ls

Caso você queira saber, onde os volumes foram criados na máquina local, digite:

$ docker inspect datasets

ou 

$ docker inspect db_mysql

Os volumes foram criados com sucesso!

Iniciaremos o container MySQL.

$ docker container run --name=MySQL \
                     -e MYSQL_ROOT_HOST=% \
                     -d --mount type=volume,source=datasets,destination=/opt/datasets \
                     --mount type=volume,source=db_mysql,destination=/var/lib/mysql  \
                     mysql/mysql-server:8.0
        

Aguarde a inicialização do serviço!

A inicialização do container pode levar algum tempo. Quando o servidor estiver pronto para uso, o STATUS do container na saída do comando, docker ps, mudará de (health: starting) para (healthy).

O container está sendo executado em segundo plano, para monitorar a saída do container, use o seguinte comando:

$ docker logs MySQL

Procure nos logs a senha padrão do usário root e copie.

$ docker logs MySQL 2>&1 | grep GENERATED

Configuração

Agora acessaremos o container do servidor MySQL que foi criado e instanciado.

Use o comando docker exec -it, para iniciar um cliente mysql dentro do container Docker.

$ docker exec -it MySQL mysql -u root -p

Informe a senha aleatória que foi criada.

Após digitar a senha, teremos o acesso ao SHELL do MySQL.

Alteraremos a senha do root e permitir o acesso remoto via console da máquina local. Para redefinir a senha do root do servidor execute esta instrução:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'senha@12345678';

Vamos testar o acesso via docker exec -it com a nova senha

$ docker exec -it MySQL mysql -u root -psenha@12345678

Agora via console do Linux local

Para acessar o servidor MySQL, que foi instanciado no Docker, você precisa descobrir o IP da máquia. Use o comando docker inspect para examinar detalhes da configuração do Docker.

$ docker inspect MySQL

Tentativa de acesso 01

$ mysql -u root -p -h 172.17.0.3 -u root

Foi reportado um Erro!.

O usuário root não tem permissão para acesso remoto, então para resolver esse problema vamos criar um usuário para acesso remoto.

A sequência de instruções para essa operação são:

  1. Acessar o console SHELL do MySQL;
$ docker exec -it MySQL mysql -u root -psenha@12345678
  1. No SHELL, digite os seguintes comandos: (Lembrando que "remoto@123" é uma senha de demonstração)
mysql> CREATE USER 'santana'@'%' IDENTIFIED WITH mysql_native_password BY 'remoto@123';
Query OK, 0 rows affected (0.39 sec)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'santana'@'%';
Query OK, 0 rows affected (0.47 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.27 sec)

Tentativa de acesso 02

$ mysql -u santana -p -h 172.17.0.3 

Concluído!

O servidor MySQL foi instalado e configurado com sucesso!

Para acessar ao Banco de Dados, use os comandos: docker exec -it , ou via qualquer cliente MySQL remoto.

Instruções adicionais:

$ docker ps (Lista todos os containes que estão sendo executados)
$ docker stop MySQL (Para o serviço)
$ docker start MySQL (Inicia o serviço)
$ docker restart MySQL (Reinicia o serviço)

Espero ter contribuido com o seu desenvolvimento de alguma forma.

Carlos Eugênio

Referências

Documentação detalhada: Consulte, Implementando MySQL no Linux com Docker ou Manual de Referência