Guia do MySQL Shell para Administração e Backup

O MySQL Shell representa a nova geração de clientes MySQL de alta performence. Introduzido com o MySQL 8.0, ele oferece uma interface unificada para gerenciar diversos produtos MySQL, incluindo o Servidor MySQL, MySQL Router e o InnoDB Cluster. Diferente do cliente mysql tradicional, o MySQL Shell permite a interação com o servidor usando SQL, Python e JavaScript, proporcionando maior flexibilidade e automação.

Instalação e Uso Básico do MySQL Shell

É recomendável utilizar sempre a versão mais recente do MySQL Shell, que é compatível com versões 5.7 e 8.0 do MySQL Server. A instalação é independente e pode ser feita via pacotes binários ou RPMs, dependendo do sistema operacional.

Após a instalação, o MySQL Shell pode ser iniciado com o comando mysqlsh. Ele opera em modo interativo ou de linha de comando (batch mode). Em modo interativo, é possível alternar entre os modos SQL, JavaScript (JS) e Python (Py) usando os comandos \sql, \js e \py, respectivamente. Se nenhum modo for especificado, o padrão é JavaScript.


# Modo de Linha de Comando: especifique a linguagem com --sql, --js ou --py
mysqlsh --sql < /caminho/para/script.sql

# Modo Interativo: alterne entre modos com \, \, ou \
mysqlsh
MySQL Shell 8.0.36

...
MySQL  localhost:3306 ssl  JS > \sql
Switching to SQL mode... Commands end with ;
MySQL  localhost:3306 ssl  SQL > \js
Switching to JavaScript mode...
MySQL  localhost:3306 ssl  JS > \py
Switching to Python mode...
MySQL  localhost:3306 ssl  Py >
   

No modo SQL, a experiência é similar ao cliente mysql, mas com funcionalidades adicionais como autocompletar com a tecla TAB e o comando \history para visualizar comandos executados.

A capacidade de executar scripts em JavaScript e Python abre um leque de possibilidades para automação. Veja exemplos:


# Exemplo em JavaScript para criar um banco de dados e uma tabela
MySQL  localhost:33060+ ssl  JS > var db = session.createSchema('meu_db');
MySQL  localhost:33060+ ssl  JS > print("Banco de dados 'meu_db' criado.");
Database 'meu_db' created.
MySQL  localhost:33060+ ssl  JS > var sqlCreateTable = "CREATE TABLE meu_db.minha_tabela (id INT AUTO_INCREMENT PRIMARY KEY, nome VARCHAR(255))";
MySQL  localhost:33060+ ssl  JS > session.sql(sqlCreateTable).execute();
MySQL  localhost:33060+ ssl  JS > print("Tabela 'minha_tabela' criada.");
Table 'minha_tabela' created.

# Exemplo em Python para criar e popular uma tabela
MySQL  localhost:33060+ ssl  Py > session.run_sql('CREATE DATABASE IF NOT EXISTS banco_teste')
Query OK, 1 row affected (0.0084 sec)
MySQL  localhost:33060+ ssl  Py > session.run_sql('USE banco_teste')
Query OK, 0 rows affected (0.0008 sec)
MySQL  localhost:33060+ ssl  Py > session.run_sql('CREATE TABLE IF NOT EXISTS usuarios (id INT AUTO_INCREMENT PRIMARY KEY, nome VARCHAR(50), idade INT)')
Query OK, 0 rows affected (0.0402 sec)
MySQL  localhost:33060+ ssl  Py > session.run_sql("INSERT INTO usuarios (nome, idade) VALUES ('Alice', 30), ('Bob', 25)")
Query OK, 2 rows affected (0.0090 sec)
Records: 2 Duplicates: 0 Warnings: 0
MySQL  localhost:33060+ ssl  Py > resultado = session.run_sql('SELECT * FROM usuarios')
MySQL  localhost:33060+ ssl  Py > print(resultado.fetch_all())
[[1, "Alice", 30], [2, "Bob", 25]]
   

