MySQL para Windows Comparado com o MariaDB para Unix
O MariaDB para Windows tem provado ser muito estável. Esta versão do MariaDB tem os mesmos recursos que sua versão correspondente Unix com as seguintes exceções:
- Win95 e threads
O Win95 perde aproximadamente 200 bytes de memória principal para cada thread criada. Cada conexão no MariaDB cria uma nova thread, portanto você não deve executar o
mysqld
por um longo tempo no Win95 se seu servidor lida com várias conexões! WinNT e Win98 não sofrem deste bug. - Leituras simultâneas
O MariaDB depende das chamadas
pread()
epwrite()
para estar apto a misturarINSERT
eSELECT
. Atualmente nós usamos mutexes para emularpread()
/pwrite()
. Nós iremos, a longo prazo, trocar o nível da interface de arquivos com uma interface virtual para que nós possamos usar a interfacereadfile()
/writefile()
no NT/2000/XP para obter mais velocidade. A implementação atual limita o número de arquivos abertos que o MariaDB pode usar para 1024, o que significa que você não conseguirá executar tantas threads simultâneas no NT/2000/XP como no Unix. - Leitura de blocos
O MariaDB usa uma leitura de blocos para cada conexão, que tem as seguintes implicações:
- Uma conexão não irá ser disconectada automaticamente depois de 8 horas, como acontece com a versão Unix do MariaDB.
- Se uma conexão trava, é impossível a finaliza-la sem matar o MariaDB.
mysqladmin kill
não irá funcionar em uma conexão adormecida.mysqladmin shutdown
não pode abortar enquanto existirem conexões adormecidas.
Planejamos corrigir este problema quando nossos desenvolvedores Windows tiverem conseguido um boa solução.
DROP DATABASE
Você não pode remover um banco de dados que está em uso por alguma thread.
- Matando o MariaDB do gerenciador de tarefas
Você não pode matar o MariaDB do gerenciador de tarefas ou com o utilitário shutdown no Win95. Você deve desligá-lo com
mysqladmin shutdown
. - Nomes case-insensitivo
Nomes de arquivos não são caso sensitivo no Windows, portanto, nomes de bancos de dados e tabelas do MariaDB também não são caso sensitivo no Windows. A única restrição é que os nomes de bancos de dados e tabelas devem usar o mesmo caso em uma sentença fornecida. Leia "Caso Sensitivo nos Nomes".
- O caracter de diretório '
\
'
Componentes de nomes de caminho no Win95 são separados pelo caracter '
\
' o qual também é o caractere de escape no MariaDB. Se você estiver usandoLOAD DATA INFILE
ouSELECT ... 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 é 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ão funcionam com confiança na linha de comando do Windows. Se o pipe incluir o caracter
^Z
/CHAR(24)
, o Windows achará que ele encontrou o fim de um arquivo e abortará o programa.Isto é um problma principalmente quando se tenta aplicar um log binário como a seguir:
mysqlbinlog binary-log-name | mysql --user=root
Se você obter um problema aplicando o log e suspeitar que seja devido a um caracter
^Z
/CHAR(24)
você pode usar a seguinte alternativa:mysqlbinlog binary-log-file --result-file=/tmp/bin.sql mysql --user=root --eexecute 'source /tmp/bin.sql'
O último comando pode também ser usado para leitura em qualquer arquivo sql que contenha dados binários.
- erro:
Can't open named pipe
Se você utiliza um servidor MariaDB versão 3.22 no NT com o os programas clientes MariaDB mais novos, será apresentado o seguinte erro:
error 2017: can't open named pipe to host: . pipe...
Isto ocorre porque a versão do MariaDB usa named pipes no NT por padrão. Você pode evitar este erro usando a opção
--host=localhost
para os novos clientes MariaDB ou criar um arquivo de opçõesc:\my.cnf
que contenha a seguinte informação:[client] host = localhost
A partir da versão 3.23.50, named pipes são habilitados somente se o
mysqld-nt
oumysqld-nt-max
for iniciado com a opção--enable-name-pipe
. - Erro
Access denied for user
Se você tenta executar um programa cliente MariaDB para conectar a um servidor em execução na mesma máquina, nas obtem o erro
Access denied for user: 'some-user@unknown' to database 'mysql'
quando acessar um servidor MariaDB na mesma máquina, signifca que o MariaDB não pode resolver seu nome de máquina corretamente.Para corrigir isto, você deve criar um arquivo
\Windows\hosts
com a seguinte informação:127.0.0.1 localhost
ALTER TABLE
Enquanto você está executando uma instrução
ALTER TABLE
, a tabela está bloqueada para ser usado por outras threads. Isto ocorre devido ao fato de que no Windows, você não pode deletar um aruivo que está em uso por outra threads. No futuro, podemos encontrar algum modo de contornarmos este problema.DROP TABLE
DROP TABLE
em uma tabela que está em uso por uma tabelaMERGE
não funcionará no Windows porque o manipulador doMERGE
faz o mapeamento da tabela escondido da camada superior do MariaDB. Como o Windows não permite que você delete arquivos que estão abertos, você primeiro deve descarregar todas as tabelasMERGE
(comFLUSH TABLES
) ou apagar a tabelaMERGE
antes de deletar a tabela. Corrigiremos isto assim que introduzirmos views.DATA DIRECTORY
eINDEX DIRECTORY
As opções
DATA DIRECTORY
eINDEX DIRECTORY
paraCREATE TABLE
são ignoradas no Windows, porque ele não suporta links simbólicos.
Aqui estão alguns assuntos em aberto para qualquer um que queira melhorar o MariaDB no Windows:
- Adicionar alguns ícones agradáveis para o start e shutdown na instalação do MariaDB.
- Seria muito interessante conseguir matar o
mysqld
do gerenciador de tarefas. Para o momento, deve ser usado omysqladmin shutdown
. - Portar o
readline
para Windows para uso na ferramenta de linha de comandoMariaDB
. - Versões GUI dos clientes MariaDB padrões (
MariaDB
,mysqlshow
,mysqladmin
emysqldump
) seria ótimo. - Seria muito bom se as funções de leitura e escrita no socket em
net.c
fosse interrompíveis. Isto tornaria possível matar threads abertas commysqladmin kill
no Windows. - Adicionar macros para usar os métodos mais rápidos de incremento/decremento de threads seguras fornecidos pelo Windows.