Arquivo da categoria ‘MYSQL’

Gravar log de consultas e querys no MySQL

Publicado: setembro 26, 2018 em MYSQL

Muitas vezes quando fazendo uma engenharia reversa em um sistema, a primeira tarefa é identificar interacoes entre o codigo fonte do sistema e o banco de dados.
Para isto acessamos o sistema por uma interface, e interagimos adicionando um cadastro, editando ou qualquer outra acao semelhante.
Depois ao ver o codigo fonte feito por outro programador, itenficamos objetos sendo criados, funcoes, ifs, foors, cases, e insertes em 5 tabelas, tudo mais que um programador pode imagina.

Bem, uma maneira de ajudar nesta tarega, é salvando o log do MySQL para armazenar toda interacao enviada a instancia do banco de dados.

EM SGBD execute o seguinte codigo:
1
2

SET global general_log = 1;
SET global log_output = ‘table’;

En seguida realize a interacao no sistema normalmente. Depois basta executar a seguinte query:
1

select * from mysql.general_log

Ou melhor:
1

select argument from mysql.general_log

https://diegosanches.wordpress.com/2015/05/07/gravar-log-de-consultas-e-querys-no-mysql/

Do nada você se depara com o seguinte erro em uma conexão remota no Mysql:

Host ‘xxx.xxx.xxx’ is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts’

Traduzindo:

Host ‘xxx.xxx.xxx’ está bloqueado devido a muitos erros de conexão; desbloquear com ‘mysqladmin flush-hosts’

Fácilmente se entende o erro na parte da mensagem que diz: “bloqueado devido a muitos erros de conexão”

Mas, como desbloquear o acesso ao servidor remoto?

Para desbloquear de forma correta, use os seguintes comandos:

1° Logue-se no seu SSH
[Você precisa fazer login no mesmo servidor onde o Mysql está instalado]

2° Logado no SSH, faça login no Admin do seu Mysql:
#mysql -u root -p

3° após aparecer as setas [–>], digite os seguintes comandos:

Comando 01: (Aumentar o limite de erros de conexões)
#SET GLOBAL max_connect_errors = 100000000;

Comando 02: (Limpando a lista de bloqueios)
#FLUSH HOSTS;

Os comandos acima seriam executados mais ou menos da seguinte forma:

mysql> SET GLOBAL max_connect_errors = 100000000;
mysql> FLUSH HOSTS;
Query OK, 0 rows affected (0.04 sec)
mysql>

Prontinho!
Agora seu Myql vai permitir as con exões remotas novamente.

Fonte: https://www.obacast.com.br/central/index.php/knowledgebase/592/Mysql-A-forma-correta-de-corrigir-o-erro-Host-andsharp039xxxxxxxxxandsharp039-is-blocked-because-of-many-connection-errors-unblock-with-andsharp039mysqladmin-flush-hostsandsharp039.html

Listar Foreign Keys do MYSQL

Publicado: julho 25, 2018 em MYSQL

For a Table:

SELECT
TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME, REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME
FROM
INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
REFERENCED_TABLE_SCHEMA = ” AND
REFERENCED_TABLE_NAME = ”

For a Column:

SELECT
TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME, REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME
FROM
INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
REFERENCED_TABLE_SCHEMA = ” AND
REFERENCED_TABLE_NAME = ” AND
REFERENCED_COLUMN_NAME = ”

Rode o seguinte comando no servidor:

GRANT ALL PRIVILEGES ON *.* TO ‘root’@’nome_computador’ IDENTIFIED BY ‘password’

Trocando nome do computador pelo IP ou nome do computador onde o erro acontece e password pela senha do root.

Fazendo isso você conseguirá acesso ao MYSQL;

Como fazer um LIKE IN() no mysql

Publicado: agosto 9, 2016 em MYSQL

SELECT *
FROM tabela
where campo REGEXP ‘valor1|valor2|valor3’;

 

 

Você pode usar REGEXP com os seguintes marcadores [[:<:]] and [[:>:]] .  Exemplo:

SELECT *
FROM table 
WHERE keywords REGEXP '[[:<:]]teste[[:>:]]'



Rotação de logs binários no MySQL

Publicado: outubro 13, 2015 em MYSQL

Os logs binários do MySQL contém uma espécie de histórico com todas as consultas SQL que são feitas em um servidor. Esses logs servem principalmente para fazer duas coisas: replicar esses dados em um servidor secundário (modelo mestre-escravo) e efetuar backups diferenciais.

Na configuração do MySQL, o log binário é configurado com duas linhas:

log-bin=/var/lib/mysql/mysql-bin.log
server-id=1