Módulo util para Funções Utilitárias

O módulo util oferece um conjunto robusto de ferramentas, incluindo:

  • util.checkForServerUpgrade(): Verifica a compatibilidade para upgrade do servidor.
  • Ferramentas de Importação:
    • importTable / import_table: Importa dados via protocolo MySQL tradicional.
    • importJson / import_json: Importa dados JSON eficientemente usando o protocolo X.
  • Utilitários de Dump Lógico (a partir do 8.0.21):
    • util.dumpInstance(): Backup completo da instância.
    • util.dumpSchemas(): Backup de esquemas específicos.
    • util.loadDump(): Restauração a partir de backups lógicos.

Backup e Restauração com util.dump* e util.loadDump

O MySQL Shell simplifica significativamente os processos de backup e restauração. Os comandos de dump e load devem ser eexcutados no modo JavaScript.

Backup (util.dumpInstance, util.dumpSchemas)

O backup gera arquivos que incluem metadados, definições de objetos (DDL) e dados, com opções de compressão (zstd, gzip, none) e paralelismo.


# Backup completo da instância com 4 threads e compressão zstd (padrão)
util.dumpInstance('/diretorio_backup/instancia_completa')

# Backup completo, especificando 8 threads e compressão gzip
util.dumpInstance('/diretorio_backup/instancia_gzip', {threads: 8, compression: 'gzip'})

# Backup de esquemas específicos com exclusão de tabelas
util.dumpSchemas(['esquema1', 'esquema2'], '/diretorio_backup/esquemas_especificos', {excludeTables: ['esquema1.tabela_excluida']})

# Backup apenas da estrutura (DDL)
util.dumpInstance('/diretorio_backup/apenas_ddl', {ddlOnly: true})

# Backup excluindo um banco de dados
util.dumpInstance('/diretorio_backup/sem_teste', {excludeSchemas: ['test']})
   

Restauração (util.loadDump)

Para restaurar, certifique-se de que a variável local_infile esteja habilitada no servidor MySQL de destino.


# Restauração completa do backup
util.loadDump('/diretorio_backup/instancia_completa')

# Restauração com 8 threads e ignorando erros
util.loadDump('/diretorio_backup/instancia_completa', { threads: 8, continueOnError: true })

# Restauração de um esquema específico
util.loadDump('/diretorio_backup/instancia_completa', { includeSchemas: ['meu_db'] })

# Restauração para um servidor diferente (executado via linha de comando)
mysqlsh -u root -p'senha' -h host_remoto --js -e "util.loadDump('/diretorio_backup/instancia_completa')"
   

Parâmetros Detalhados para Dump e Load

Ambos os comandos oferecem uma vasta gama de opções para customizar backups e restaurações, como:

  • threads: Número de threads para paralelismo.
  • compression: Algoritmo de compressão (zstd, gzip, none).
  • excludeSchemas, includeSchemas, excludeTables, includeTables: Filtros por esquemas e tabelas.
  • ddlOnly, dataOnly: Para exportar apenas DDL ou dados.
  • users: Controle sobre a exportação/importação de usuários.
  • continueOnError: Para prosseguir com a restauração mesmo em caso de erros.
  • includeEvents, excludeRoutines, etc.: Controle granular sobre objetos como eventos, rotinas e triggers.
  • loadDdl, loadData, loadUsers: Controle sobre o que será restaurado.
  • skipBinlog: Para desabilitar o log binário durante a restauração.
  • updateGtidSet: Gerenciamento do GTID Set durante a restauração.

O MySQL Shell é uma ferramenta poderosa que aprimora a administração e a gestão de backups do MySQL, oferecendo recursos avançados e maior eficiência.

Tags: MySQL mysql-shell backup restauração administração-de-banco-de-dados

Publicado em 7-6 07:39