Archive for the ‘Banco de dados’ Category.

Erro ao conectar no MySQL a partir do PHP

Instalei o PHP 4 com um MySQL 5 no windows para efetuar alguns testes. Ao criar um script simples para conectar no MySQL foi apresentada a seguinte mensagem:

Client does not support authentication protocol requested by server; consider upgrading MySQL client

Após algumas consultas descobri que é só re-definir a senha do usuário que está acessando o BD, uma vez que o cliente MySQL do PHP utilizado na versão 4 é um pouco antigo. Para isso é só executar o comando:

mysql> SET PASSWORD FOR <a href="mailto:'usuario'@'servidor'">'usuario'@'servidor'</a> = OLD_PASSWORD('novaSenha');

Referência: http://dev.mysql.com/doc/refman/5.0/en/old-client.html


Technorati : ,

Instalação do Oracle 9.2.0.4.0 no Debian 3.1 (Sarge)

Esse pequeno tutorial visa instalar o Oracle com a finalidade de recompilar o php com suporte ao oci8 (AKA Oracle Client). Pode ser utilizado também para efetuar a instalação de um servidor que seja o banco de dados propriamente dito, porém fica por sua conta selecionar os produtos corretos que deverão ser instalados e efetuar as otimizações de kernel necessárias. Este tutorial parte de uma instalação mínima do Debian 3.1 Sarge, contendo apenas os pacotes básicos.

1. Instalar o X-Window básico:
# apt-get install x-window-system

Efetuar a configuração conforme seu hardware.

2. Adicionar usuário e grupo para o Oracle:
# groupadd oinstall
# useradd oracle -g oinstall -s /bin/bash -d /opt/oracle
# passwd oracle
# mkdir /opt/oracle
# chown oracle:oinstall /opt/oracle

3. Instalar os pacotes necessários para efetuar a instalação:
# apt-get install libstdc++2.10-glibc2.2 gcc-2.95 libc-dev x-window-system

4. Linkar bibliotecas e o gcc necessários pelo oracle:
# cd /usr/lib
# ln -s libstdc++-libc6.2-2.so.3 libstdc++-libc6.1-1.so.2
# cd /usr/bin
# ln -sf gcc-2.95 gcc

5. Montar o CD número 1 do oracle:
# mount -oexec /dev/cdrom

6. Logar em outro terminal (Alt+F2) com o usuário oracle

7. Preparar para que o Xwindow inicie um Xterm, e inicia-lo:
$ echo /usr/bin/X11/xterm > .xinitrc
$ startx

8. Iniciar a instalação do oracle:
$ /media/cdrom/runInstaller

Durante a instalação, os produtos que devem ser instalados são:
- SQL Plus
- Oracle Call Interfaces
- Oracle Programmer

9. Após o final da instalação, adicionar as linhas abaixo no arquivo /etc/bash.bashrc:
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=/opt/oracle/OraHome1
export ORACLE_SID=unvp01
export ORACLE_TERM=xterm
export NLS_LANG=PORTUGUESE_BRAZIL.WE8ISO8859P1
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
export LD_LIBRARY_PATH


# Set shell search paths
export PATH=$PATH:$ORACLE_HOME/bin


# CLASSPATH:
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib

10. Por fim, adicionar o diretório de bibliotecas do oracle ao sistema:
# echo '$ORACLE_HOME/lib' >> /etc/ld.so.conf
# ldconfig

Backup de Banco de Dados (PostgreSQL e/ou MySQL)

Em um post passado, disponibilizei um programa feito em Shell Script que permite efetuar o backup do MySQL. Bem, efetuei algumas atualização que havia prometido, e agora já é possivel receber e-mail após a realização do backup e fazer copias também do PostgreSQL.

Características

  • Arquivos individuais para cada bancos de dados: Permite gerar um arquivo compactado (gzip) para cada BD do seu programa de BD (MySQL ou PostgreSQL) ou,
  • Arquivo único para todos os bancos de dados: Gera um único arquivo contendo o backup de todos os bancos de dados do programa de BD (MySQL ou PostgreSQL);
  • Histórico de backup com limite máximo de versões anteriores: Ideal para casos onde é necessário restaurar o estado de um banco de dados de alguns dias atrás e o administrador não dispõe de nenhum software que gerencia o backup (Data Protector, Veritas, Tivoli, etc);
  • Arquivos com nomes únicos: Caso você utiliza algum software responsável pelo gerenciamento do backup, basta não optar pelo histórico e toda vez que for executado o script os arquivos serão sobrescritos;
  • Exclusão de Databases: Permite definir quais bancos de dados não serão copiados (funciona apenas quando for gerado arquivos individuais para cada banco de dados). Permite uma lista de exclusão por programa de BD (MySQL ou PostgreSQL);
  • Backup por programa ou integrado: Permite que seja efetuado backup apenas do MySQL, apenas do PostgreSQL ou de ambos os programas na mesma execução;

