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.