MeuMySQL Blog is now at http://blog.mdnsolutions.com/.

Tuesday, September 20, 2011

Instalando distribuição binária do MySQL no CentOS



Ola galera! Ultimamente venho estudando para tentar passar na primeira prova de certificação da Oracle MySQL DBA I e vou contar um coisa: é bem complicado, contudo é muito prazeroso. O primeiro caso se dá pelo fato de eu como desenvolvedor que sempre esteve sob plataforma Windows (desculpe, não tenho orgulho disso) quando cheguei em um nível onde o Linux é fundamental tive algumas dificuldades.

Neste novo ambiente tive que instalar e configurar o MySQL (MySQL Community Server 5.5.16)  no Linux (CentOS Linux release 6.0 Final) e para isso precisei entender melhor como essa plataforma, comandos e recursos funcionam uma vez que diferem bastante do Windows. Enfim, vamos ao que interessa, fazer o nosso servidor rodar.


Escolha da distribuição e instalação do MySQL

Assim como consta no manual podemos fazer a instalação de várias formas, optei por utilizar a distribuição binária Linux - Generic 2.6 (x86, 64-bit), Compressed TAR Archive disponivel no próprio site da MySQL  (link direto para essa distribuição aqui). Bem, uma vez feita o download temos que antes de mais nada criar um usuário e grupo para trabalhar com o servidor MySQL. Logue no seu Linux como root e rode os comandos abaixo. Eles criam um grupo para o MySQL e adicionam um usuário que vai servir apenas para fins administrativos sem direitos de login.

shell> groupadd mysql
shell> useradd -r -g mysql mysql

Alteramos nosso diretório para o local onde instalaremos nosso server. Suponho neste ponto que você também tenha feito o download aqui, então vamos extrair a distribuição e alterar o nome da pasta atual "full-path-to-mysql-VERSION-OS" para algo mais simbolico como "mysql".

shell> cd /usr/local
shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz
shell> ln -s mysql-5.1.59-linux-i686-glibc23 mysql

Vamos agora acessar o novo diretorio criado e dar para ele as permissões do grupo mysql que criamos anteriormente.

shell> cd mysql
shell> chown -R mysql .
shell> chgrp -R mysql .

Feito isso, a instalação pode ser executada. Abaixo o comando faz a criação das pastas iniciais da sua base de dados MySQL. Eles serão criados em /var/lib/mysql, recomendo que você crie esse diretorio antes e dê também as mesmas permissões como feito no passo anterior.

shell> scripts/mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql data

Os próximos comandos são opcionais, mas recomendo que sejam executados também. Neles criamos um my.cnf no diretório etc, atribuimos um usuário para o servidor mysqld_safe e criamos uma copia do mysql.server na pasta de inicialização do Linux. Observer neste ultimo passo que também mudamos o nome do arquivo ao fazer a copia de mysql.server para mysql. Assim o servidor será carregado automaticamente quando o linux iniciado.

shell> cp support-files/my-medium.cnf /etc/my.cnf
shell> bin/mysqld_safe --user=mysql &
shell> cp support-files/mysql.server /etc/init.d/mysql


Configuração e teste do servidor

Uma vez instalado o seu servidor temos que agora alterar alguns parametros no nosso arquivo my.cnf para que o servidor rode corretamente. A propósito essa foi uma pequena dor de cabeça pra mim ao instalar pela primeira vez deste modo já que na documentação oficial o passo a passo solicita você testar antes de checar essas informações. Enfim, abaixo segue aproximadamente como seu my.cnf deve ficar para o servidor rodar, eu usei o vi do Linux para edita-lo.

[mysqld]
datadir=/var/lib/mysql/
socket=/tmp/mysql.sock
port=3306
user=mysql

[mysql.server]
basedir=/usr/local/mysql


Desta forma seu servidor está pronto para rodar. Basta executar o comando abaixo e você receberá a mensagem de sucesso.

shell>> /etc/init.d/mysql start
Starting MySQL.. SUCCESS!

Agora vamos finalmente configurar uma variável de ambiente com o caminho da pasta bin adicionando um PATH no sistema. Crie um arquivo chamado mysql.sh como mostrado abaixo e adicione dentro dele o caminho PATH=${PATH}:/usr/local/mysql/bin (necessário reiniciar para essa alteração funcionar). Feito isso, basta apenas rodar o mysql client no seu shell e pode comecar a trabalhar em sua nova base de dados.

shell>> touch /etc/profile.d/mysql.sh
shell>> mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.1.59 MySQL Community Server (GPL)
mysql>


