Menu fechado

MySQL forçar usuário a trocar a senha

Desde a versão 5.6.6 MySQL introduziu o habilidade the forcar usuários a trocar suas senhas. Tu pode fazer isso digitando ALTER USER PASSWORD EXPIRE. ALTER USER ‘marcelo’@’localhost’ PASSWORD EXPIRE; Na próxima vez que marcelo tentar conectar ao MySQL via localhost, o servidor ira bloquear todos os comandos até que o usuario use SET PASSWORD; mysql> \s ERROR 1820 (HY000): You must SET PASSWORD before executing this statement Para alterar a senha, e utilizar o server normalmente, basta digitar: SET PASSWORD = PASSWORD(‘senha’); #Ou utilizando o hash gerado por SELECT PASSWORD(‘senha’); SET PASSWORD = ‘*AD77F56D2FD78299B87609DCC0423260B5AADB03’; Mas tome cuidado, se tu marcar a senha de um usuário como expirada, ele não poderá conectar via clientes com versão anterior a 5.6.10: ERROR 1862 (HY000): Your password has expired. To log in you must . . .

Gostou ? Ajude e Compartilhe!

Por que Replicação Atrasa no MySQL?

Recentemente respondi algumas questões referente a lag(atraso) na replicação, o que percebi é que muita gente não intende corretamente como este processo funciona internamente no MySQL e o porque do lag acontecer: MySQL replication: most important config parameters for performance on slave server? mysql replication delay very serious Veja a figura abaixo, ela representa replicação assíncrona no MySQL, recomendo que você leia meu outro post sobre o assunto: “Como Funciona A Replicação No MySQL?” Como pode ser visto, existe uma grade diferença quanto ao ponto de entrada de dados no master e no slave, enquanto o master possui múltiplas threads inserindo/alterado/deletando dados ao mesmo tempo, no slave, existe somente uma única thread responsável por aplicar todas essas transações no banco de dados. Vamos imaginar que uma transação(UPDATE por exemplo) demorou . . .

Gostou ? Ajude e Compartilhe!

Como Funciona A Replicação No MySQL?

