mysql para não imprimir seleciona a saída para o terminal

7

Pergunta rápida: Eu criei comandos que irão aquecer meu banco de dados. A coisa é que esses selects são grandes. Quando eu faço esse tipo de seleção, eu pego todo o "jiba-jaba" na minha janela de terminal. Como você pode fazer o mysql fazer o select 'quietly'? sem levar séculos para imprimir toda a porcaria no meu terminal?

    
por Katafalkas 03.02.2012 / 16:24

4 respostas

7

Você pode redirecionar a saída de qualquer comando - não apenas o MySQL - usando os operadores de redirecionamento de i / o do seu shell. Por exemplo, no bash:

$ mysql mydb < commands.sql > /dev/null 2>&1

Isto iniciará o cliente da linha de comando MySQL, conecte-o ao "mydb" no sistema local (assumindo que você tenha acesso), leia os comandos SQL do arquivo commands.sql e descarregue toda a saída para /dev/null .

Se você quisesse salvar a saída para revisão após o fato, poderia redirecioná-la para um arquivo em vez de para /dev/null :

$ mysql mydb < commands.sql > output.txt 2>&1

O 2>&1 redireciona stderr , bem como stdout . Se você quisesse ver algum erro no seu terminal, você só redirecionaria stdout :

$ mysql mydb < commands.sql > /dev/null
    
por 03.02.2012 / 17:20
10
  1. mysql-client:

    mysql> pager > /dev/null
    PAGER set to '> /dev/null'
    mysql> select 1;
    1 row in set (0.00 sec)
    
    mysql> \q
    Bye
    

    Desta forma, o resultado das consultas não é impresso, apenas a linha conta uma informação de tempo.

  2. Redirecionamento de IO no shell

    user@host$ mysql -e 'select 1' > /dev/null
    user@host$
    
por 03.02.2012 / 17:13
1

Se o objetivo é aquecer o cache, você também pode fazer algo como:

selecione max (concat (col1, col2)) da minha tabela onde ...

O mecanismo é forçado a ler as páginas reais para calcular o máximo (com pouca sobrecarga em relação ao I / O)

Observe que, se você selecionar apenas colunas de um índice, apenas o índice será vermelho, não será necessário ir até a própria tabela ("índice de capa").
Em alguns casos, você pode querer exatamente isso (carregar apenas o índice no cache)

    
por 30.09.2014 / 22:48
0

Isso está funcionando em instalações Unix do mysql. Como o Windows não tem o comando / dev / null nem o pager na instalação do mysql, ele não funcionará no mysql instalado no Windows.

No Windows Mysql (no Unix também) você pode usar SELECT 1 INTO OUTFILE 'file_name' ou definir uma variável e usar SELECT 1 INTO @var; Confira a documentação aqui: link

Tenha em mente que você não pode sobrescrever um outfile para que INTO Outfile não funcione para seleções repetitivas.

    
por 22.07.2012 / 10:25