Como criar scripts a partir do histórico de comandos do MySQL

As queries ou consultas feitas no cliente interativo MySQL, que funcionam bem, podem ser facilmente convertidas em scripts para automatizar suas tarefas ou adiantar o seu trabalho como desenvolvedor — seja qual for a sua linguagem de programação.
Logo MySQL sobre um fundo com um lago e um barco
A solução relatada neste artigo permite reusar as queries, de uma sessão anterior do MySQL, que estão funcionando para você, em um script.

Use um arquivo tee ou o histórico do MySQL

Uma das formas de reusar as queries MySQL, dentro de um script, é buscá-las a partir de um arquivo tee.
No artigo, Como guardar o histórico dos comandos no MySQL em um arquivo externo, eu explico o procedimento em detalhes.
Outra forma, é buscar as queries no arquivo de histórico padrão do MySQL, importar o texto e ir retirando tudo o que não serve ao seu script.
Neste caso, comece por digitar suas queries no cliente MySQL, normalmente — se certificando de que estejam funcionando sintaticamente e entregando os resultados desejados.
Em seguida, saia do MySQL, com o comando quit e liste o arquivo do histórico da sua sessão, da linha de comando:

cat .mysql_history

No Linux, o arquivo do histórico costuma ficar armazenado no seu diretório home.
Experimente combinar o comando cat com o comando grep, para obter resultados mais precisos em relação ao que te interessa:

cat .mysql_history grep -e select

Exemplo de execução do comando cat com o comando grep
Clique, para ver detalhes.

O arquivo do histórico, bem como aquele criado pelo comando tee, pode ser aberto no seu editor de scripts favorito, de onde você pode extrair as queries que deseja e editá-las como bem entender.
captura de tela komodo editor

Como guardar o histórico dos comandos no MySQL

Você pode armazenar o histórico de todos os comandos fornecidos no cliente MySQL, bem como seus resultados, em um arquivo, para uso posterior.
A dica é útil para programadores, que desejem montar scripts em PHP, Perl, Python etc. posteriormente, com o uso das informações obtidas em uma seção de conexão ao servidor do MySQL.
Captura de tela da saída do histórico do MySQL
Ao usar o cliente MySQL, é possível ver o resultado imediato de seus comandos — o que te permite saber o que funciona ou não.
Se você está aprendendo MySQL, pode ser interessante ter uma relação de comandos referentes à sua lição — que pode ser enviado, por email ou qualquer outra forma, para ser analisado por alguém mais experiente e que possa te ajudar com alguma dificuldade.

Execute o MySQL com a opção –tee para gravar seu histórico

O MySQL, por padrão, já grava o histórico dos seus comandos. O que queremos é ter acesso a este histórico, de fora do MySQL — para ter a liberdade de fazer o que quisermos com esta informação.
Para isto, execute o MySQL com a opção --tee, conforme o exemplo abaixo:

mysql -u root -p --tee=MySQL-historico.txt

Destrinchando o comando:

  • mysql -u root -p — rotina tradicional de conexão ao banco de dados.
  • --tee=MySQL-historico.txt — indica ao tee para enviar a saída (log) para o arquivo MySQL-historico.txt. Você pode usar qualquer outro nome que quiser para este artigo.

O log gerado pelo tee descarta uma série de lixo desnecessário, deixando apenas o que interessa gravado no arquivo.

No Unix (e também no Linux), o comando tee lê da entrada padrão e envia para uma saída à sua escolha — que pode ser um arquivo.

Como ligar o logging externo de dentro do MySQL

Se você se esqueceu de desligar o logging em um arquivo externo, é possível fazer isto de dentro do próprio MySQL.
Use os comandos \T e \t para ligar e desligar, respectivamente, o logging em arquivo externo.
No exemplo, abaixo, o logging será feito no arquivo hist.txt:

mysql> \T hist.txt
Logging to file 'hist.txt'
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| tutorial           |
+--------------------+
4 rows in set (0.00 sec)

mysql> \t
Outfile disabled.
mysql> 

Para ver o log, na linha de comando (fora do cliente MySQL), eu posso usar o comando cat:

cat hist.txt 
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| tutorial           |
+--------------------+
4 rows in set (0.00 sec)

mysql> \t

Ou, então, posso abrir o arquivo hist.txt com o meu editor favorito.

Captura de tela do editor mousepad com o log do mysql
Clique, para ampliar.

O MySQL acrescenta os novos logs aos já existentes. Ele não sobrescreve o log anterior.
Você precisa apagar o arquivo anterior ou criar um novo, se não quiser que o próximo log seja acrescentado a alguma preexistente.
A capacidade de criar arquivos tee, foi introduzida no MySQL 3.23.28.