Meetup (MySQL & MongoDB) 11-05-2017

Ola pessoal,

No dia 11-05, participei do meu primeiro evento voltado a MySQL e MongoDB, o qual foi organizado pela Percona em São Paulo.

Além de rever grandes amigos, em 4 horas aprendi horrores com grandes profissionais, como Marcelo Altmann, Airton Lastori, Wagner Bianchi, Adamo e também de conhecer o fundador do canal Bóson Treinamentos, canal que me proporcionou muito conhecimento, Fábio dos Reis.
Continue lendo

Obter logins e senhas no MySQL II

Ola caro amigo leitor,

No post obter logins e senhas no mysql foi disponibilizado um script para gerar um .sql com todos os logins e senhas de um servidor MySQL.

Desta vez, vamos aproveitar a facilidade do Percona Tool Kit e trabalhar com o utilitário pt-show-grants.

Em algumas distribuições, este pacote já esta disponível no repositório. Para checar basta:
Continue lendo

Migração MySQL via Rsync

Caro amigo leitor,

Esta com aquele servidor “respirando por aparelhos”, que em qualquer reboot o risco de complicações é fatal? Talvez este metodo de migração seja o mais eficaz e rápido para salvar as suas bases.

A migração de um servidor MySQL com rsync pode ser feita em qualquer distribuição Linux, seguindo as regras:

– A versão do MySQL no servidor de origem e destino devem ser a mesma;
– A porta 22 deve estar liberada entre os servidores;
– Os parâmetros de configuração de logs e table_spaces devem ser o mesmo na origem e destino (ibdata, iblog);

– O usuário mysql deve estar habilitado para login no sistema

1. Preparando o ambiente

Como o rsync vai ser executado através do usuário mysql, é necessário habilita-lo para login no S.O através do arquivo /etc/passwd:

A. No servidor de origem, você deve gerar uma chave rsa para o servidor de destino, dentro do usuário mysql:

B. Com isso, navegue até o diretório .ssh dentro do usuário mysql, e copie o conteudo gerado do id_rsa.pub:

Seguindo desta forma, teremos este resultado:

ssh8
C. No servidor de destino, repita o mesmo processo do passo (a), para que seja criada a estrutura do diretório .ssh.
Continue lendo

Obter logins e senhas no MySQL

Ola pessoal,

Ao efetuar uma migração no MySQL, no momento do restore podemos nos deparar com erros referentes ao definer setado nos objetos das bases, seja Views, Procedures ou Triggers.

Exemplo do erro:

A cada nova versão, o banco interno do MySQL sofre alterações de estrutura, e não é recomendável restaurar o banco mysql obtido em uma versão 5.1 direto no 5.6 ou 5.7 por exemplo. Neste caso, executo um script no shell para obter a relação dos usuários, já com a senha criptografada junto as permissões. Segue:
Continue lendo

Migrando bases grandes no MySQL

Todo mundo diz que gerenciar o MySQL é fácil, afinal pelo phpmyadmin você consegue fazer quase tudo, inclusive efetuar import/export das bases facilmente, mas não existem Ateus quando você tem que migrar uma base com mais de 4GB por exemplo para outro servidor.

Tenho um amigo que passou por esta situação, precisou migrar uma base MySQL de um Revenda Cpanel para o seu host, porém na origem a base tinha cerca de 4GB, onde o phpmyadmin fazia o backup da base, mas devido as limitações do ambiente, ele não conseguia “varrer” todos os dados.

Os limites no phpmyadmin estão ligados diretamente as variáveis do php no ambiente Web, onde erros como Allowed Memory Size, Out off Memory são comuns neste tipo de ação. Tendo a autonomia, você pode aumentar o valor da variável “memory_limit” no php.ini, ou também existem variáveis do próprio phpmyadmin que aumentam o limite para o restore de uma base por exemplo, porém ambas não resolveram o meu problema.

Já trabalhei com bases muito superiores a 4GB, onde a migração apesar de ser um pouco demorada, sempre foi conclusiva, utilizando o próprio client do MySQL.

Nestes caso, no ambiente Cpanel criei um usuário com o host ‘%’, permitindo o acesso remoto a base, e atribui o all privileges para o usuário na base em que seria feito o backup.
Continue lendo

Criação de usuários no MySQL 5.7

Mencionei no post anterior sobre as opções integradas ao gerenciamento de usuários no MySQL 5.7, e acredite se quiser, esta versão disponibilizou uma opção para um lock nos usuários, sem precisar fazer qualquer outro tipo de manobra para isso.

A sintaxe para criação permanece a mesma, porém a primeira novidade é que com a integração do plugin “validate_password”, você consegue definir uma senha mais segura para cada usuário, respeitando sempre uma politica.

Por padrão, o nível de segurança da senha vem como médio:

Onde:

validate_password_length – Comprimento ou quantidade de caracteres que a senha deve conter;
validate_password_mixed_case_count – Variação entre caracteres em maiúsculo e minusculo;
validate_password_number_count – Quantidade de números que deve conter a senha;
validate_password_policy – O nível de politica da senha, que pode ser como (LOW, MEDIUM and STRONG);
validate_password_special_char_count – Quantidade de caracteres especiais na senha;
Continue lendo

Instalar MySQL 5.7 no Debian

