MAL - Memória Auxiliar do Lutieri

terça-feira, setembro 08, 2009

MySQL Privileges

mysql> grant all privileges on BANCODEDADOS.* to CRIEUMNOMEPARAUMUSUARIO@localhost identified by 'DIGITEUMASENHA';

mysql> flush privileges;

Marcadores:

quarta-feira, setembro 02, 2009

WHERE do MySQL case-insensitive

SELECT * FROM pozycje Where UCASE(poz_nazwa) Like UCASE("%greg%")

which effectively makes string comparisons case insensitive despite the
Binary character set chosen.


http://bytes.com/topic/mysql/answers/592865-case-insensitive-search-mysql

Marcadores:

segunda-feira, março 17, 2008

MySQL Tricks

  • Para converter um banco de dados no formato InnoDB para MyISAM pode ser feito de duas maneiras. Porém apenas a segunda funcionou pra mim.

ALTER TABLE myInnoDB_Table ENGINE=MYISAM


OU

Faz um exportação edita o arquivo do dump e alterar as ocorrências engine=innodb para engine=myisam. Se tudo estiver certo é só importar novamente

outra coisa:

  • Estava recebendo essa mensagem quando tentava executar o mysqldump:

mysqldump: Got error: 1044: Access denied for user ‘root’@'localhost’ to database ‘information_schema’ when using LOCK TABLES

De acordo com minhas investigações parece ser um bug que voltou a assombrar a versão 4.1.20. Solucionei atualizando para 5.x

Links relacionados:
http://sql-planet.com/2007/8/1178/mysqldump-unusual-error.htm
http://www.linuxadmin.org/blog/mysql-information_schema-error-when-using-mysqldump-utility/

outra coisa ainda:

  • Um script, interessantezinho, para fazer backup do MySQL pode ser encontrado aqui. Bem um gerador desse script aqui.

Marcadores:

terça-feira, março 11, 2008

mysqlhotcopy faltando no FreeBSD

Recentemente, após algumas migrações, precisei do script mysqlhotcopy pra "backupear" algumas bases de dados e eis que não encontrei-o na instalação que fiz no FreeBSD.

Por algum motivo qualquer ele não é instalado. Mas para resolver é simples:


You could go back into the ports directory and extract the sources, then go into them and locate the script.
Like:

cd /usr/ports/databases/mysql50-server ;
make extract ;
cd work/mysql-5.0.51a/

it should be in the scripts/ folder.
Copy it to a location of choice.

Then just go back to /usr/ports/databases/mysql50-server and either

make clean (remove what you buildt/extracted)
or
make distclean (remove downloaded sources and the above including related software).


Fonte:
http://www.freebsdforums.org/forums/showthread.php?t=39319

Fui testar e:

/usr/local/sbin/mysqlhotcopy: Command not found.

A primeira linha do arquivo é:

#!@PERL@ -w

Não sei se é pra ser um variável que aponta pro binário do perl ou não... Mas sei que não funcionou. Logo, troquei por:

#!/usr/bin/perl -w

Aí rodou!!! Mas faltou um módulo chamado BDI. Logo apareceu a mensagem:

Can't locate DBI.pm

Fui instalar:

perl -MCPAN -e shell
install DBI

Beleza.
Funcionou novamente! Porém no momento em que ia ser executada a cópia eis que surge o seguinte:

install_driver(mysql) failed: Can't locate DBD/mysql.pm

Óbvio faltava o suporte ao driver mysql.
Fui instalar:

perl -MCPAN -e shell
install DBD::mysql
Porém, como diz a documentação do site do Mysql sobre instalar os módulos perl, no momento da instalação do módulo ele vai tentar conectar ao mysql usando usuário root e senha em branco. Mas como eu já tinha alterado a senha do root pode-se ver várias linhas de acesso negado na tentativa de conexão ao banco. Devemos forçar a instalação de qualquer maneira. Para isso ao invés de install DBD::mysql usa-se force install DBD::mysql.

This is the end!

Marcadores: ,

