关于mysql调用shell脚本不能执行网络命令的问题

接上一篇

整体需求是mysql数据库插入一条数据,触发触发器事件,调用shell脚本,向其他服务器转发插入的数据内容。

关于mysql触发器执行shell脚本的过程,网上有很多很详细,不再赘述。

但我遇到了一个很特别的问题,在网上找了很久,发现似乎没人和我一样遇到同样问题的!!!

在mysql里执行网络命令如curl或者调用shell脚本中执行网络命令curl或者ping,只要是需要通过tcp/ip对外访问的,一律执行失败。

如在mysql中执行select sys_exec("curl http://www.baidu.com"); 

报错:
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    2
Current database: *** NONE ***

ERROR 1054 (42S22): Unknown column 'curl' in 'field list'
这个原因搞了好半天才知道是以为sql语句里 输入类似 / 符合需要加转义符。正确方式是:

select sys_exec("curl http:\/\/www.baidu.com");

不过如果命令在shell脚本中执行不需要转义符。

转义符问题解决了,但是还是继续报错:ERROR 2013 (HY000): Lost connection to MySQL server during query

检查/var/log/mysqld.log 显示:

 /usr/sbin/mysqld: ready for connections.
Version: '5.7.32'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MySQL Community Server (GPL)
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
^M  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0curl: (7) Failed to connect to 61.135.185.32: Permission denied
07:45:18 UTC - mysqld got signal 11 ;

于是我开始怀疑防火墙事,于是我把防火墙关闭

systemctl stop firewalld

依旧报错

于是我尝试着再把selinux关闭

vim /etc/selinux/config
SELINUX=disabled

重启,通了,哈哈。。。

继续把防火墙开启,还是通的,问题找到了,就是selinux作祟。

这里在做一下提醒,调用shell脚本,如果脚本中要有写入文件的命令需要,给要写入的文件分配mysql用户的写入权限,否则会报错。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值