腾讯云mysql load_data local_infile 无法使用

pymysql.err.OperationalError: (1227, 'Access denied; you need (at least one of) the SUPER or SYSTEM_VARIABLES_ADMIN privilege(s) for this operation')

img

UNSUPPORTED COMMAND: LOAD" [180cc370ef50][-1] [122de094-5108-a00b-f948-180cc370ef50

缘由:
原因是MySQL8版本中新增了一个system_user帐户类型,但是由于root用户没有SYSTEM_USER权限,所以出现问题,把权限加入后即可解决

解决办法:
对没有权限的用户授权,如对root授权

GRANT system_user ON . TO 'root';

解决方法

1、从 sqldump 文件中删除该DEFINER=..语句,或将用户值替换为CURRENT_USER.

2、腾讯云的MySQL 服务器不允许DEFINER其他用户使用语法(根据我的经验)。

您可以使用sed脚本将它们从文件中删除:

sed 's/\sDEFINER=`[^`]*`@`[^`]*`//g' -i oldfile.sql

除此之外

解决方案 1

注释掉或删除这些行

SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
SET @@SESSION.SQL_LOG_BIN= 1;
SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ '';

解决方案 2

您还可以通过使用 -f 选项加载转储文件的其余部分来忽略错误。

mysql -f <REPLACE_DB_NAME> -u <REPLACE_DB_USER> -h <DB_HOST_HERE> -p < dumpfile.sql

注:如果您将 mysqldump 管道传输到新数据库,解决方案 2 效果很好


如有问题及时沟通

方法一:打开本地文件:#查看是否开启加载本地文件 show variables like 'local_infile';
#开启全局本地文件设置 set global local_infile=on;
方法二:edit connection -点击advanced -others 输入:OPT_LOCAL_INFILE=1;


设置权限
CREATE DEFINER = root@localhost FUNCTION load_data
CREATE DEFINER = root@localhost FUNCTION local_infile

用户没有SYSTEM_USER权限

grant system_user on *.* to 'root';