Mysql: velocidade
3,904 acessos
Fernando Augusto Medeiros Silva
fernando@pcplace.com.br
Florencio Guimarães Mariz Filho
florencio@pcplace.com.br
MySQL é um servidor de banco de dados SQL, que opera em múltiplas plataformas, abrangendo todas as variedades Linux, AIX, FreeBSD, Irix e até Windows 95/98/NT.
Para plataformas Unix e OS/2, o MySQL é gratuito. E para a maioria das aplicações, você só paga pelo MySQL se ele estiver incluído em alguma aplicação.
Entre suas características principais, destacam-se:
- Extremamente rápido e robusto;
- Reconhece vários tipos de dados,incluindo VARCHAR, TEXT, BLOB, DATETIME, TIMESTAMP,SET e ENUM;
- Possui interfaces com C, C++, Java, Perl,PHP, Python e TCL;
- Interface para ODBC e JDBC;
- Sistema de privilégio de acesso robusto e seguro, com controle de acesso por computador do acesso por usuário, e também a banco de dados, tabelas e colunas.
Como limitações, podemos citar a ausência de replicação, controle de transações, integridade referencial, cursores no servidor e stored procedures.
Instalação
A última versão estável do MySQL, recomendada para instalação, é a 3.22.32. O pacote RPM atualizado está em www.mysql.org, e você precisa instalar, no mínimo, os de servidor: web.mysql.com/Downloads/MySQL-3.22/MySQL-3.22.32-1.i386.rpm e cliente: web.mysql.com/Downloads/MySQL-3.22/MySQL-client-3.22.32-1.i386.rpm.
Opcionalmente, podem ser instaladas as bibliotecas de desenvolvimento: web.mysql.com/Downloads/MySQL-3.22/MySQL-devel-3.22.32-1.i386.rpm.
O pacote RPM instalará os bancos de dados em /var/lib/mysql, não admitindo realocação via RPM. Assim, é bom reservar espaço suficiente para os bancos de dados na partição /var.
Configuração
Uma vez instalado, o MySQL está pronto para ser utilizado. A primeira coisa a fazer é alterar a senha do usuário root com o comando:
# mysqladmin -u root password `novasenha'
Ao iniciar, o servidor procura pelo arquivo /etc/my.cnf, contendo parâmetros para inicialização, como número da porta e arquivo de socket. A instalação padrão grava um arquivo /usr/share/mysql/my-example.cnf, que copiado para /etc/my.cnf, pode ser utilizado como base para alterações nos parâmetros iniciais do servidor.
Além das opções gerais, na seção [mysqld] podemos especificar variáveis que afetam o desempenho e/ou o comportamento do MySQL. O arquivo exemplo já contém algumas previamente definidas :
set-variable = key_buffer=16M set-variable = max_allowed_packet=1M set-variable = thread_stack=128K
- Key_buffer: quantidade de memória reservada para buffer de índices. O valor padrão é 8388600, ou 8MB. Um valor mais elevado melhora o manuseio de índices, mas não se deve elevá-lo a ponto de não sobrar memória, afetando o desempenho global.
- max_allowed_packet: Tamanho máximo de um pacote de dados. Normalmente, 1MB, mas deve ser elevado caso se queira utilizar BLOBs de tamanho superior a esse.
- thread_stack: Tamanho da pilha para cada thread. O valor padrão é 64K, suficiente para a maioria das operações. Em caso de falha em operações complexas, aumente esse valor.
Outras variáveis interessantes são:
- flush-time: Caso seja informado um valor não-zero, indica um número de segundos para que todas as tabelas sejam periodicamente fechadas e seus dados gravados no disco.
- long_query_time: Se uma consulta demorar mais que este valor, em segundos, o contador Slow_queries será incrementado. O valor atual deste contador pode ser visto com mysqladmin extended-status.
- max_connections: Número máximo de clientes simultâneos. Normalmente cem, mas você pode aumentar se necessário.
- sort_buffer: Normalmente 2MB, valor que pode ser aumentado para agilizar consultas com as cláusulas Order By e Group By.
- log-update: Permite indicar o nome de um arquivo para registrar todos os comandos que atualizam dados. Útil para replicação de banco de dados e para recuperação.
Para uma lista completa das variáveis, use o comando mysqld -help e para uma lista dos valores em vigor, mysqladmin variables.
Administração
O comando mysqladmin pode ser utilizado para uma variedade de tarefas. As mais úteis são:
- create bancodedados: cria novo banco de dados com o nome especificado.
- drop bancodedados: remove um banco de dados e todas as suas tabelas.
- extended-status: mostra os valores de todas as variáveis atuais do servidor.
- flush-hosts: remove da memória as informações de conexão de todos os computadores. No caso de dez falhas de conexão, um computador tem seu acesso bloqueado até a execução desse comando.
- flush-logs: Reabre todos os arquivos de logs.
- flush-privileges: necessário após alteração nas tabelas de controle de acesso.
- password: troca a senha de um usuário.
- ping: verifica se o servidor está respondendo.
- shutdown: encerra a execução do servidor.
Outro comando bastante útil é o mysqldump, que permite gravar em um arquivo texto todos os comandos SQL necessários para criar uma cópia de um banco de dados inteiro ou de uma ou mais tabelas. Gera o comando Create Table para cada tabela e Insert Into, para cada linha existente na tabela.
Cliente MySQL
Um aliado na utilização do MySql é o cliente mysql, com ele é possível administrar o servidor, criar tabelas, bases de dados, manipular dados no melhor estilo DBA. Para entrar no shell interativo:
#mysql -h host -u user -p Enter password: ******** Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 459 to server version:3.22.20a-log Type `help' for help. mysql>
É possível também executar scripts no banco usando a stdin do cliente:
shell> mysql -h host -u user -p < script Enter password: ******** Criando uma base de exemlo: #mysql -u root -p < criabanco #criabanco - Banco de dados de exemplo #Fernando Augusto & Florencio Guimarães #22/03/2000 create database exemplo;
use exemplo;
create table usuarios( id INT AUTO_INCREMENT NOT NULL, nome VARCHAR(36), telefone VARCHAR(15), endereco VARCHAR(50), nascimento DATE, senha VARCHAR (15), primary key (id) ,');
Inserindo dados:
mysql> insert into usuarios (NULL, `usuario1',`555-5226','Ruas dos Bobos n 0', `1900-01-01 00:00', crypt(`senha') ,'); mysql> insert into usuarios VALUES (NULL,'linux',`222-2222','Esquina das listas', '1991-01-01', encrypt(`saudade'),'); mysql> insert into usuarios VALUES (NULL,`garfield',`342-5689','Alam.das massas 140', '1978-06 19',encrypt(`lazanha'),');
selecionando dados:
mysql> select * from usuarios; 3 rows in set (0.00 sec) mysql>
| id | nome | telefone | endereço | nascimento | senha |
| 1 | usuario1 | 555-5226 | Ruas dos Bobos n 0 | 1900-01-01 | 08TaLh2u7LorM |
| 2 | linux | 222-2222 | Esquina das listas | 1991-01-01 | bBSh3hDv5hCMQ |
| 3 | garfield | 342-5689 | Alam. das massas 140 | 1978-06-19 | QGDyWV/RRMats |
Nota-se o uso da função encrypt. É a mesma da senha do Linux, assim é possível criar bases de dados de usuário com segurança.
Interfaces
PHP – o módulo de interface PHP/Apache com suporte para MySQL pode ser encontrado em ftp.conectiva.com.br/pub/conectiva/dsk/cls42pt/i386/conectiva/RPMS/mod_php3-mysql-3.0.12-1cl.i386.rpm.
A configuração do Apache para funcionamento com PHP3 pode ser um pouco trabalhosa, necessitando de inclusão de diretivas no arquivo httpd.conf. Consulte a documentação do Apache e do PHP3. Uma vez instalado, podemos obter dados de bancos de dados MySQL diretamente em páginas HTML. Um pequeno exemplo poderia ser:
";
mysql_connect(localhost,root,'',');
mysql_select_db(exemplo,');
$dados = mysql_query("SELECT * FROM usuarios",');
if ($linha = mysql_fetch_array($dados)){
do {
print $linha["id"];
print (" ",');
print $linha["nome"];
print (" ",');
print $linha["endereco"];
print (" ",');
print $linha["nascimento"];
print ("
",');
} while ($linha = mysql_fetch_array($dados),');
} else {
print "Nenhum usuario encontrado.";
}
?>
ODBC
O MyODBC é uma implementação de conector ODBC para o MySQL, que permite acessar o banco de dados facilmente através de clientes Windows. Disponível no site web.mysql.com/download_myodbc.html, nas versões Win 95 ou NT, é muito simples de instalar. Após descomprimir o arquivo zip e executar o instalador, Windows com o driver MySQL. A configuração do driver é mais simples ainda: você dá um nome para o DSN, coloca o nome ou endereço do servidor, base de dados, usuário e senha. Depois é só usar.
March 17th, 2008 at 04:15