Verificando Assinatura Usando RPM
2.6 Notas espec´ificas para os Sistemas Operacionais
2.6.1 Notas Windows
Esta se¸c˜ao descreve assuntos espec´ificos para usar MySQL no Windows.
2.6.1.1 Conectando em um MySQL Rematamente a Windows Utilizando SSH
Aqui temos notas sobre como conectar a um servidor MySQL atrav´es de uma conex˜ao remota e segura usando o SSH (por David Carlsondcarlson@mplcomm.com:
1. Instale um cliente SSH na sua m´aquina Windows. Como um usu´ario, o melhor op¸c˜ao paga que encontrei ´e oSecureCRT dahttp://www.vandyke.com/. Outra op¸c˜ao ´e o f-securedahttp://www.f-secure.com/. Vocˆe tamb´em pode encontrar algumas vers˜oes livres noGoogleemhttp://directory.google.com/Top/Computers/Security/Products_
and_Tools/Cryptography/SSH/Clients/Windows/.
2. Inicie seu cliente SSH Windows. ConfigureHost_Name = IP_ou_Nome_servidormysql.
Configureuserid=seu_useridpara logar no seu servidor. Este valoruseridn˜ao pode ser o mesmo do nome do usu´ario se sua conta MySQL.
3. Configure a porta de acesso. E tamb´em fa¸ca um acesso remoto (Configure local_
port: 3306,remote_host: ip_ou_nomeservidormysql, remote_port: 3306) ou um acesso local (configure port: 3306,host: localhost,remote port: 3306).
4. Salve tudo, sen˜ao vocˆe ter´a que refazer tudo da pr´oxima vez.
5. Logue ao seu servidor com a sess˜ao SSH que acabou de ser criada.
6. Na sua m´aquina Windows, inicie algumas aplica¸c˜oes ODBC (como o Access).
7. Crie um novo arquivo no Windows e ligue ao MySQL usando o driver ODBC da mesma forma que vocˆe normalmente faz, EXCETO pelo fato de digitar localhost para a m´aquina servidora MySQL — n˜ao nomeservidormysql.
Vocˆe agora deve ter uma conex˜ao ODBC ao MySQL, criptografada com SSH.
2.6.1.2 Distribuindo Dados Entre Diferentes Discos no Win32
A partir do MySQL vers˜ao 3.23.16, omysqld-maxe servidoresmysql-max-ntna distribui¸c˜ao MySQL s˜ao compilados com a op¸c˜ao -DUSE_SYMDIR. Isto permite que vocˆe coloque um di-ret´orio de banco de dados em discos diferentes adicionando um link simb´olico para ele. (Isto
´e parecido com o a com que links simb´olicos funcionam no Unix, embora o procedimento para configurar o link seja diferente).
No Windows, vocˆe cria um link simb´olico para um banco de dados MySQL criando um arquivo que contem o caminho para o diret´orio de destino. Salve o arquivo no diret´orio de dados usando o nome de arquivo ‘nome_bd.sym’, onde nome_bd ´e o nome do banco de dados.
Por exemplo, se o diret´orio de dados do MySQL ´e ‘C:\mysql\data’ e vocˆe precisa ter o banco de dados foo localizado em ‘D:\data\foo’, vocˆe deve criar o arquivo
‘C:\mysql\data\foo.sym’ que contˆem o caminho D:\data\foo\. Depois disto, todas tabelas criadas no banco de dados foo ser˜ao criadas no ‘D:\data\foo’. O diret´orio
‘D:\data\foo’ deve existir para ele funcionar. Note tamb´em que o link simb´olico n˜ao ser´a
usado se um diret´orio com o nome do banco de dados existe no diret´orio de dados MySQL.
Isto significa que se vocˆe j´a tem um diret´orio de banco de dados chamado ‘foo’ no direorio de dados, vocˆe deve movˆe-lo para ‘D:\data’ antes do link simb´olico ser efetivado. (Para evitar problemas, o servidor n˜ao deve estar executando quando vocˆe mover o diret´orio do banco de dados.)
Note que devido a penalidade que vocˆe tem na velocidade quando abre todas as tabelas, n´os n˜ao habilitamos esta op¸c˜ao por padr˜ao, mesmo se vocˆe compilar o MySQL com suporte a isto. Para habilitar links simb´olicos vocˆe deve colocar no seu arquivomy.cnfou my.ini a seguinte entrada:
[mysqld]
symbolic-links
No MySQL 4.0--simbolic-linksest´a habilitado por padr˜ao. Se vocˆe n˜ao precisa us´a-lo vocˆe pode usar a op¸c˜aoskip-symbolic-linkd.
2.6.1.3 Compilando clientes MySQL no Windows
Em seus arquivos fontes, vocˆe deve incluir ‘my_global.h’ antes de ‘mysql.h’:
#include <my_global.h>
#include <mysql.h>
‘my_global.h’ inclui qualquer outro arquivo necess´ario para compatibilidade de Windows (como o ‘windows.h’) se o arquivo ´e compilado no Windows.
Vocˆe tamb´em pode ligar seu c´odigo coma biblioteca dinˆamica ‘libmysq.lib’, que ´e apenas um wrapper para carregar em ‘libmysql.dll’ sobre demanda, ou ligar com a biblioteca est´atica ‘mysqlclient.lib’.
Perceba que como as bibliotecas clientes do MySQL s˜ao compiladas como bibliotecas threaded, vocˆe tamb´em deve compilar seu c´odigo para ser multi-threaded!
2.6.1.4 MySQL para Windows Comparado com o MySQL para Unix
O MySQL para Windows tem provado ser muito est´avel. Esta vers˜ao do MySQL tem os mesmos recursos que sua vers˜ao correspondente Unix com as seguintes exce¸c˜oes:
Win95 e threads
O Win95 perde aproximadamente 200 bytes de mem´oria principal para cada thread criada. Cada conex˜ao no MySQL cria uma nova thread, portanto vocˆe n˜ao deve executar omysqldpor um longo tempo no Win95 se seu servidor lida com v´arias conex˜oes! WinNT e Win98 n˜ao sofrem deste bug.
Leituras simultˆaneas
O MySQL depende das chamadas pread() e pwrite() para estar apto a misturar INSERT e SELECT. Atualmente n´os usamos mutexes para emular pread()/pwrite(). N´os iremos, a longo prazo, trocar o n´ivel da interface de arquivos com uma interface virtual para que n´os possamos usar a interface readfile()/writefile() no NT/2000/XP para obter mais velocidade. A implementa¸c˜ao atual limita o n´umero de arquivos abertos que o MySQL
pode usar para 1024, o que significa que vocˆe n˜ao conseguir´a executar tantas threads simultˆaneas no NT/2000/XP como no Unix.
Leitura de blocos
O MySQL usa uma leitura de blocos para cada conex˜ao, que tem as seguintes implica¸c˜oes:
• Uma conex˜ao n˜ao ir´a ser disconectada automaticamente depois de 8 horas, como acontece com a vers˜ao Unix do MySQL.
• Se uma conex˜ao trava, ´e imposs´ivel a finaliza-la sem matar o MySQL.
• mysqladmin killn˜ao ir´a funcionar em uma conex˜ao adormecida.
• mysqladmin shutdown n˜ao pode abortar enquanto existirem conex˜oes adormecidas.
Planejamos corrigir este problema quando nossos desenvolvedores Windows tiverem conseguido um boa solu¸c˜ao.
DROP DATABASE
Vocˆe n˜ao pode remover um banco de dados que est´a em uso por alguma thread.
Matando o MySQL do gerenciador de tarefas
Vocˆe n˜ao pode matar o MySQL do gerenciador de tarefas ou com o utilit´ario shutdown no Win95. Vocˆe deve deslig´a-lo com mysqladmin shutdown.
Nomes case-insensitivo
Nomes de arquivos n˜ao s˜ao caso sensitivo no Windows, portanto, nomes de bancos de dados e tabelas do MySQL tamb´em n˜ao s˜ao caso sensitivo no Win-dows. A ´unica restri¸c˜ao ´e que os nomes de bancos de dados e tabelas devem usar o mesmo caso em uma senten¸ca fornecida. Veja Se¸c˜ao 6.1.3 [Name case sensitivity], P´agina 473.
O caracter de diret´orio ‘\’
Componentes de nomes de caminho no Win95 s˜ao separados pelo caracter ‘\’ o qual tamb´em ´e o caractere de escape no MySQL. Se vocˆe estiver usando LOAD DATA INFILEouSELECT ... INTO OUTFILE, use nomes de arquivo no estilo Unix com caracteres ‘/’:
mysql> LOAD DATA INFILE "C:/tmp/skr.txt" INTO TABLE skr;
mysql> SELECT * INTO OUTFILE ’C:/tmp/skr.txt’ FROM skr;
Uma alternativa ´e dobrar o caracter ‘/’:
mysql> LOAD DATA INFILE "C:\\tmp\\skr.txt" INTO TABLE skr;
mysql> SELECT * INTO OUTFILE ’C:\\tmp\\skr.txt’ FROM skr;
Problems with pipes.
Pipes n˜ao funcionam com confian¸ca na linha de comando do Windows. Se o pipe incluir o caracter ^Z / CHAR(24), o Windows achar´a que ele encontrou o fim de um arquivo e abortar´a o programa.
Isto ´e um problma principalmente quando se tenta aplicar um log bin´ario como a seguir:
mysqlbinlog binary-log-name | mysql --user=root
Se vocˆe obter um problema aplicando o log e suspeitar que seja devido a um caracter ^Z/CHAR(24)vocˆe pode usar a seguinte alternativa:
mysqlbinlog binary-log-file --result-file=/tmp/bin.sql mysql --user=root --eexecute "source /tmp/bin.sql"
O ´ultimo comando pode tamb´em ser usado para leitura em qualquer arquivo sql que contenha dados bin´arios.
erro: Can’t open named pipe
Se vocˆe utiliza um servidor MySQL vers˜ao 3.22 no NT com o os programas clientes MySQL mais novos, ser´a apresentado o seguinte erro:
error 2017: can’t open named pipe to host: . pipe...
Isto ocorre porque a vers˜ao do MySQL usa named pipes no NT por padr˜ao.
Vocˆe pode evitar este erro usando a op¸c˜ao --host=localhost para os novos clientes MySQL ou criar um arquivo de op¸c˜oes ‘c:\my.cnf’ que contenha a seguinte informa¸c˜ao:
[client]
host = localhost
A partir da vers˜ao 3.23.50, named pipes s˜ao habilitados somente se omysqld-nt ou mysqld-nt-maxfor iniciado com a op¸c˜ao --enable-name-pipe.
ErroAccess denied for user
Se vocˆe tenta executar um programa cliente MySQL para conectar a um servi-dor em execu¸c˜ao na mesma m´aquina, nas obtem o erro Access denied for user: ’some-user@unknown’ to database ’mysql’ quando acessar um servi-dor MySQL na mesma m´aquina, signifca que o MySQL n˜ao pode resolver seu nome de m´aquina corretamente.
Para corrigir isto, vocˆe deve criar um arquivo ‘\Windows\hosts’ com a seguinte informa¸c˜ao:
127.0.0.1 localhost ALTER TABLE
Enquanto vocˆe est´a executando uma instru¸c˜aoALTER TABLE, a tabela est´a blo-queada para ser usado por outras threads. Isto ocorre devido ao fato de que no Windows, vocˆe n˜ao pode deletar um aruivo que est´a em uso por outra threads.
No futuro, podemos encontrar algum modo de contornarmos este problema.
DROP TABLE
DROP TABLE em uma tabela que est´a em uso por uma tabela MERGE n˜ao fun-cionar´a no Windows porque o manipulador do MERGE faz o mapeamento da tabela escondido da camada superior do MySQL. Como o Windows n˜ao per-mite que vocˆe delete arquivos que est˜ao abertos, vocˆe primeiro deve descarregar todas as tabelasMERGE(comFLUSH TABLES) ou apagar a tabelaMERGEantes de deletar a tabela. Corrigiremos isto assim que introduzirmos views.
DATA DIRECTORY eINDEX DIRECTORY
As op¸c˜oes DATA DIRECTORY e INDEX DIRECTORY para CREATE TABLE s˜ao igno-radas no Windows, porque ele n˜ao suporta links simb´olicos.
Aqui est˜ao alguns assuntos em aberto para qualquer um que queira melhorar o MySQL no Windows:
• Adicionar alguns ´icones agrad´aveis para o start e shutdown na instala¸c˜ao do MySQL.
• Seria muito interessante conseguir matar o mysqld do gerenciador de tarefas. Para o momento, deve ser usado o mysqladmin shutdown.
• Portar o readlinepara Windows para uso na ferramenta de linha de comandomysql.
• Vers˜oes GUI dos clientes MySQL padr˜oes (mysql, mysqlshow, mysqladmin e mysqldump) seria ´otimo.
• Seria muito bom se as fun¸c˜oes de leitura e escrita no socket em ‘net.c’ fosse inter-romp´iveis. Isto tornaria poss´ivel matar threads abertas com mysqladmin kill no Windows.
• Adicionar macros para usar os m´etodos mais r´apidos de incremento/decremento de threads seguras fornecidos pelo Windows.