O MySQL 5.7 GA chegou com muitas novidades, promessas de um desempenho muito superior em relação a versão 5.6, e com melhores opções para o gerenciamento de usuários, exemplo:

– Data para expirar a senha;
– Data do ultimo update da senha;
– Opção de habilitar e desabilitar o acesso de um usuário;

Em um teste de benchmark com base em um hardware especifico, o MySQL 5.7 foi tres vezes mais rapido que o MySQL 5.6 em uma alta carga de Query’s:

bench

Dados obtidos na seguinte apresentação: http://pt.slideshare.net/MySQLBR/aumentando-a-segurana-disponibilidade-e-desempenho-com-mysql-enterprise-edition

Não tive problemas até então com o MySQL 5.6, no dia a dia ele sempre apresenta uma estabilidade incrível que atende todos os usuários. Mas claro, sempre quando lançam coisas novas ficamos animados e curiosos, ainda mais quando a novidade apresenta melhoras.
Continue lendo

Replicação MySQL – Introdução

Ola pessoal,

Antes de configurarmos uma replicação no MySQL, é importante entendermos como ela funciona, por isso neste post vamos tratar de uma breve introdução a replicação Master x Slave no MySQL.

O MySQL por default já oferece suporte para Replicação. Funciona por um mecanismo assíncrono, unidirecional com o fornecimento de logs (binários) entre um servidor Master / Slave. Quando um servidor é denominado como Master, este recebe todas as atualizações (insert, alter, update), onde o Slave recebe todas as atualizações que ocorrem com êxito no master, mantendo desta forma os dados íntegros do servidor Master.

O Slave muitas vezes é definido como Ready Only, sendo possível apenas efetuar consultas (select) neste servidor, e demais comandos de alteração devem ser aplicados no servidor Master.

Existem Threads pré definidas no MySQL responsáveis pela comunicação entre os servidores, que são:

IO_THREAD – Responsável pela conexão entre o servidor Master X Slave e pelo download dos logs binarios entre a origem (Master) ao destino (Slave). Ao fazer o download dos logs binarios do servidor Master, o IO_THREAD armazena estes logs no relay log (Slave), arquivo que o Slave vai ler para aplicar as transações.

SQL_THREAD – Esta é a thread que aplica todos os logs obtidos no relay log no servidor Slave.

Resumindo (POR CIMA), o primeiro se conecta e obtem os logs do Master, e o segundo executa os logs obtidos no servidor Slave.

Uma imagem que resume muito bem este cenário:

AR

Imagem obtida no site: http://www.devmedia.com.br/

Não existe um limite definido de quantos slaves um único master pode ter abaixo dele. Como um servidores Slave consome uma quantidade pequena de recursos, este limite é baseado na disponibilidade do ambiente como em quantidade de consultas, escrita, disponibilidade de memória & Cpu entre outros. Se citarmos uma bala de “prata”, não é recomendável ter a mais de 30 slaves sob um master.
Continue lendo

Manutenção em tabelas – MySQL

Ola pessoal,

Manter a integridade dos dados e efetuar uma manutenção das tabelas em sua base de forma períodica, é importante para sempre manter um resultado eficaz em produção.

As tabelas em sua base podem ficar corrompidas devido a uma falha no servidor, principalmente quando ele é reiniciado de forma incorreta. Com isso, você pode perceber lentidões em consultas que geralmente são rapidas, porém podemos ter certeza ao consultar os logs de erro do MySQL.

Segue abaixo a relação de instruções SQL que podemos utilizar no dia a dia:

Analyze table:

Analisa e armazena a distribuição de chave de uma tabela, para uma tomada de decisão referente a junção das tabelas ou na utilização dos indices. Durante esta analise, a tabela ganha um nível de bloqueio para os engines InnoDB e MyISAM.

Esta instrução esta disponível para os Engines: InnoDB e MyISAM.

Ex feito em tabelas MyISAM e InnoDB:

Caso a tabela não tenha sido alterada desde o ultimo analyze, a mesma não será analisada novamente: ‘Table is already up to date’.

Check table:

Verifica a integridade da tabela a fim de identificar algum erro ou inconsistência.

É valida para os Engines: InnoDB, MyISAM, Archive. Caso seja executada em uma tabela MyISAM, as estatisticas dos indices também são atualizadas. Abaixo segue demais opções que podem ser incluidas apenas ao MyISAM:

– Quick: Não verifica os registros buscando as ligações incorretas. Validas para o Engine InnoDB e MyISAM e views.
– Fast: Verifica apenas as tabelas que não foram fechadas de forma correta. Valido apenas para tabelas MyISAM e views, e inválido para o InnoDB.
– Changed: Verifica somente as tabelas que foram alteradas desde a ultima analise ou que não foram fechadas de forma correta. Aplica-se para tabelas MyISAM e views, e inválido ao InnoDB.
– Medium: Efetua uma varredura para verificar se os registros/ligações removidas são válidas. Calcula também uma chave de conferência para os registros com base no check sum calculado para as chaves. Aplica-se para tabelas MyISAM e views, e inválido ao InnoDB.
– Extended: Faz uma consulta completa para todas as chaves de cada registro. Aplica-se para tabelas MyISAM e views, e inválido ao InnoDB.

Segue um exemplo de execução em tabelas MyISAM e InnoDB:
Continue lendo