A opção log-bin indica qual o padrão de arquivos que o MySQL vai gravar. Nesse exemplo, teremos os seguintes arquivos:

  • mysql-bin.XXXXXX – Onde XXXXXX é um número sequencial, que são os logs binários em si. Vão ser vários arquivos com um tamanho máximo (por padrão, 1GB).
  • mysql-bin.index – Índice com todos os arquivos de log binário atuais.

Muitas vezes acontece da pessoa configurar isso e não tratar esses logs binários. Em um banco de dados com muito movimento, esses logs binários podem crescer assustadoramente e ocupar todo o espaço em disco.

Conheço duas formas de fazer a rotação. A que nunca deve ser feita é simplesmente apagar os arquivos de logs binários do sistema de arquivos. Como o MySQL lida com isso, nada melhor do que tratar essa limpeza com o próprio.

A primeira é utilizando a opção expire_logs_days no my.cnf. Exemplo:

expire_logs_days = 7

Os logs que forem mais velhos do que 7 dias serão excluídos do MySQL automaticamente.

Outra forma de fazer isso é via o próprio MySQL. Conecte-se a um prompt MySQL e execute:

mysql> SHOW BINARY LOGS;
+------------------+------------+
| Log_name         | File_size  |
+------------------+------------+
| mysql-bin.000858 | 1073769033 |
| mysql-bin.000859 | 1073772184 |
| mysql-bin.000860 | 1073769005 |
| mysql-bin.000861 | 1073809148 |
| mysql-bin.000862 | 1073765575 |
| mysql-bin.000863 | 1073797185 |
| mysql-bin.000864 | 1073757152 |
| mysql-bin.000865 | 1073763101 |
| mysql-bin.000866 | 1073771131 |
| mysql-bin.000867 | 1073770555 |
| mysql-bin.000868 | 1073744076 |
| mysql-bin.000869 | 1073818669 |
| mysql-bin.000870 | 1073754790 |
| mysql-bin.000871 | 1073770448 |
| mysql-bin.000872 | 1073755079 |
| mysql-bin.000873 | 1073744861 |
| mysql-bin.000874 | 1073807803 |
| mysql-bin.000875 | 1073777945 |
| mysql-bin.000876 | 1073741999 |
| mysql-bin.000877 |  718403419 |
+------------------+------------+
20 rows in set (0.00 sec)

Com isso, dá pra ver que temos muitos logs binários e quais os seus tamanhos. Então podemos apagar da seguinte forma:

PURGE BINARY LOGS BEFORE '2010-07-04 12:27:59';

Isso apaga os logs binários até a data/hora especificada.

Ou pode-se fazer por nome de arquivo também:

PURGE BINARY LOGS TO 'mysql-bin.000874';

Apaga todos os logs binários anteriores a sequência 000874.

Usar o expire_logs_days é a melhor opção, mas nada lhe impede que você utilize o crontab e o comando PURGE para se certificar que isto está sendo feito 🙂

– See more at: http://www.devin.com.br/rotacao-de-logs-binarios-no-mysql/#sthash.1Jq6lPCL.dpuf

Agendando Scripts no MYSQL

Publicado: agosto 6, 2015 em MYSQL

Quando existir a necessidade de rodar um script fora do horário de serviço você poderá utilizar no MYSQL os Events, que funcionam como JOB’s. Para habilitar tal funcionalidade existem duas formas:

1 – Alterando a variável de eventos:

set global event_scheduler = on

SELECT @@event_scheduler

2 – Alterando o MY.INI colocando a seguinte linha:

event_scheduler=1

 

Para agendar um script para determinado horário use a seguinte sintaxe:

CREATE EVENT EINSERE_TESTE
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
DO
INSERT INTO TESTE VALUES (2,’TESTE2′);

Este exemplo agenda um insert para um minuto depois da hora atual.

Limites de Armazenamento MySQL

Quando você tiver este erro na replicação significa que o MYSQL Slave perdeu o sincronismo com o Master pelo motivo de uma reinicialização forçada, ou falta de espaço em disco do servidor MySQL ou alguma atividade anormal do servidor do MYSQL.

Geralmente o arquivo de log fica corrompido e é gerado um novo no Master com novos comandos. O que se deve fazer é fazer o Slave começar a ler o novo arquivo gerado após o arquivo com erro com o seguinte comando:

stop slave;

change master to MASTER_LOG_FILE=’Nome do Novo Arquivo De Log’, Master_Log_Pos=4;

start slave;

O master log pos = 4 quer dizer que é pra ele começar a ler no inicio do novo arquivo.