sábado, 18 de julho de 2009

Instalando o MYSQL


    Instalando o MySQL

    O MySQL é um banco de dados extremamente versátil, usado para os mais diversos fins. Você pode acessar o banco de dados a partir de um script em PHP, através de um aplicativo desenvolvido em C ou C++, ou praticamente qualquer outra linguagem (até mesmo através de um Shell Script! :).

    Existem vários livros publicados sobre ele, por isso vou me limitar a falar sobre a instalação e a configuração necessária para utilizá-lo em um servidor LAMP, em conjunto com o Apache e o PHP.

    O primeiro passo é instalar o servidor MySQL propriamente dito:

    # apt-get install mysql-server ou # yum install mysql-server

    Você pode instalar também os pacotes "mysql-client" (o cliente que permite acessar os dados e fazer modificações no banco de dados) e o "mysql-navigator" (uma interface gráfica para ele).

    Antes de iniciar o serviço, rode o comando "mysql_install_db", que cria a base de dados "mysql", usada para armazenar informações sobre todas as outras criadas posteriormente, e uma base chamada "test", que pode ser usada para testar o servidor:

    # mysql_install_db

    O passo seguinte é ativar o servidor:

    # /etc/init.d/mysql start

    No caso do Fedora, o serviço se chama "mysqld", ao invés de simplesmente "mysql", como no Debian:

    # service mysqld start

    O MySQL possui um usuário padrão chamado "root", que, assim como o root do sistema, tem acesso completo a todas as bases de dados e é usado para fazer a configuração inicial do sistema, assim como tarefas de manutenção. Esta conta inicialmente não tem senha, por isso você deve definir uma logo depois de iniciar o serviço, usando o comando "mysqladmin -u root password senha", incluindo a senha desejada diretamente no comando, como em:

    # mysqladmin -u root password 123456

    Se você precisar trocar a senha posteriormente, é necessário acrescentar o parâmetro "-p" antes do "password" e especificar a nova senha, como em:

    # mysqladmin -u root -p password asdfg

    Enter password:

    Note que nesse caso o comando solicita a senha antiga antes de continuar, já que do contrário teríamos uma brecha óbvia de segurança.

    Continuando, depois de definir a senha, o próximo passo é criar uma base de dados. Você pode instalar vários scripts diferentes (um fórum, um chat e um gestor de conteúdo, por exemplo) no mesmo servidor e, inclusive, várias cópias de cada um. Isso é cada vez mais utilizado, tanto dentro de sites que oferecem diversos serviços, quanto em servidores compartilhados, onde os responsáveis por cada site têm a liberdade de instalar os sistemas de sua preferência.

      Existem muitas interfaces de administração para o MySQL, mas a forma mais elementar é usar o prompt de comando. Para acessar o prompt do MySQL, use o comando :

      # mysql -u root -p

      Enter password:

      Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 43 to server version: 4.0.15-log Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>

      Veja que o cabeçalho normal do bash foi substituído por um "mysql>", que lembra onde você está ;). Para sair, pressione "Ctrl+C" ou execute o comando "Bye".

      Dentro do prompt, use o comando "create database" (criar base de dados), seguido pelo nome desejado. Neste exemplo, estou criando uma base de dados para usar na instalação do phpBB, que veremos a seguir. Um detalhe importante é que todos os comandos dados dentro do prompt do MySQL devem terminar com ponto-e-vírgula:

      mysql> CREATE DATABASE phpbb; Query OK, 1 row affected (0.04 sec)

      Para confirmar, use o comando "SHOW DATABASES;", que lista as bases de dados criadas no servidor, como em:

      mysql> SHOW DATABASES;

      +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | phpbb | | test | +--------------------+

      Note que além da base "phpbb" que criamos, existem mais três bases de dados, criadas durante a instalação. As bases "mysql" e "information_schema" são para uso interno do MySQL, incluindo o armazenamento das configurações (sendo um banco de dados, o MySQL usa a sí mesmo para armazenar suas configurações :), enquanto a base "test" é uma DB vazia, que pode ser usada para fins de teste.

      Temos em seguida a questão das permissões de acesso. Nada impede que você sempre utilize a conta "root" do MySQL e inclusive configure os scripts instalados para o utilizarem. Entretanto, isso é extremamente inseguro, principalmente se você pretende instalar vários scripts e aplicativos no mesmo servidor, ou se as bases de dados serão acessadas por vários usuários.

      O ideal é que cada base de dados tenha um usuário próprio e seja acessível apenas por ele. Se você vai instalar o phpBB (fórum) e o Xoops (gerenciador de conteúdo), por exemplo, crie duas bases de dados ("phpbb" e "xoops", por exemplo) e dois usuários separados, cada um com permissão para acessar uma das duas bases.

      Na configuração de cada um, informe a base de dados a ser usada e o usuário e senha correspondente. Isso evita que eventuais problemas de segurança em um coloquem em risco também os dados referentes ao outro.

      Outra situação comum é ao configurar um servidor com vários virtual hosts. Nesse caso, o webmaster de cada site vai precisar de uma ou mais bases de dados e, naturalmente, cada um vai precisar de um login próprio, com acesso apenas às suas próprias bases de dados.

      Para criar um usuário "phpbb", com senha "12345" e dar a ele acesso à base de dados "phpbb" que criamos, use (dentro do prompt do MySQL) o comando:

      mysql> GRANT ALL ON phpbb.* TO phpbb IDENTIFIED BY '12345'; (permita tudo na base phpbb para o usuário phpbb, identificado pela senha 12345)

      Para trocar a senha posteriormente, use o comando:

      mysql> SET PASSWORD FOR phpbb = PASSWORD('123456'); (defina senha para o usuário phpbb, onde a senha é 123456)

      Este mesmo comando pode ser usado para trocar a senha do root, como em:

      mysql> SET PASSWORD FOR root = PASSWORD('asdfgh');

      Se mais tarde você precisar remover as permissões de acesso de um usuário anteriormente criado (em um site com vários webmasters, onde um se desligou da equipe, por exemplo) use o comando:

      mysql> REVOKE ALL ON phpbb.* FROM phpbb; (remova todos os direitos para a base phpbb, para o usuário phpbb)

      Para remover uma base de dados, use o comando "DROP DATABASE", como em:

      mysql> DROP DATABASE phpbb;

      Veja que os comandos usados dentro do prompt do MySQL seguem uma linguagem literal, usando palavras do inglês. Quem tem uma boa familiaridade com a língua tem bem mais facilidade em dominar os comandos.

      Outra observação é que os comandos não são case sensitive. Tanto faz escrever "CREATE DATABASE phpbb;" ou "create database phpbb;". Escrever os comandos em maiúsculas é apenas uma forma de dar mais destaque a eles.

      Depois dessa configuração inicial, você pode experimentar instalar um gerenciador gráfico para facilitar a manutenção do seu servidor MySQL. Uma boa opção neste caso é o phpMyAdmin.

      Para instalá-lo, basta instalar o pacote "phpmyadmin", como em:

      # apt-get install phpmyadmin

      O pacote para instalação em outras distribuições, que não incluam o pacote por padrão, pode ser encontrado no:http://www.phpmyadmin.net/.

      O phpMyAdmim é um script em PHP, que trabalha em conjunto com o Apache. O script de pós-instalação incluído no pacote do Debian faz a configuração inicial para você, perguntando se ele deve ser configurado para trabalhar em conjunto com o Apache (1.3), Apache-ssl (ainda na versão 1.3) ou Apache 2 (a opção correta em nosso caso). O SSL permite que a interface de administração seja acessada via https, onde os dados são transmitidos de forma encriptada, melhorando a segurança. Ao usar o Apache 2, o acesso via SSL fica automaticamente habilitado, desde que você tenha habilitado o SSL no servidor, como vimos há pouco.

      Depois de instalado, acesse o endereço "http://127.0.0.1/phpmyadmin/" ou "https://127.0.0.1/phpmyadmin/" e você cairá na tela de administração do phpMyAdmin, onde você pode logar-se usando qualquer uma das contas registradas no MySQL. Use o root para tarefas administrativas, quando for necessário ter acesso a todas as bases ou fazer backup de tudo, e uma das contas restritas para acessar uma base específica. Por questões de segurança, a configuração padrão permite que ele seja acessado apenas localmente.

      Uma observação importante é que ao ser usado em conjunto com o Apache, instalado no mesmo servidor que ele, o MySQL é acessado apenas localmente, através da interface de loopback. O Apache envia a requisição ao módulo PHP que faz o acesso ao banco de dados, tudo localmente. Nessa configuração o servidor MySQL não deve ficar disponível para a Internet. Configure o firewall para bloquear a porta 3306 usada pelo servidor MySQL, além de todas as outras portas que não forem explicitamente necessárias.

      Caso o servidor MySQL vá ser utilizado por outros servidores (você pode configurar o phpBB e outros scripts para utilizarem um servidor MySQL externo), deixe a porta aberta apenas para os endereços IP dos servidores que forem ter acesso. Como os servidores dedicados sempre utilizam endereços fixos (ao contrário dos servidores domésticos), esta configuração fica mais simples. Para administrar seu servidor MySQL remotamente, o ideal é que se conecte ao servidor via SSH e faça todo o trabalho através dele. Se precisar acessar diretamente alguma ferramenta de configuração, como o Webmin ou o PhPMyAdmin, você pode criar um túnel (novamente usando o SSH) ligando a porta correspondente do servidor a uma porta da sua máquina e fazer o acesso através dela. Veremos em detalhes como usar o SSH e criar túneis encriptados mais adiante.



Nenhum comentário:

Postar um comentário