Невозможно использовать функцию MySQL UDF - PullRequest
6 голосов
/ 01 июня 2011

Я загрузил функцию UDF в MySQL (без выбора какой-либо конкретной БД).Раньше он хорошо работал во время моей сессии, но теперь я получаю сообщение об ошибке «ОШИБКА 1305 (42000): ФУНКЦИЯ currentdatabase.myfunction не существует», когда я пытаюсь использовать функцию со следующим оператором sql:

select myfunction('aaa');

Затем я попытался удалить функцию и получил тот же код ошибки:

mysql> drop function myfunction;
ERROR 1305 (42000): FUNCTION database.myfunction does not exist

, если выбрана БД.

В противном случае другой код ошибки:

ERROR 1046 (3D000): No database selected

Поэтому я решил снова указать функцию и получил следующий код ошибки:

CREATE FUNCTION myfunction RETURNS INT SONAME 'myfunction.so';
ERROR 1125 (HY000): Function 'myfunction' already exists

Мой вопрос: как снова использовать мою функцию?

Заранее спасибо.

Примечание: нет проблем с пространством, таких как ("select myfunction ('aaa');"), как сообщалось на нескольких других сайтах.

Ответы [ 3 ]

6 голосов
/ 31 января 2012

Я недавно столкнулся с этой проблемой самостоятельно, и я написал короткую запись в блоге об этом:

Когда установка UDF недавно Я получил раздражающее сообщение об ошибке, которое неКажется, не хочу уходить.Удаление функции перед попыткой ее удаления не сработало, поэтому я использовал следующий набор эскалационных команд, чтобы попытаться установить ее.

Но вернемся к ошибке на мгновение:

bash > mysql -u user -p < installdb.sql
Enter password:
ERROR 1125 (HY000) at line 7: Function 'lib_mysqludf_ssdeep_info' already exists
Это можно решитьна самом деле просто со следующими параметрами:
  1. Попытка удалить функцию и затем переустановить ее
  2. Удалить строку функции из таблицы mysql.func, а затем переустановить ее
  3. Остановите сервер MySQL (после попытки выбора варианта 2), запустите его снова, а затем переустановите его

Из моего тестирования вам не нужно создавать резервные копии ваших двоичных файлов базы данных, как предлагает @jmcejuelaв своем ответе.

Источник: http://simonholywell.com/post/2012/01/mysql-udf-install-error-function-already-exists.html

1 голос
/ 10 ноября 2011

Я полагаю, что проблема заключается в удалении библиотеки .so перед удалением функции / с. Сервер по-прежнему считает, что у него есть функции, так как они появляются в SELECT * FROM mysql.func, но, конечно, вызов этих функций не удался. Каким-то образом DROP не просто удаляет записи в этой таблице, но также проверяет, найдены ли библиотеки, что приводит к сбою. CREATE предположительно, просто сначала проверьте таблицу func, которая приводит к сбою ...

Решение состоит в том, чтобы восстановить таблицу func (файлы func.MYI, func.MYD, func.frm в data / mysql вашего mysql) до точки, в которой все совпадает.

К счастью, у меня была резервная копия этих файлов. В противном случае вам придется сделать их резервную копию из новой установки mysql (вы можете просто установить локально новый сервер, чтобы не удалить текущий)

Итог: не удаляйте библиотеки .so перед удалением функций.

0 голосов
/ 20 мая 2013

Есть некоторые из этих ошибок при замене (не отбрасывании) библиотеки .so перед сбросом функций.

Перезапуск сервера исключил сообщения об ошибках, независимо от того, были ли функции успешно отброшены или нет. Mysqld только что посмотрел таблицу mysql.func и загрузил функции из (нового) .so. Я знаю, что перезапуск сервера не всегда возможен, но если это так, он быстрый и полный.

...