15%

Poupe 15% em todos os serviços

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código:

Skills
Começar a trabalhar
15.10.2024

Como Listar Bancos de Dados MySQL via Linha de Comando no Linux

Listar todos os bancos de dados MySQL a partir da linha de comando é feito com uma única instrução SQL — SHOW DATABASES; — executada após autenticação no servidor MySQL usando o cliente mysql. Isso funciona em qualquer distribuição Linux executando MySQL 5.7, MySQL 8.x ou um servidor MariaDB compatível, e requer o privilégio SHOW DATABASES ou acesso de superusuário.

Este guia vai além do comando básico. Ele aborda opções de autenticação, visibilidade com escopo de privilégios, padrões de script não interativo, filtragem do esquema de desempenho e modos de falha comuns que confundem até administradores experientes.

Pré-requisitos

Antes de prosseguir, confirme o seguinte:

  • O MySQL Server ou MariaDB está instalado e o serviço está ativo.
  • Você tem uma conta de usuário com pelo menos o privilégio SHOW DATABASES, ou está autenticando como root.
  • O binário do cliente mysql está disponível no PATH do seu shell (verifique com which mysql).

Se você estiver gerenciando um servidor remoto — por exemplo, um ambiente de VPS Hosting — certifique-se também de que a porta MySQL (padrão 3306) está acessível ou que você está conectando via SSH.

Passo 1: Verificar se o Serviço MySQL Está em Execução

Antes de tentar conectar, confirme que o daemon está ativo:

sudo systemctl status mysql

Para instalações MariaDB, o nome do serviço é diferente:

sudo systemctl status mariadb

Se o serviço estiver parado, inicie-o:

sudo systemctl start mysql

Uma falha na inicialização é quase sempre explicada em journalctl -xe ou em /var/log/mysql/error.log. Verifique esses arquivos primeiro antes de presumir um problema de configuração.

Passo 2: Autenticar no Servidor MySQL

Login Interativo Padrão

mysql -u root -p
  • -u root — especifica o nome de usuário MySQL. Substitua root por qualquer conta válida.
  • -p — solicita a senha de forma interativa. Nunca passe a senha diretamente na linha de comando em produção (ex.: -pMyPassword), pois ela fica visível nas listagens de processos e no histórico do shell.

Após inserir a senha correta, o prompt MySQL aparece:

mysql>

Conectando a um Host Remoto ou Porta Não Padrão

mysql -u root -p -h 192.168.1.100 -P 3307
  • -h — especifica o IP ou hostname do host remoto.
  • -P — especifica um número de porta não padrão.

Usando um Arquivo de Opções para Automação

Para scripts e tarefas cron, armazene as credenciais em um arquivo de opções protegido em vez de incorporá-las no comando:

# ~/.my.cnf
[client]
user=root
password=YourSecurePassword

Restrinja as permissões imediatamente após criar o arquivo:

chmod 600 ~/.my.cnf

Com este arquivo em vigor, mysql autentica sem nenhuma flag:

mysql

Passo 3: Listar Todos os Bancos de Dados

Uma vez dentro do shell MySQL, execute:

SHOW DATABASES;

Exemplo de saída em uma instância MySQL 8 recém-instalada:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

Esses quatro esquemas de sistema estão presentes em toda instalação padrão do MySQL:

EsquemaFinalidade
`information_schema`Esquema virtual somente leitura que expõe metadados sobre todos os outros esquemas, tabelas, colunas e privilégios
`mysql`Tabelas de concessão principais, dados de fuso horário e configuração do servidor
`performance_schema`Dados de instrumentação de baixo nível para criação de perfil de consultas e diagnósticos
`sys`Visualizações legíveis por humanos construídas sobre `performance_schema`

Os bancos de dados criados pelo usuário aparecem junto com esses esquemas de sistema.

Passo 4: Filtrar a Lista de Bancos de Dados

Filtrar por Padrão de Nome

SHOW DATABASES aceita uma cláusula LIKE, que é útil quando um servidor hospeda dezenas de bancos de dados:

SHOW DATABASES LIKE 'wp_%';

Isso retorna apenas bancos de dados cujos nomes começam com wp_ — uma convenção de nomenclatura comum para instalações WordPress.

Consultar information_schema para Filtragem Avançada

Para filtragem mais precisa, consulte a tabela information_schema.SCHEMATA diretamente:

SELECT schema_name, default_character_set_name, default_collation_name
FROM information_schema.SCHEMATA
WHERE schema_name NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys')
ORDER BY schema_name;