terça-feira, janeiro 15, 2008

mysql_fetch_array duas vezes

Ben
06-Apr-2004 11:59
One of the most common mistakes that people make with this function, when using it multiple times in one script, is that they forget to use the mysql_data_seek() function to reset the internal data pointer.

When iterating through an array of MySQL results, e.g.

<?
while ($line = mysql_fetch_array($result, MYSQL_ASSOC))
{
foreach (
$line as $col_value)
{
echo
$col_value . ' ';
}
}
?>

the internal data pointer for the array is advanced, incrementally, until there are no more elements left in the array. So, basically, if you copy/pasted the above code into a script TWICE, the second copy would not create any output. The reason is because the data pointer has been advanced to the end of the $line array and returned FALSE upon doing so.

If, for some reason, you wanted to interate through the array a second time, perhaps grabbing a different piece of data from the same result set, you would have to make sure you call

<?
mysql_data_seek
($result, 0);
?
>

This function resets the pointer and you can re-iterate through the $line array, again!


Dica retirada daqui:

Marcadores: , ,

segunda-feira, janeiro 14, 2008

Mysql 5: Bind on unix socket: Permission denied

Tem alguns momentos da vida que eu acho que o cara não consegue raciocinar direito. Se bem que voltei de férias hoje pela manhã depois de quase 30 dias longe dos meus queridos servidores. Tomara que esse seja o motivo pra mim achar a solução, pra essa mensagem de erro do título, depois de uma hora e tanto.

Fui colocar algumas coisas em dia. Isso inclui um server novo que tinha que ter mysql. Pois bem, eis que quando tento iniciar o server mysql tenho isso:

/usr/local/etc/rc.d/mysql-server start ; tail -f /var/db/mysql/host.xyz.com.br.err


080114 10:28:56 mysqld started
080114 10:28:56 InnoDB: Started; log sequence number 0 43655
080114 10:28:56 [ERROR] Can't start server : Bind on unix socket: Permission denied
080114 10:28:56 [ERROR] Do you already have another mysqld server running on socket: /tmp/mysql.sock ?
080114 10:28:56 [ERROR] Aborting

080114 10:28:56 InnoDB: Starting shutdown...
080114 10:28:58 InnoDB: Shutdown completed; log sequence number 0 43655
080114 10:28:58 [Note] /usr/local/libexec/mysqld: Shutdown complete

080114 10:28:58 mysqld ended

Olhando agora é a coisa mais simples do mundo. Mas sei lá porque cargas d'água eu não me dei conta da solução antes e fui pelo caminho mais difícil.

Primeiro recompilei o mysql com a opção --with-debug. Agora quando rodo:


# /usr/local/libexec/mysqld --help


Me retorna:

/usr/local/libexec/mysqld Ver 5.0.51-debug for portbld-freebsd6.2 on amd64 (FreeBSD port: mysql-server-5.0.51)


O que significa que posso rodar o seguinte comando para debugar o servidor mysql:

/usr/local/libexec/mysqld --debug --user=mysql


Que vai criar um arquivo /tmp/mysqld.trace contendo o debug da inicialização do servidor. Se bem que não encontrei nada de muito interessante dentro dele.

Foi aí então que resolvi pensar um pouquinho só antes de seguir fazendo coisas. Pensei cá com os meus botõezinhos: "Parece não ter permissão pra criar o socket. Porém é no diretório /tmp".
Acho que por ser nesse diretório que eu descartei qualquer possibilidade de permissão e segui por outro caminho. Mas como eu já tinha chegado no fim desse caminho e não havia encontrado nada, resolvi voltar ao início.

As permissões do /tmp estavam assim:


drwxr-xr-x 7 root wheel 512 Jan 14 11:12 tmp


Estranho. Mas.. mudei pra ficar assim:

chmod 777 /tmp/

Mais informações sobre debug no Mysql. Aqui.
tcharã!! Pronto. Da próxima vez eu verifico o lógico primeiro.

Marcadores: ,



Chat with Lutieri G. B.

Subscribe in a reader