Download:
backupBd.sh (Versão 1.1)

TODO

  • Permitir a exclusão de databases mesmo quando optar-se pela geração de um único arquivo de backup;
  • Recuperação de dados (script para restore de databases);
  • Mais alguma coisa ?

Ah, todas as sugestões e críticas são bem vindas!

Backup do Banco de dados MySQL

Escrevi um programa em shell script para facilitar o backup do MySQL e decidi disponibiliza-lo para que outros administradores possam utilizar e coloborar com dicas ou sugestões. Sinceramente desta vez não pesquisei para saber se já existia algo pronto, simplesmente decidi fazer um programa que supra minhas necessidades de backup do MySQL (é, um tipo de backup para cada grupo de servidores :) ). Acredito que da forma que foi elaborado, este programa poderá auxiliar a várias pessoas com diferentes necessidades.

Algumas características:

  • Arquivos individuais para cada bancos de dados: Permite gerar um arquivo compactado (gzip) para cada BD do seu MySQL ou,
  • Arquivo único para todos os bancos de dados: Gera um único arquivo contendo o backup de todos os bancos de dados do MySQL;
  • Histórico de backup com limite máximo de versões anteriores: Ideal para casos onde é necessário restaurar o estado de um banco de dados de alguns dias atrás e o administrador não dispõe de nenhum software que gerencia o backup (Data Protector, Veritas, Tivoli, etc);
  • Arquivos com nomes únicos: Caso você utiliza algum software responsável pelo gerenciamento do backup, basta não optar pelo histórico e toda vez que for executado o script os arquivos serão sobrescritos;
  • Exclusão de Databases: Permite definir quais bancos de dados não serão copiados (funciona apenas quando for gerado arquivos individuaus para cada banco de dados;)

Um exemplo de linha do crontab para efetuar o backup ? 1:00 da manhã:
00 1 * * * /root/scripts/backupMysql.sh

DOWNLOAD:
backupMysql.sh (versão 1.0)

TODO:

  • Adicionar função para envio de e-mails;
  • Permitir a exclusão de databases mesmo quando optar-se pela geração de um único arquivo de backup;
  • Adapta-lo de forma a permitir backup do PostgreSQL;
  • Mais alguma coisa ?

Caso você tenha alguma dúvida, sugestão ou crítica, por favor compartilhe-a comigo utilizando ou o formulário de contato (na página de contatos no início desta página) ou utilizando os comentários abaixo.

Comandos MySQL

Segue alguns comandos úteis para o MySQL:

  • Alterar o valor do Auto Increment em uma tabela:

    mysql> ALTER TABLE <em>tabela</em> AUTO_INCREMENT=1;
  • Apresentar a estrutura de uma tabela:
    mysql> desc <em>tabela</em>;
  • Criar banco de dados e adicionar usuário para acesso:
    mysql> USE mysql;
    mysql> CREATE DATABASE bancodedados;
    mysql> GRANT ALL PRIVILEGES ON bancodedados.* TO usuario IDENTIFIED BY 'senha_do_usuario';
    mysql> FLUSH PRIVILEGES;
    
  • Tirar o privilégio de um usuário:
    mysql> USE mysql;
    mysql> REVOKE ALL PRIVILEGES ON bancodedados.* FROM usuário;
    mysql> FLUSH PRIVILEGES;
  • Remover um usuário:
    mysql> USE mysql;
    mysql> DELETE FROM mysql.user WHERE User='tatu';
    

Maiores informações sobre os comandos GRANT/REVOKE

Alterando a senha do usuário root no MySQL

Algumas vezes já me deparei com a dificuldade de tentar me lembrar qual era mesmo a senha que eu havia definido para o usuário root nos servidores com MySQL… depois de algumas vezes decidi guardar esta dica em algum lugar que me facilitasse recuperar quando necessário, e lá foi ela pra minha incrível base de conhecimentos em arquivo texto indexada pelo grep ;) . Bem, como tudo evolui, a base de conhecimentos em arquivo texto transformou-se neste blog e mais uma dica fará parte dele agora (não que a solução anterior estivesse ruim, mas infelizmente não era pública).