Esta abordagem permite filtrar por conjunto de caracteres, collation ou qualquer outra coluna de metadados — algo que SHOW DATABASES não consegue fazer.

Passo 5: Inspecionar um Banco de Dados Específico

Para examinar o conteúdo de um banco de dados específico, mude o contexto com USE e liste suas tabelas:

USE database_name;
SHOW TABLES;

Para ver tamanhos de tabelas, contagens de linhas e mecanismos de armazenamento em uma única consulta:

SELECT
  table_name,
  engine,
  table_rows,
  ROUND((data_length + index_length) / 1024 / 1024, 2) AS size_mb
FROM information_schema.TABLES
WHERE table_schema = 'database_name'
ORDER BY (data_length + index_length) DESC;

Isso é muito mais útil do que SHOW TABLES sozinho e é o tipo de consulta que um DBA executa antes de planejar uma migração ou estratégia de backup.

Passo 6: Sair do Shell MySQL

EXIT;

Ou use o atalho de teclado Ctrl+D.

Uso Não Interativo: Listando Bancos de Dados a Partir do Shell

Em pipelines automatizados — scripts de backup, agentes de monitoramento, hooks de implantação — você precisa recuperar a lista de bancos de dados sem entrar em uma sessão interativa.

Comando Único com Flag -e

mysql -u root -p -e "SHOW DATABASES;"

Suprimir a Linha de Cabeçalho para Scripts

mysql -u root -p --skip-column-names -e "SHOW DATABASES;" 2>/dev/null

A flag --skip-column-names remove o cabeçalho Database, produzindo uma saída limpa adequada para iteração em um loop de shell:

for db in $(mysql -u root -p --skip-column-names -e "SHOW DATABASES;" 2>/dev/null); do
  echo "Processing: $db"
done

Usando mysqlshow como Alternativa

O utilitário mysqlshow fornece uma visão geral rápida sem entrar no shell MySQL:

mysqlshow -u root -p

Ele lista todos os bancos de dados que o usuário autenticado pode ver e aceita um argumento de nome de banco de dados para detalhar informações no nível de tabela:

mysqlshow -u root -p database_name

Escopo de Privilégios: Por Que Alguns Bancos de Dados Ficam Ocultos

Este é um dos comportamentos mais mal compreendidos no MySQL. Quando um usuário não possui o privilégio global SHOW DATABASES, SHOW DATABASES retorna apenas os bancos de dados para os quais esse usuário possui pelo menos um privilégio. Isso é por design — é um limite de segurança, não um bug.

Implicação prática: Um usuário de aplicação restrito pode executar SHOW DATABASES; e ver apenas um ou dois bancos de dados, mesmo que o servidor hospede cinquenta. Este é o comportamento correto. Se um usuário precisar ver a lista completa, conceda o privilégio explicitamente:

GRANT SHOW DATABASES ON *.* TO 'username'@'host';
FLUSH PRIVILEGES;

Use esta concessão com moderação. Em ambientes multilocatários — como uma configuração de Shared Web Hosting ou uma implantação de Dedicated Servers para múltiplos clientes — expor a lista completa de bancos de dados a usuários de aplicações é um risco de segurança.

MySQL vs. MariaDB: Diferenças de Comportamento

Tanto MySQL quanto MariaDB suportam SHOW DATABASES; e information_schema.SCHEMATA, mas há diferenças sutis que vale conhecer:

RecursoMySQL 8.xMariaDB 10.x
Sintaxe `SHOW DATABASES`SuportadoSuportado
`information_schema.SCHEMATA`DisponívelDisponível
Padrão `performance_schema`HabilitadoHabilitado (10.5+)
Esquema `sys`Incluído por padrãoOpcional, nem sempre presente
`SHOW DATABASES LIKE`SuportadoSuportado
Modelo de privilégios baseado em funçõesNativo (8.0+)Nativo (10.0.5+)
Binário do cliente `mysql``mysql``mysql` ou `mariadb`

Em instalações mais recentes do MariaDB, o binário canônico pode ser mariadb em vez de mysql, embora um link simbólico normalmente preserve a compatibilidade retroativa.

Erros Comuns e Como Corrigi-los

ERROR 1045 (28000): Access denied for user

Isso significa que a autenticação falhou. Verifique novamente o nome de usuário, senha e host. Para root no MySQL 8, o plugin de autenticação padrão é caching_sha2_password. Se o seu cliente não o suporta, conecte via socket:

sudo mysql -u root

Isso ignora a autenticação por senha ao executar como o usuário Linux root, dependendo do plugin auth_socket ou unix_socket em vez disso.

