Wordpress

wp db query: rodar SQL no WordPress pelo WP-CLI sem phpMyAdmin

O cliente pede um número na hora, tipo quantos pedidos ficaram em processando no mês, e o servidor não tem phpMyAdmin nem Adminer. Com SSH e a pasta do WordPress já dá: o WP-CLI conversa com o banco usando as credenciais do wp-config.php, sem você digitar senha.

O SELECT sai direto do terminal

Entre na raiz da instalação e mande o SQL entre aspas. Confira o prefixo antes, porque nem toda instalação usa wp_. O --skip-column-names vai direto pro cliente mysql e tira o cabeçalho, útil quando a saída alimenta um script:

cd /var/www/seusite/html

sudo -u www-data wp db prefix

sudo -u www-data wp db query "SELECT post_status, COUNT(*) FROM wp_posts GROUP BY post_status;"

sudo -u www-data wp db query "SELECT option_name FROM wp_options WHERE autoload IN ('yes','on','auto-on','auto') ORDER BY LENGTH(option_value) DESC LIMIT 10;" --skip-column-names

sudo -u www-data wp db query < relatorio.sql

Repare no IN da segunda consulta: até a 6.5 bastava autoload = 'yes', mas da 6.6 em diante o core grava também on, auto-on e auto na mesma coluna, e o filtro antigo esconde boa parte das opções do relatório.

Meça o tamanho antes de exportar

Antes de puxar um dump de 4 GB pela rede, veja quem está ocupando espaço e corte as tabelas de log na exportação:

sudo -u www-data wp db size --tables --human-readable

sudo -u www-data wp db export dump-seusite.sql --exclude_tables=wp_actionscheduler_logs,wp_statistics_visitor

O wp db query não é um cliente SQL próprio: ele lê DB_NAME, DB_USER, DB_PASSWORD e DB_HOST do wp-config.php e entrega a query pro binário de mysql ou mariadb que estiver no PATH. Daí a sintaxe do MySQL 8 valer inteira, e daí também o comando quebrar dizendo que não achou o executável quando o banco mora em outro host e ninguém instalou o cliente na máquina do site.

A regra que eu sigo em banco de produção: todo UPDATE nasce como SELECT com o mesmo WHERE, e todo DELETE nasce depois de um wp db export. O db query não tem dry-run nem pedido de confirmação, ele executa na hora.

Post Recentes

array_map perde as chaves do array no PHP: como manter o índice

O retorno do array_map voltou com índice 0, 1, 2 e o código que dependia da chave quebrou. Entenda quando…

10 horas atrás

Backup do Magento 2 com mysqldump: dump leve sem as tabelas de log

Dump de 12 GB que demora horas porque arrasta report_event e cron_schedule. Faça o backup em duas passadas, guarde só…

16 horas atrás

Preference do di.xml não aplica no Magento 2: o que checar antes

Escreveu a preference e o Magento 2 continua usando a classe original? Confira a área do di.xml, o generated/code e…

2 dias atrás

Filtro por atributo do WooCommerce vazio: global x personalizado

Cadastrou Cor direto na aba Atributos do produto e o filtro por atributo vem vazio. Veja como identificar o tipo,…

2 dias atrás

Permalinks dando 404 em todos os posts do WordPress: como corrigir

A home abre e todo post interno devolve 404 depois da migração. Regrave as regras de reescrita pelo WP-CLI e…

4 dias atrás

UI component listing do Magento 2: grid do admin abre vazia

A grid do seu módulo monta o cabeçalho e não traz linha nenhuma. Registre a collection do UI component listing…

4 dias atrás