Para alterar a senha do usuário root siga os seguintes passos:

Linux:

  1. Parar o serviço do MySQL (service mysqld stop, /etc/init.d/mysqld stop, matando o processo – conforme sua distribuição);
  2. Reiniciar o mysql com a opção –skip-grant-tables (você poderá utilizá-la ao iniciar o mysqld manuamente ou colocando-a no arquivo de init)
  3. Alterar a senha do usuário root com o comando:
    # mysqladmin -u root password 'nova_senha'
    # mysqladmin flush-privileges
    

    você pode alterar a senha também com o comando:

    # mysql -u root mysql
    mysql> UPDATE user SET Password=PASSWORD('nova_senha') WHERE User='root';
    mysql> FLUSH PRIVILEGES;
    

Windows XP (com o MySQL rodando como serviço):

  1. Entrar nos serviços do windows (Iniciar -> Executar -> services.msc);
  2. Procure pelo MySQL, clique com o botão direito sobre ele e vá em propriedades;
  3. Pare o serviço (clicando sobre o botão parar);
  4. Insira no campo “Parâmetros de inicialização” o parâmetro –skip-grant-tables e clique no botão iniciar e em seguida botão Ok;
  5. Execute o cmd (Iniciar -> Executar -> cmd) , entre no diretório de binários do MySQL (cd c:\arquivos de programas\mysql\bin (ou onde estiver instalado));
  6. Alterar a senha do usuário root com o comando:
    mysqladmin -u root password 'nova_senha'
     mysqladmin flush-privileges
    

    você pode alterar a senha também com o comando:

    mysql -u root mysql
    mysql> UPDATE user SET Password=PASSWORD('nova_senha') WHERE User='root';
    mysql> FLUSH PRIVILEGES;
    

O parâmetro –skip-grant-tables desabilita no servidor o uso do sistema de privilégios. Com isso todos os usuários terão acesso a todos os bancos de dados. Ao executar o comando Flush privileges, o servidor retorna a utilizar seu sistema de privilégios, mantendo a segurança original do serviço.

Agora se você adicionou o parâmetro –skip-grant-tables no arquivo de init, não se esqueca de remové-lo de lá, para evitar que na próxima reinicialização do serviço ele fique vulnerável. Caso seu MySQL esteja no Windows, execute os 4 primeiros passos novamente removendo o parâmetro passado na inicialização.

Update: O Artigo foi adaptado também para apresentar a troca de senhas no ambiente windows conforme sugestão do Carlos Henrique.

Comandos PostgreSQL

Segue alguns comandos úteis para o PostgreSQL:

  • Alterar o proprietário de uma sequência:
    \c [TABELA];
    alter table [SEQUENCIA] owner to [USUARIO];
  • Alterar a senha do usuário postgres:
    \c template1;
    alter user postgres with password 'postgres_password';

Backup do BD PostgreSQL

Uma forma simples de efetuar um backup completo do BD PostgreSQL é gerando um DUMP de todas as tabelas.

Abaixo é descrito como gerar o dump e restaurá-lo novamente:

Gerando um dump completo do Postgresql:
# su - postgres
$ pg_dumpall | gzip all.gz

Restaurando o dump:
# su - postgres
$ cat all.gz | gunzip | psql template1

Instalação do Oracle “Unattended”

A palavra unattended significa desacompanhada, ou seja, uma instalação que não necessita de nenhuma interação do usuário. Esse tipo de instalação é fornecida por várias aplicações (Acrobat Reader, Microsoft Office) e também sistemas operacionais (Windows, e algumas distros linux como RedHat, SuSE e Debian).

Para criar um arquivo contendo as respostas utilizadas em uma instalação, basta iniciar a instalação com os parâmetros:

Linux:
./runInstaller -record -destinationFile /root/oracle_install.rsp

Windows:
setup.exe -record -destinationFile C:\oracle_install.rsp

Siga a instalação normalmente respondendo a todas as questões solicitadas. Ao término você terá no no arquivo oracle_install.rsp todas as respostas salvas da instalação realizada.

Na próxima instalação (automatizada) você poderá iniciar a instalação com o comando:

Linux:
./runInstaller -responseFile /root/oracle_install.rsp

Windows:
setup.exe -responseFile C:\oracle_install.rsp

A instalação iniciará e nenhuma pergunta será feita. Bem vindo ao mundo Unattended!!