Como em qualquer projeto de software essencial realizar backup dos dados dos bancos de dados, bem como restaurar estes backups, de seus bancos de dados MySQL ou MariaDB, bem como PostgreSQL.

Quando você está trabalhando com o ambiente de desenvolvimento de seus projetos PHP Laravel em contêineres Docker gerenciados pelo Laradock, é importante compreender como a estrutura de diretórios e arquivos é configurada em Docker.

Onde estão os arquivos dos bancos de dados no Docker Laradock#

No Docker os arquivos manipulados em seus contêineres podem existir apenas durante o tempo de sua execução, ou possuir volumes compartilhados com o sistema operacional hospedeiro.

É importante entender que geralmente os contêineres do Docker são temporários, isto é, são executados apenas durante o tempo necessário para que o comando rodnado no contêiner seja concluído. Sendo assim, por padrão, todos os dados criados dentro do contêiner apenas estão disponíveis enquanto ele estiver em execução. Por isto necessitamos configurar volumes compartilhados no Docker.

No Linux Ubuntu e Mint, o Laradock a configuração dos volumes de contêineres de serviços de bancos de dados, por padrão, aponta para o diretório .laradock/data, que é um subdiretório no diretório raiz de seu usuário.

Esta configuração está no arquivo .env, na variável DATA_PATH_HOST=~/.laradock/data. Portanto, você pode alterar o caminho padrão de seus dados dos contêineres para o mais adequado ao seu contexto. Vamos seguir considerando o caminho padrão.

Desta maneira, os arquivos do MySQl no Docker Laradock se encontram no diretório ~/.laradock/data/mysql, do MariaDB em ~/.laradock/data/mariadb e do PostgreSQL em ~/.laradock/data/postgres. Outros serviços de banco de dados seguirão a mesma lógica de compartilhamento de volumes.

Fazendo o Backup (dump) do MySQL no Docker Laradock#

Portanto, para fazer o backup ou dump de um banco de dados MySQL no Docker Laradock, você deve executar o comando mysqldump dentro do diretório correto no contêiner, apontando o destino para um diretório em seu sistema operacional hospedeiro. Para isso vamos chamar o comando docker exec:

docker exec laradock_mysql_1 /usr/bin/mysqldump -u root --password=root mydatabase > backup.sql

Na linha de comando acima:

  1. indicamos que a execução acontece no contêiner laradock_mysql_1, esta configuração pode alterar de acordo com o nome que você definiu para seus contêineres na configuração do Laradock
  2. executamos o comando mysqldump
  3. definirmos o usuário root com o parâmetro -u
  4. a senha com o parâmetro --password
  5. o nome do banco de dados que desejamos fazer o dump: mydatabase
  6. e o destino em nosso sistema hospedeiro, no exemplo, no próprio diretório onde estamos executando o docker exec

Para MariaDB podemos realizar as adequações de nome de contêiner e o comando de dump:

docker exec laradock_mariadb_1 /usr/bin/mariadb-dump -u root --password=root mydatabase > backup.sql

Se necessário adicione o host e a porta do servidor usando os parâmetros -h e -P:

docker exec laradock_mysql_1 /usr/bin/mysqldump -h 0.0.0.0 -P 3306 -u root --password=root mydatabase > backup.sql

No exemplo acima o ip do host é 0.0.0.0, caso não funcione use 127.0.0.0.

Restaurando um Backup do MySQL no Docker Laradock#

Para restaurar um arquivo de backup, realizado com mysqldump, ou mesmo executar um arquivo com comandos SQL para dentro de um banco de dados MySQL em um contêiner Docker Laradock, execute a linha de comando a seguir:

docker exec -i laradock_mysql_1 mysql -u root --password=root mydatabase < backup.sql

Na linha de comando acima:

  1. indicamos que a execução acontece no contêiner laradock_mysql_1, esta configuração pode alterar de acordo com o nome que você definiu para seus contêineres na configuração do Laradock
  2. executamos o comando mysql
  3. definirmos o usuário root com o parâmetro -u
  4. a senha com o parâmetro --password, a senha também pode ser indicada com -p, exemplo -proot
  5. o nome do banco de dados para onde desejamos executar o restore: mydatabase
  6. o caminho do arquivo com os comandos sql, este arquivo está em nosso sistema operacional hospedeiro.

Para MariaDB podemos realizar as adequações de nome de contêiner e o comando:

docker exec -i laradock_Mariadb_1 mariadb -u root --password=root mydatabase < backup.sql

No comando de restauração também é possíveo, se necessário, adicionar o host e a porta do servidor usando os parâmetros -h e -P, tal qual no exemplo de dump com estes parâmetros.

Referências#

Gist 1

Gist 2