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 que estamos trabalhando, a ferramenta nativa que é instalada juntamente com o próprio serviço do MySQL responsável pelo tratamento dos backups, o Mysqldump, acaba se tornando inviável devido ao tempo 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:
https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-commands.html
Lembrando que esta ferramenta é muito completa e não é utilizada somente 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:
https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-utilities.html.
Espero que esse artigo tenha sido útil para você.
Até o próximo post! 😊