Mac系统下修改MySQL的secure-file-priv变量无效的问题
问题场景
执行以下SQL语句导入CSV文件时触发报错:
LOAD DATA INFILE '/Users/aubrey/Documents/dbproject/dates_table.csv' INTO TABLE dates FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS;
报错信息:
Error Code: 1290. The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
执行SHOW VARIABLES LIKE "secure_file_priv";返回结果为NULL,已修改my.cnf文件设置该变量为指定目录,重启服务器后Workbench选项文件显示配置已生效,但再次查询该变量仍返回NULL,尝试secure-file-priv和secure_file_priv两种写法均无效果。
运行环境:Ventura 13.1,MySQL 8.0.32 ARM64
排查与解决步骤
确认修改的是正确的配置文件
MySQL在ARM64架构的Ventura系统中,可能加载的配置文件路径并非你当前修改的文件。执行以下命令查看MySQL实际读取的配置文件优先级:mysql --help | grep "Default options" -A 1输出会显示启动时优先读取的配置文件列表,确保你修改的是列表中存在且优先级靠前的文件(如
/etc/my.cnf或/usr/local/mysql/etc/my.cnf)。检查配置项的正确格式
确保配置项写在my.cnf的[mysqld]区块内(该参数为服务器端参数,不属于客户端配置),格式示例:[mysqld] secure-file-priv = /Users/aubrey/Documents/dbproject/同时需保证目标目录存在,且赋予MySQL进程读写权限:
sudo chmod 755 /Users/aubrey/Documents/dbproject/ sudo chown _mysql:_mysql /Users/aubrey/Documents/dbproject/彻底重启MySQL服务
仅通过Workbench重启可能不彻底,使用系统命令强制重启:# 若为brew安装的MySQL brew services restart mysql # 若为官方安装包 sudo /usr/local/mysql/support-files/mysql.server restart重启后再次执行
SHOW VARIABLES LIKE "secure_file_priv";确认变量值是否生效。验证CSV文件权限
确保CSV文件的路径在secure-file-priv指定目录内,且文件权限允许MySQL读取:sudo chmod 644 /Users/aubrey/Documents/dbproject/dates_table.csv sudo chown _mysql:_mysql /Users/aubrey/Documents/dbproject/dates_table.csv备选方案:使用LOCAL关键字
若上述方法仍无效,可尝试在语句中添加LOCAL,让客户端读取文件后发送给服务器(需先开启local_infile参数):SET GLOBAL local_infile = 1; LOAD DATA LOCAL INFILE '/Users/aubrey/Documents/dbproject/dates_table.csv' INTO TABLE dates FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS;注意:使用该方式时,需在Workbench的连接设置中开启"Enable local_infile"选项。
内容的提问来源于stack exchange,提问作者Aubrey

