MariaDB
, A Ferramenta de Linha de Comando
O MariaDB
é uma shell SQL simples (com capacidades GNU readline
). Ele suporta usos interativos e não interativos. Quando usado interativamente, os resultados das consultas são apresentadas no formato de tabela ASCII. Quando não usado interativamente (como um filtro por exemplo), o resultado é apresentado em um formato separado por tabulações. (O formato de saída pode ser alterado utilizando opções da linha de comando.) Você pode executar scripts desta forma:
shell> mysql database < script.sql > saida.tab
Se você tiver problemas devido a memória insuficiente no cliente, utilize a opção --quick
! Isto força o MariaDB
a utilizar mysql_use_result()
no lugar de mysql_store_result()
para recuperar o conjunto de resultados.
Utilizar o MariaDB
é muito fáci. Inicie-o como mostrado a seguir: mysql banco_de_dados
ou mysql --user=nome_usuário --password=sua_senha banco_de_dados
. Digite uma instrução SQL, termine-a com ';
', '\g
', ou '\G
' e pressione RETURN/ENTER.
O MariaDB
Suporta as seguintes opções:
-?, --help
Exibe esta ajuda e sai.
-A, --no-auto-rehash
Sem reprocessamento automático. O 'rehash' deve ser usado se o usuário desejar que o cliente
MariaDB
complete as tabelas e campos. Esta opção é usada para acelerar a inicialização do cliente.--prompt=...
Configura o prompt do mysql com o formato especificado.
-b, --no-beep
Deliga o beep nos erros.
-B, --batch
Exibe resultados com o caractere de tabulação como o separador, cada registro em uma nova linha. Não utiliza o arquivo de histórico.
--character-sets-dir=...
Diretório onde os conjuntos de caracteres estão localizados.
-C, --compress
Utiliza compactação no protocolo cliente/servidor.
-#, --debug[=...]
Log de Depuração. O padrão é 'd:t:o,/tmp/mysql.trace'.
-D, --database=...
Qual banco de dados usar. Isto geralmente é util em um arquivo
my.cnf
.--default-character-set=...
Configura o conjunto de caracters padrão.
-e, --execute=...
Executa o comando e sai. (Saída parecida com --batch)
-E, --vertical
Exibe a saída de uma consulta (linhas) verticalmente. Sem esta opção você também pode forçar esta saída terminando suas instruções com
\G
.-f, --force
Continue mesmo se for obtido um erro SQL.
-g, --no-named-commands
Comandos nomeados serão desabilitados. Utilize somente a forma \*, ou use comandos nomeados apenas no começo da linha terminada com um ponto-e-vírgula (;). Desde a versão 10.9, o cliente agora inicia com esta opção habilitada por padrão! Com a opção -g, entretando, comandos de formato longo continuarão funcionando na primeira linha.
-G, --enable-named-commands
Comandos nomeados são habilitados. Comandos de formato longo são aceitos assim como os comandos reduzidos \*.
-i, --ignore-space
Ignore caractere de espaço depois de nomes de funções.
-h, --host=...
Conectar à máquina especificada.
-H, --html
Produz saída HTML.
-X, --xml
Produz saída XML.
-L, --skip-line-numbers
Não escreve o número da linha para os erros. Útil quando se deseja comparar arquivos com resultados que incluem mensagens de erro.
--no-pager
Desabilita paginação e impressão na saída padrão. Veja também a ajuda interativa (\h).
--no-tee
Desabilita arquivo de saída. Veja também a ajuda interativa (\h).
-n, --unbuffered
Descarrega e atualiza o buffer depois de cada pesquisa.
-N, --skip-column-names
Não escrever nomes de colunas nos resultados.
-O, --set-variable nome=opção
Fornece um valor a uma variável.
--help
lista as variáveis. Por favor, note que as sintaxes--set-variable=name=value
e-O name=value
estão obsoletas desde o MariaDB 4.0, use--nome=valor
.-o, --one-database
Atualiza somente o banco de dados padrão. Isto é útil para evitar atualização em outros bancos de dados no log de atualizações.
--pager[=...]
Tipo de saída. O padrão é sua variável de ambiente
PAGER
. Paginadores válidos são: less, more, cat [>nome_arquivo], etc. Veja também a ajuda interativa (\h). Esta opção não funciona no modo batch. A opção pager funciona somente no UNIX.-p[password], --password[=...]
Senha a ser usada ao conectar ao servidor. Se uma senha não é fornecida na linha de comando, lhe será solicitado uma. Perceba que se você utilizar o formato curto
-p
você não pode ter um espaço entre a opção e a senha.-P --port=...
Número da porta TCP/IP para usar na conexão.
--protocol=(TCP | SOCKET | PIPE | MEMORY)
Especifica o protocolo de conexão usado. Novo no MariaDB 4.1.
-q, --quick
Não faz cache do resultado, imprime linha a linha. Isto pode deixar o servidor mais lento se a saída for suspendida. Não usa arquivo de histórico.
-r, --raw
Exibe valores de colunas sem conversão de escapes. Utilizado com
--batch
--reconnect
Se a conexão é perdida, tentar reconectar ao servidor automaticamente (mas apenas uma vez).
-s, --silent
Opção para ser mais silencioso.
-S --socket=...
Arquivo socket para ser utilizado na conexão.
-t --table
Saída no formato de tabela. Isto é padrão no modo não-batch.
-T, --debug-info
Exibe alguma informação de depuração na saída.
--tee=...
Anexa tudo no arquivo de saída. Veja também a ajuda interativa (\h). Não funciona no modo batch.
-u, --user=#
Usuário para login diferente do usuário atual do sistema.
-U, --safe-updates[=#], --i-am-a-dummy[=#]
Permite somente que
UPDATE
eDELETE
utilizem chaves. Veja abaixo para maiores informações sobre esta opção. Você pode zerar esta opção se possui-la no arquivomy.cnf
utilizando--safe-updates=0
.-v, --verbose
Modo verbose (-v -v -v fornece o formato de saída da tabela).
-V, --version
Gera saída com informação de versão e sai.
-w, --wait
Espera e repete em vez de sair se a conexão estiver inacessível.
Você também pode configurar as seguntes variáveis com -O
ou --set-variable
. Por favor, note que as sintaxes --set-variable=nome=valor
e -O name=value
estão obsoletas desde o MariaDB 4.0, use --var=option
:
Nome Variável | Padrão | Descrição |
connect_timeout | 0 | Número de seguntos antes de esgotar o tempo da conexão |
local-infile | 0 | Disabilita (0) ou habilita (1) capacidade LOCAL para LOAD DATA INFILE
|
max_allowed_packet | 16777216 | Tamanho máximo do pacote para enviar/receber do servidor |
net_buffer_length | 16384 | Tamanho do buffer para comunicação TCP/IP e socket |
select_limit | 1000 | Limite automático para SELECT quando utilizar --safe-updtaes
|
max_join_size | 1000000 | Limite automático para registros em uma join quando utilizar --safe-updtaes . |
Se o cliente MariaDB
perder a conexào com o servidor enquanto envia uma consulta, ele tentará se reconectar imediatamente e automaticamente uma vez e enviar a consulta novamente. Note que mesmo se ele obter sucesso na reconexão, como sua primeira conexão foi finalizada, todas seus objetos da sessão anteriores foram perdidos: tabelas temporárias, e variáveis de sessão e de usuário. Desta forma, o comportamento acima pode ser perigoso para você, como neste exemplo onde o servidor foi desligado e reiniciado sem você saber:
mysql>set @a=1;
Query OK, 0 rows affected (0.05 sec) mysql>insert into t values(@a);
ERROR 2006: MariaDB server has gone away No connection. Trying to reconnect... Connection id: 1 Current database: test Query OK, 1 row affected (1.30 sec) mysql>select * from t;
+------+ | a | +------+ | NULL | +------+ 1 row in set (0.05 sec)
A variável de usuário @a
foi perdida com a conexão e depois da reconexão ela é indefinida. Para se proteger deste risco, você pode iniciar o cliente MariaDB
com a opção --disable-reconnect
.
Se você digitar 'help' na linha de comando, MariaDB
irá exibir os comandos que ele suporta:
mysql> help
MySQL commands:
help (\h) Display this text.
? (\h) Synonym for `help'.
clear (\c) Clear command.
connect (\r) Reconnect to the server.
Optional arguments are db and host.
delimiter (\d) Set query delimiter.
edit (\e) Edit command with $EDITOR.
ego (\G) Send command to mysql server,
display result vertically.
exit (\q) Exit mysql. Same as quit.
go (\g) Send command to mysql server.
nopager (\n) Disable pager, print to stdout.
notee (\t) Don't write into outfile.
pager (\P) Set PAGER [to_pager].
Print the query results via PAGER.
print (\p) Print current command.
prompt (\R) Change your mysql prompt.
quit (\q) Quit mysql.
rehash (\#) Rebuild completion hash.
source (\.) Execute an SQL script file.
Takes a file name as an argument.
status (\s) Get status information from the server.
system (\!) Execute a system shell command.
tee (\T) Set outfile [to_outfile].
Append everything into given outfile.
use (\u) Use another database.
Takes database name as argument.
Os comandos edit
, nopager
, pager
, e system
funcionam apenas no Unix.
O comando status
lhe fornece algumas informações sobre a conexão e o servidor que está utilizando. Se você estiver executando no modo --safe-updates
, status
irá também imprimir os valores para as variáveis MariaDB
que afetam suas consultas.
Uma opção útil para iniciantes (introduzido no MariaDB versão 3.23.11) é o --safe-updates
(ou --i-am-a-dummy
para usuários que uma vez possam ter feito um DELETE FROM nome_tabela
mas esqueceram da cláusula WHERE
). Quando utilizar esta opção, o MariaDB
envia o seguinte comando ao servidor MariaDB quando abrir a conexão.
SET SQL_SAFE_UPDATES=1,SQL_SELECT_LIMIT=#select_limit#, SQL_MAX_JOIN_SIZE=#max_join_size#'
onde #select_limit#
e #max_join size#
são variáveis que podem ser configuradas da linha de comando MariaDB
. Leia "Sintaxe de SET
".
O efeito da opção acima é:
- Você não tem permissão de utilizar uma instrução
UPDATE
ouDELETE
se você não possuir uma chave na parteWHERE
. Pode-se, entretanto, forçar umUPDATE/DELETE
utilizandoLIMIT
:
UPDATE nome_tabela SET campo_nao_chave=# WHERE campo_nao_chave=# LIMIT 1;
- Todos resultados maiores são limitados automaticamente a
#select_limit#
linhas. SELECT
's que provavelmente precisarão examinar mais que#max_join_size
combinaçoes de linhas serão abortadas.
Algumas dicas úteis sobre o cliente MariaDB
:
Alguns dados são muito mais legíveis quando exibido verticalmente, em vez da saída do tipo caixa horizontal comum. Por exemplo: Textos longos, que incluem várias linhas, são muito mais fáceis de serem lidos com saída vertical.
mysql> SELECT * FROM mails WHERE LENGTH(txt) < 300 lIMIT 300,1\G
*************************** 1. row ***************************
msg_nro: 3068
date: 2000-03-01 23:29:50
time_zone: +0200
mail_from: Monty
reply: monty@no.spam.com
mail_to: 'Thimble Smith' <tim@no.spam.com>
sbj: UTF-8
txt: >>>>> 'Thimble' == Thimble Smith writes:
Thimble> Hi. I think this is a good idea. Is anyone familiar with UTF-8
Thimble> or Unicode? Otherwise, I'll put this on my TODO list and see what Thimble> happens.
Yes, please do that.
Regards,
Monty
file: inbox-jani-1
hash: 190402944
1 row in set (0.09 sec)
Para o log, você pode utilizar a opção tee
. O tee
pode ser iniciado com a opção --tee=...
, ou pela linha de comando de maneira interativa com o comando tee
. Todos os dados exibidos na tela serão anexados no arquivo fornecido. Isto também pode ser muito útil para propósitos de depuração. O tee
pode ser desabilitado da linha de comando com o comando notee
. Executando tee
novamente o log é reiniciado. Sem um parâmetro o arquivo anterior será usado. Perceba que tee
irá atualizar os resultados dentro do arquivo depois de cada comando, pouco antes da linha de comando reaparecer esperando pelo próximo comando.
Navegar ou pesquisar os resultados no modo interativo em algum programa do UNIX como o less, more ou outro similar, é agora possível com a opção --pager[=...]
. Sem argumento, o cliente MariaDB
irá procurar pela variável de ambiente PAGER
e configurar pager
para este valor. pager
pode ser iniciado a partir da linha de comando interativa com o comando pager
e desabilitado com o comando nopager
. O comando recebe um argumento opcional e e o pager
será configurado com ele. O comando pager
pode ser chamado com um argumento, mas isto requer que a opção --pager
seja usada, ou o pager
será usado com a saída padrão. pager
funciona somente no UNIX, uma vez que é utilizado a função popen()
, que não existe no Windows. No Windows a opção tee
pode ser utilizada, entretanto ela pode não ser cômoda como pager
pode ser em algumas situações.
Algumas dicas sobre pager
:
- Você pode usá-lo para gravar em um arquivo:
mysql>
pager cat > /tmp/log.txt
e os resultados irão somente para um arquivo. Você também pode passar qualquer opções para os programas que você deseja utilizar com
pager
:mysql>
pager less -n -i -S
- Note a opção
-S
exibida acima. Você pode achá-la muito útil quando navegar pelos resultados; experimente com a opção com saída a horizontal (finalize os comandos com\g
, ou;
) e com saída vertical (final dos comandos com\G
). Algumas vezes um resultado com um conjunto muito largo é difícil ser lido na tela, com a opção-S
paraless
, você pode navegar nos resultados com oless
interativo da esquerda para a direita, evitando que linhas maiores que sua tela continuem na próxima linha. Isto pode tornar o conjunto do resultado muito mais legível. você pode alterar o modo entre ligado e desligado com oless
interativo com-S
. Veja o 'h'(help) para mais ajuda sobre oless
.
Você pode combinar maneiras muito complexas para lidar com os resultados, por exemplo, o seguinte enviaria os resultados para dois arquivos em dois diferentes diretórios, em dois discos diferentes montados em /dr1 e /dr2, e ainda exibe o resultado na tela via less:
mysql>
pager cat | tee /dr1/tmp/res.txt | \
tee /dr2/tmp/res2.txt | less -n -i -S
Você também pode combinar as duas funções acima; tenha o tee
habilitado, o pager
configurado para 'less' e você estará apto a navegar nos resultados no less do Unix e ainda ter tudo anexado em um arquivo ao mesmo tempo. A diferença entre UNIX tee
usado com o pager
e o tee
embutido no cliente MariaDB
é que o tee
embutido funciona mesmo se você não tiver o comando UNIX tee
disponível. O tee
embutido também loga tudo que é exibido na tela, e o UNIX tee
usado com pager
não loga completamente. Por último o tee
interativo é mais cômodo para trocar entre os modos on e off, quando você desejar logar alguma coisa em um arquivo, mas deseja estar apto para desligar o recurso quando necessário.
A partir da versão 4.0.2 é possível alterar o prompt no cliente de linha de comando MariaDB
.
Você pode usar as seguintes opções do prompt:
Opção | Descrição |
\v | versão mysqld |
\d | banco de dados em uso |
\h | máquina na qual está conectado |
\p | porta na qual está conectado |
\u | nome do usuário |
\U | nome_usuário@maquina |
\\ | '\ '
|
\n | nova quebra de linha |
\t | tab |
\ | espaço |
\_ | espaço |
\R | hora no formato 24h (0-23) |
\r | hora no formato 12h (1-12) |
\m | minutos |
\y | ano com dois digitos |
\Y | ano com quatro digitos |
\D | formato completo da data |
\s | segundos |
\w | dia da semana no formato com 3 letras (Mon, Tue, ...) |
\P | am/pm |
\o | mês no formato de número |
\O | mês no formato com 3 letras (Jan, Feb, ...) |
\c | contador que cresce a cada comando |
'\
' seguido por qualquer outra letra apenas retorna aquela letra.
Você pode definir o prompt nos seguintes lugares:
- Variável de Ambiente
Você pode configurar o
prompt
em qualquer arquivo de configuração do MariaDB, no grupoMariaDB
. Por exemplo:[mysql] prompt=(\u@\h) [\d]>\_
- Linha de Comando
Você pode definir a opção
--prompt
na linha de comando paraMariaDB
. Por exemplo:shell>
mysql --prompt='(\u@\h) [\d]> '
(usuário@maquina) [banco de dados]> - Interativamente
Você também pode usar o comando
prompt
(ou\R
) para alterar o seu prompt interativamente. Por exemplo:mysql>
prompt (\u@\h) [\d]>\_
PROMPT set to '(\u@\h) [\d]>\_' (usuario@maquina) [banco de dados]> (usuario@maquina) [banco de dados]> prompt Returning to default PROMPT of mysql> mysql>