Bem, basicamente isso galera. Lembrando ainda que temos que implementar ainda a seguranca do nosso banco de dados que você encontra referências em inglês aqui. Espero em breve estar escrevendo sobre isso também visto que é mais um conhecimento também requerido na certificação ORACLE SCMDBA. Obrigado à todos e qualquer dúvida deixe um comentário.

Referências:

Wednesday, September 14, 2011

Bancos Relacionais: 13 regras de Ted Codd


Olá galera, hoje vamos falar sobre uma importante figura na história dos banco de dados relacionais, Ted Codd. Ele realizou avanços na área que norteiam até hoje a estrutura desse modelo. Enjoy!

Os  bancos  de  dados  relacionais  foram  idealizados  por  Edgar  Frank  "Ted"  Codd, um  cientista  de  computação  britânico  que,  enquanto  trabalhava  para  a  IBM,  inventou  o modelo relacional para a gestão de banco de dados, a base teórica para bancos de dados relacionais.

Ele  fez  outras  contribuições  valiosas  para  a  ciência  da  computação,  mas  o modelo  relacional,  uma  teoria  muito  influente  sobre  gestão  de  dados  gerais,  continua sendo seu feito mais citado. Em 1970 ele apareceu com 13 leis (numeradas de 0 a 12) que descreveriam o que é um banco de dados relacional e o que é um Sistema Gerenciador de Banco  de  Dados  Relacionais  faz  e,  várias  leis  de  normalização  que  descrevem  as propriedades  de  dados  relacionais.  Apenas  os  dados  que  haviam  sido  normalizados poderiam ser considerados relacionais.
  1. Regra  Fundamental:  Um  SGBD  relacional  deve  gerenciar  seus  dados usando apenas suas capacidades relacionais. 
  2. Regra  da  informação:  Toda  informação  deve  ser  representada  de  uma única forma, como dados em uma tabela. 
  3. Regra da garantia de acesso: Todo dado (valor atômico) pode ser acessado logicamente  (e  unicamente)  usando  o  nome  da  tabela,  o  valor  da  chave primária da linha e o nome da coluna. 
  4. Tratamento  sistemático  de  valores  nulos:  Os  valores  nulos  (diferente  do zero,  da  string  vazia,  da  string  de  caracteres  em  brancos  e  outros  valores não  nulos)  existem  para  representar  dados  não  existentes  de  forma sistemática e independente do tipo de dado. 
  5. Catálogo dinâmico on-line baseado no modelo  relacional: A descrição do banco de dados é representada no nível lógico como dados comuns (isso é, em  tabelas),  permitindo  que  usuários  autorizados  apliquem  as  mesmas formas de manipular dados aplicados aos dados comuns ao consultá-los. 
  6. Regra  da  sub-linguagem  compreensiva:  Um  sistema  relacional  pode suportar várias linguagens e formas de uso, porém deve possuir ao menos uma  linguagem  com  sintaxe  bem  definida  e  expressa  por  cadeia  de caracteres e com habilidade de apoiar a definição de dados, a definição de visões, a manipulação de dados, as restrições de integridade, a autorização e a fronteira de transações. 
  7. Regra  da  atualização  de  visões:  Toda  visão  que  for  teoricamente atualizável será também atualizável pelo sistema. 
  8. Inserção,  atualização  e  eliminação  de  alto  nível:  A  capacidade  de manipular  a  relação  base  ou  relações  derivadas  como  um  operador  único não  se  aplica  apenas  a  recuperação  de  dados,  mas  também  a  inserção, alteração e eliminação de dados. 
  9. Independência dos dados físicos: Programas de aplicação ou atividades de terminal  permanecem  logicamente  inalteradas  quaisquer  que  sejam  as modificações  na  representação  de  armazenagem  ou  métodos  de  acesso internos. 
  10. Independência  lógica  de  dados:  Programas  de  aplicação  ou  atividades  de terminal  permanecem  logicamente  inalteradas  quaisquer  que  sejam  as mudanças  de  informação  que  permitam  teoricamente  a  não  alteração  das tabelas base. 
  11. Independência  de  integridade:  As  relações  de  integridade  específicas  de um banco de dados relacional devem ser definidas em uma sub-linguagem de dados e armazenadas no catálogo (e não em programas). 
  12. Independência  de  distribuição:  A  linguagem  de  manipulação  de  dados deve  possibilitar  que  as  aplicações  permaneçam  inalteradas  estejam  os dados centralizados ou distribuídos fisicamente. 
  13. Regra da Não-subversão: Se o sistema relacional possui uma linguagem de baixo  nível  (um  registro  por  vez),  não  deve  ser  possível  subverter  ou ignorar as regras de integridade e restrições definidas no alto nível (muitos registros por vez). 

Artigo extraído parcialmente de http://www.scribd.com/doc/50553904/Apostila-de-SQL.