ERROR 2002 (HY000): Can't connect to local MySQL server through socket

O daemon MySQL não está em execução ou o caminho do arquivo socket está errado. Verifique:

sudo systemctl status mysql
ls -la /var/run/mysqld/mysqld.sock

ERROR 1044 (42000): Access denied for user to database

O usuário está autenticado, mas não possui privilégios no banco de dados de destino. Revise as concessões com:

SHOW GRANTS FOR 'username'@'host';

Matriz de Decisão Prática

Use esta referência para selecionar a abordagem correta para sua situação:

CenárioComando Recomendado
Exploração interativa`SHOW DATABASES;` dentro do shell `mysql`
Filtrar por prefixo de nome`SHOW DATABASES LIKE 'prefix_%';`
Listagem rica em metadadosConsultar `information_schema.SCHEMATA`
Scripts de shell / automação`mysql -e "SHOW DATABASES;" –skip-column-names`
Visão geral rápida sem shell`mysqlshow -u root -p`
Servidor remoto, porta não padrão`mysql -u root -p -h host -P port`
Automação sem senhaArquivo de opções `~/.my.cnf` com `chmod 600`
Depuração de problemas de acesso`SHOW GRANTS FOR 'user'@'host';`

Principais Conclusões Técnicas

  • SHOW DATABASES; tem escopo de privilégios. Um usuário sem o privilégio global SHOW DATABASES vê apenas os bancos de dados aos quais tem acesso explícito — isso é um recurso de segurança, não uma configuração incorreta.
  • Nunca passe senhas como argumentos de linha de comando em produção. Use -p para sessões interativas e ~/.my.cnf para automação.
  • information_schema.SCHEMATA é estritamente mais poderoso do que SHOW DATABASES para consultas com script ou filtradas.
  • O utilitário mysqlshow é subutilizado e fornece inspeção rápida e não interativa de bancos de dados e tabelas.
  • No MySQL 8, a autenticação baseada em socket (sudo mysql) é frequentemente o caminho mais rápido para acesso root em um servidor local.
  • Ao gerenciar múltiplos bancos de dados em um VPS com cPanel ou outro painel de controle, o gerenciador de banco de dados do painel é um wrapper GUI em torno desses mesmos comandos SQL — entender as consultas subjacentes dá a você controle total quando a GUI não é suficiente.
  • Para ambientes onde o acesso ao banco de dados está vinculado a SSL Certificates e conexões criptografadas, adicione --ssl-mode=REQUIRED às suas invocações do cliente mysql para impor TLS em trânsito.

FAQ

P: Por que SHOW DATABASES não mostra todos os bancos de dados no meu servidor?

R: A conta de usuário com a qual você está autenticado não possui o privilégio global SHOW DATABASES. O MySQL retorna apenas os bancos de dados para os quais esse usuário possui pelo menos um privilégio. Autentique como root ou conceda o privilégio SHOW DATABASES para ver a lista completa.

P: Qual é a diferença entre SHOW DATABASES e consultar information_schema.SCHEMATA?

R: Ambos retornam a lista de esquemas acessíveis, mas information_schema.SCHEMATA expõe colunas de metadados adicionais — conjunto de caracteres padrão, collation padrão — e suporta filtragem SQL completa com WHERE, ORDER BY e JOIN. Use SHOW DATABASES para verificações interativas rápidas e information_schema.SCHEMATA para consultas com script ou analíticas.

P: Como listo bancos de dados em um servidor MySQL remoto sem abrir uma sessão interativa?

R: Use a flag -e combinada com opções de host e porta:

mysql -u root -p -h remote-host -P 3306 -e "SHOW DATABASES;" --skip-column-names

P: Posso listar bancos de dados MySQL sem saber a senha root?

R: Em um servidor local onde você tem acesso Linux root, sim. O plugin auth_socket do MySQL (ou unix_socket no MariaDB) autentica com base no usuário do SO Linux. Execute sudo mysql e você receberá acesso como o usuário MySQL root sem solicitação de senha.

P: SHOW DATABASES funciona da mesma forma no MariaDB que no MySQL?

R: A sintaxe é idêntica e as regras de escopo de privilégios são as mesmas. A principal diferença prática é que o MariaDB pode não incluir o esquema sys por padrão, e em versões mais recentes do MariaDB o binário de cliente preferido é mariadb em vez de mysql, embora o alias mysql seja normalmente preservado para compatibilidade.

15%

Poupe 15% em todos os serviços

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código:

Skills
Começar a trabalhar