Veja a figura abaixo, ela representa como a replicação assíncrona funciona no MySQL: Levando em consideração a numeração na figura, entenda como o processo funciona: Item numero 1 na figura representa os clientes executando queries no master, note que o master é capaz de processar múltiplas conexões simultaneamente (que pode ser configurado pela variável max_connections).  O Master executa essas queries, e salva elas em forma de log (item numero 2 na figura) para que o(s) slave(s) possa(m) replica-las e assim ter os mesmo dados que o servidor Master. O slave por sua vez, trabalha com 2 threads para replicar os dados do servidor Master: IO_THREAD – responsável por conectar-se ao Master, e buscar as novas transações do binary log (item numero 3 na figura) e gravar-las em seu log(relay log, . . .

Gostou ? Ajude e Compartilhe!

Got a packet bigger than ‘slave_max_allowed_packet’ bytes and binlog_format = STATEMENT | MIXED

Desde a versão 5.1.64, o MySQL introduziu um nova variável chamada slave_max_allowed_packet, que foi introduzida para permitir um volume grande de dados quando inserindo ou atualizando registros utilizando replicação baseada em linha (row-based), fazendo com que a replicação não pare caso tu exceda o valor extipulado na variável max_allowed_packet. O problema é que se tu utiliza a variável binlog_format=STATEMENT ou binlog_format=MIXED, MySQL ignora essa nova opção e continua utilizando max_allowed_packet como limite máximo, mas ele continua a reportar o problema em slave_max_allowed_packet (que por default vem configurada a 1Gb), o que causa a IO_THREAD fornecer a mensagem de erro errada. Solução: Rode a seguinte query no master: master> SHOW VARIABLES LIKE 'binlog_format'; Se tu receber como retorno STATEMENT ou MIXED, tu precisa ajustar o valor da variável max_allowed_packet, uma boa . . .

Gostou ? Ajude e Compartilhe!

MySQL 5.6 replicação com GTID – Global Transaction ID

Fala galera, No inicio deste mês, a Oracle lançou a nova versão do MySQL, a versão 5.6, uma das melhorias foi a introdução do GTID (ID de transação Global). GTID é um identificador único que sera adicionado a cada transação executada no servidor, e vai ter grande utilidade para o slave, garantindo que mais de uma thread nao execute a mesma transação e também auxiliar quanto a posição que o slave busca e executa dados do master (previamente tínhamos que setar MASTER_LOG_FILE e MASTER_LOG_POS quando iniciavamos o slave). Vamos intender algumas novas configuracoes que teremos que adicionar no nosso arquivo de configuracao: gtid-mode : vai habilitar GTID, temos que habilitar log-bin e log-slave-updates para esta opcao funcionar enforce-gtid-consistency : vai garantir que somente comandos que podem ser replicados sejam executados . . .

Gostou ? Ajude e Compartilhe!

Snapshot – backup consistente no MySQL

Hoje vamos falar de como realizar um backup (snapshot) consistente do nosso banco de dados. Primeiramente, em qual situações podemos utilizar o snapshot? 1. Digamos que seu servidor de produção vai ser partir de hoje replicado em um slave, como você faz essa carga inicial de dados no slave? qual era a posição do bin log quando o backup iniciou, durante o período de backup, sera que alguém enviou alguma query para o banco? e se o bin log esta numa posição diferente da de quando o backup iniciou? 2. Caso você queira implementar uma estrategia de backup incremental, você pode fazer uma copia integra da base uma vez na semana, e caso necessite restaurar a base, aplicar os bin logs a partir da copia. Dito isso, vamos ao que . . .

Gostou ? Ajude e Compartilhe!

Replicação em MySQL com SSL

Hoje vamos dar continuidade a replicação, você pode ler o primeiro post sobre este tema aqui Primeiramente vamos criar os certificados SSL: Certificado CA: openssl genrsa 2048 > ca-key.pem openssl req -new -x509 -nodes -days 1000 -key ca-key.pem > ca-cert.pem Certificado do servidor openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server-key.pem > server-req.pem openssl x509 -req -in server-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem Certificado do Cliente openssl req -newkey rsa:2048 -days 1000 -nodes -keyout client-key.pem > client-req.pem openssl x509 -req -in client-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem copy ca-cert.pem, client-req.pem, client-cert.pem to slave server Vamos ajustar o arquivo de configuração do MySQL: ssl ssl-ca=/etc/mysql/sslcerts/ca-cert.pem ssl-cert=/etc/mysql/sslcerts/server-cert.pem ssl-key=/etc/mysql/sslcerts/server-key.pem Não esqueça de reiniciar o serviço do MySQL, vamos verificar se esta tudo . . .

Gostou ? Ajude e Compartilhe!

Como renomear tabelas no MySQL

Para renomear uma tabela no MySQL você só precisa rodar um comando chamado RENAME TABLE, a sintaxe é bastante simples: RENAME TABLE tb1 TO tb2; O comando RENAME TABLE vai renomear a tabela atomicamente, o que significa que a tabela ficara travada durante o comando. Você também pode renomear varias tabelas em um único comando: RENAME TABLE tb1 TO tb2, tb3 TO tb4; Para renomear uma tabela, você vai precisar dos privilégios ALTER e DROP na tabela antiga e CREATE e INSERT na tabela nova. Você só precisa ter cuidado caso você utilize TRIGGERS, no exemplo abaixo, depois de inserir um registro na tabela Cities eu conto +1 no NOfCities na tabela Countries, o que acontece se eu renomear a tabela Contries? mysql> SHOW TRIGGERS\G *************************** 1. row *************************** Trigger: . . .

Gostou ? Ajude e Compartilhe!

Usando MySQL IN AND OR

MySQL IN??? MySQL OR??? MySQL AND??? Quando eu uso um e quando eu uso outro? Vamos usar a tabela City para este tutorial: +————-+———-+——+—–+———+—————-+ | Field | Type | Null | Key | Default | Extra | +————-+———-+——+—–+———+—————-+ | ID | int(11) | NO | PRI | NULL | auto_increment | | Name | char(35) | NO | | | | | CountryCode | char(3) | NO | MUL | | | | District | char(20) | NO | | | | | Population | int(11) | NO | | 0 | | +————-+———-+——+—–+———+—————-+ Vamos ver umas regras simples para uso: AND – agente usa AND pra adicionar uma condição que precisa ser verdadeira: SELECT * FROM City WHERE CountryCode = 'BRA' AND Population > 1000000 AND District LIKE 'São . . .

Gostou ? Ajude e Compartilhe!