MySQL导入含有触发器的sql脚本报错解决方案

Source

报错码

ERROR 1419 (HY000): You do not have the SUPER Privilege and Binary Logging is Enabled

解决方案

1. Linux下执行sql脚本

我们一般在linux服务器上导入sql数据库文件可以这样做:
1.在sql文件所在目录打开终端(Terminal);
2.使用如下命令登录到sql:

mysql -u campus_sec_deal -p

回车后输入用户密码即可进入到mysql交互页面;
3.在终端中输入:source xxx.sql。比如我的sql文件为campus_linux.sql,则可以在终端中输入:

source campus_linux.sql

2. 可能的报错

4.当sql脚本中不同表之间设置有触发器,你也许会看到如下报错:

ERROR 1419 (HY000): You do not have the SUPER Privilege and Binary Logging is Enabled

报错原因

因为用户所使用的触发器可能会给实际生产环境中的数据库造成危害,比如企业中不同用户对数据库的权限不一样,如果直接调用触发器可能会造成严重的后果;或者该数据库遭受黑客攻击的时候会对数据造成危害。因此MySQL官方限制了非超级管理员对其功能的使用,并且官方也给了更安全的sql脚本编写模式,这里就不展开了。

解决方案

1.对于企业或重要的生产环境的数据库,推荐使用官方提供的建议,链接如下:

https://dev.mysql.com/doc/refman/8.0/en/stored-programs-logging.html

2.如果你只是为了测试用且不想折腾,推荐使用下面的解决方案:

1.使用终端(Terminal)(非sql交互页面)执行如下指令

whereis my.cnf

2.此时终端会查找并显示该文件所在路径,打开该文件,找到[mysqld],并在其下方加入如下的内容

log_bin_trust_function_creators = 1

3.保存即可,然后在终端(非sql交互页面)执行如下命令即可

service mysqld restart

至此,你已经可以成功导入含有触发器的sql脚本文件了。

不推荐的方法

网上还有另一种方式:
1.使用如下命令登录到sql:

mysql -u campus_sec_deal -p

回车后输入用户密码即可进入到mysql交互页面;
2.执行如下命令:

SET GLOBAL log_bin_trust_function_creators = 1;

注意:这种方式可能会抛出如下错误:

ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER privilege(s) for this operation

不推荐此方式,这种方式需要从CLI角度去解决,非常麻烦。


原创不易,一键三连呗~