Data

8 mai, 2013

Erro na fila do Gearman: mysql_stmt_execute failed: Unknown prepared statement handler (1)

Publicidade

Se você estiver executando o Gearman a partir de uma versão que você mesmo compilou (ou você mesmo empacotou), pode acontecer de ter o seguinte erro. É a mesma mensagem para Ubuntu, Debian, CentOS/RHELL e seus clones.

[  proc ] mysql_stmt_execute failed: Unknown prepared statement handler (1) given to mysqld_stmt_execute -> libgearman-server/plugins/queue/mysql/queue.cc:356
[  proc ] gearman_server_job_add gearman_server_run_command(QUEUE_ERROR) -> libgearman-server/server.cc:284

O mesmo é visível nos logs /var/log/gearmand/gearmand.log, o que faz com que as filas falhem com uma mensagem de erro como esta:

Warning: GearmanClient::doBackground(): _client_run_tasks(GEARMAN_SERVER_ERROR) queue_insert_error:QUEUE_ERROR -> libgearman/client.cc:1522 in /path/to/script.php on line xxx

A solução é relativamente simples: você provavelmente não tem o pacote uuid instalado. O pacote é necessário para gerar IDs únicos que o Gearman irá usar para atribuir para cada trabalho. Sem o pacote, os IDs não podem ser gerados. Se estiver executando um backend persistente do MySQL para o seu Gearman, as inserções irão falhar caso não haja o ID único por conta de violações primárias.

Portanto, instale-o:

$ apt-get install uuid
$ yum install uuid

Dependendo do seu sistema operacional, use o apt ou o yum.

***

Artigo traduzido pela Redação iMasters, com autorização do autor. Publicado originalmente em http://mattiasgeniar.be/2013/02/20/gearman-queue-error-mysql_stmt_execute-failed-unknown-prepared-statement-handler-1/