【问题标题】:Mysql error #1305 FUNCTION db.sys_exec does not existsMysql 错误 #1305 FUNCTION db.sys_exec 不存在
【发布时间】:2014-08-17 12:04:08
【问题描述】:

我正在使用 phpmyadmin。我在 mysql 中使用了一个触发器,它在表中插入一些东西后调用一个 php 脚本。 我的触发器包含这个。

DECLARE result INT;
SET result=(select sys_exec('C:/xampp/php/php.exe C:/xampp/htdocs/mysite/hello.php'));

但我在尝试向表中插入内容时遇到此错误。

#1305 FUNCTION db.sys_exec does not exists

(我的数据库名称是 db) 帮我解决这个问题。谢谢。

【问题讨论】:

  • 你创建了这样的函数吗?
  • 我不认为这是一个内置函数,所以错误。

标签: php mysql sql database triggers


【解决方案1】:

sys_exec 不是标准的 mysql 函数。它由外部UDF插件提供,必须单独安装:https://github.com/mysqludf/lib_mysqludf_sys#readme

【讨论】:

【解决方案2】:

在 Linux Ubuntu 系统和少数其他发行版中,mysql 服务器包包含限制 UDF 功能的 apparmor。

停止apparmor

sudo service apparmor stop

检查设备状态

sudo service apparmor status

即使遇到同样的错误,重启mysql服务

重启mysql

sudo service mysql restart

【讨论】:

    【解决方案3】:
    1. Git 克隆已部署 MySQL 的机器上的文件

      git clone https://github.com/mysqludf/lib_mysqludf_sys

    2. 在上述 repo 签出的目录中执行以下命令:

    gcc -DMYSQL_DYNAMIC_PLUGIN -fPIC -Wall -m64 -I/usr/include/mysql -I. -shared lib_mysqludf_sys.c -o lib_mysqludf_sys.so

    1. 将文件 lib_mysqludf_sys.so 复制到 /usr/lib/mysql/plugin/ 位置 /usr/lib/mysql/plugin/ 是通过在 mysql shell 中运行以下命令来验证的位置

      SHOW VARIABLES where variable_name = 'plugin_dir';

    2. 现在终于在我的 sql shell 中创建函数了;

      CREATE FUNCTION sys_exec RETURNS INT SONAME 'lib_mysqludf_sys.so';

    3. 在 mysql shell 中使用以下命令验证函数是否已创建。此命令也应返回包含 sys_exec 的行:

      select * from mysql.func;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-15
      • 1970-01-01
      • 2016-11-28
      • 2022-01-25
      • 2017-03-17
      • 2014-04-20
      • 1970-01-01
      • 2013-11-09
      相关资源
      最近更新 更多