Olá pessoal! Neste artigo veremos uma solução muito útil nas ferramentas de um DBA MySQL que facilita muito a nossa vida. Dependendo do volume de dados com que trabalhamos, o Mysqldump, ferramenta nativa instalada com o serviço MySQL para tratamento dos backups, acaba se tornando inviável devido ao tempo necessário para gerar um dump.
Dessa forma, existe uma ferramenta que está evoluindo cada vez mais e é muito robusta, trazendo diversas funcionalidades úteis para a administração do dia a dia. Estamos falando o MySQL Shell (https://dev.mysql.com/downloads/shell/). Ele está disponível para Windows, Linux e MacOS.
Um diferencial dessa ferramenta é a possibilidade de executar scripts de diversas linguagens como SQL, Python e JavaScript, como podemos ver na imagem abaixo, após acessar o menu de help do Shell:


Abaixo uma lista de todos os comandos disponíveis no MySQL Shell:
Lembre-se de que essa ferramenta é muito completa e não usamos apenas para backup, logo possui diversas aplicabilidades.
A ideia principal deste artigo é mostrar como utilizar o MySQL Shell para realizar operações de backup e restore. Não entraremos em detalhes de como instalá-lo, logo, espera-se que você já o tenha baixado e instalado.
Para gerar um dump de um banco específico, por exemplo, podemos utilizar o comando abaixo:
util.dumpSchemas([“sakila”], “/home/dump/sakila”, {dryRun:false, consistent:false, threads: 16, compatibility: [“strip_definers”, “force_innodb”]}) |
Lembrando que este comando foi utilizado no modo JavaScript (\js):


Neste comando, estamos realizando um dump do banco sakila e apontando como destino o diretório /home/dump/sakila. O parâmetro dryRun é muito útil, visto que ele realiza uma validação no banco caso esteja definido como True. Já o parâmetro consistent:false, significa que não ocasionará bloqueios durante o processo, logo pode ser usado em qualquer momento e pegará os dados conforme estiverem naquele exato momento. Também é possível informar a quantidade de threads para realizar o dump bem como informar valores na seção de compatibilidade (https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-utilities-dump-instance-schema.html). Neste caso, estou informando para remover todas as cláusulas de DEFINER de views, routines, events e triggers além de alterar todos os comandos de CREATE TABLE para forçar a utilização da engine innodb para tabelas que não a utilizem.
Após o dump ter finalizado e removido o banco, vamos avaliar o restore, se ele está preparado para ser utilizado com o seguinte comando:
util.loadDump(“/home/dump/sakila”, {schema:”sakila-restore”, threads:16, dryRun:true}) |
Veja que nenhuma alteração foi encontrada:


Feita validação, podemos utilizar o mesmo comando, alterando apenas o valor do parâmetro dryRun:
util.loadDump(“/home/dump/sakila”, {schema:”sakila_restore”, threads:16, dryRun:false}) |


Abaixo deixo a referência de alguns utilitários úteis para o dia a dia:
MySQL :: MySQL Shell 8.0 :: 11 MySQL Shell Utilities
Espero que esse artigo tenha ajudado você.
Até o próximo post! 😊