我正在学习MySQL,并尝试使用LOAD DATA子句。当我使用它时,如下所示:
LOAD DATA INFILE "text.txt" INTO table mytable;
我得到了以下错误:
MySQL服务器正在使用——secure-file-priv选项运行,所以它不能执行这条语句
如何解决这个错误?
我已经检查了关于相同错误信息的另一个问题,但仍然找不到解决方案。
我使用的是MySQL 5.6
我正在学习MySQL,并尝试使用LOAD DATA子句。当我使用它时,如下所示:
LOAD DATA INFILE "text.txt" INTO table mytable;
我得到了以下错误:
MySQL服务器正在使用——secure-file-priv选项运行,所以它不能执行这条语句
如何解决这个错误?
我已经检查了关于相同错误信息的另一个问题,但仍然找不到解决方案。
我使用的是MySQL 5.6
当前回答
我正在Debian上的MySQL5.7.11上工作,为我工作的命令是:
mysql> SELECT @@global.secure_file_priv;
其他回答
我将LOCAL添加到命令中,但它产生了另一个问题:
Loading local data is disabled - this must be enabled on both the client and server sides
为了解决这个问题,我在这里简单地执行了三个步骤
在ubuntu 20.04中: 执行如下命令在系统中找到my.cnf:
commandlocate my.cnf
现在:编辑这个文件
sudo vim /etc/mysql/my.cnf
最后增加如下一行:
[mysqld]
secure-file-priv = ""
现在您可以导入文件,此错误将被删除。 或者你可以使用Mysql工作台文件导入: 链接:https://blog.skyvia.com/how-to-import-csv-file-into-mysql-table-in-4-different-ways/
我在这方面遇到了各种各样的问题。我在修改my。cnf和其他版本试图显示的各种疯狂的东西。
对我有用的是:
我得到的错误
MySQL服务器正在使用——secure-file-priv选项运行,所以它不能执行这条语句
我可以通过打开/usr/local/mysql/support-files/mysql来修复它。服务器,更改如下行:
$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" -- $other_args >/dev/null &
wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?
to
$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" --secure-file-priv="" $other_args >/dev/null &
wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?
关于secure_file_priv的解释如下:
https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_secure_file_priv
下面是LOAD DATA的解释:
https://dev.mysql.com/doc/refman/8.0/en/load-data.html
在我的例子中,使用的是官方Docker镜像中的MySQL,所以我需要弄清楚如何设置secure_file_priv。
为了更好地理解什么是secure_file_priv,我阅读了上面的链接; 并阅读MySQL的DockerHub不得不说,https://hub.docker.com/_/mysql
了解(docker) mysql默认值:
$ docker run -it --rm mysql --verbose --help
Variables (--variable-name=value)
and boolean options {FALSE|TRUE} Value (after reading options)
----------------------------------------- -----------------------------
...
local-infile FALSE
...
secure-file-priv NULL
...
事实上,(在容器内部)配置文件说:
root@a2b1e0c46541:/# cat /etc/mysql/my.cnf
#
# (...license...)
#
# The MySQL Server configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
# Custom config should go here
!includedir /etc/mysql/conf.d/
使用官方图像(如README中解释的那样):
$ docker run --name mysql -e MYSQL_ROOT_PASSWORD=secret -d mysql \
--secure_file_priv=/data
如果你想允许LOCAL INFILE加载,还需要定义选项local_infile=TRUE。
现在你应该能够加载数据INFILE '/ DATA / DATA .csv'到表some_table。
注意:在同样的任务中——一旦“INFILE”的事情被解决(如上)——我在我的CSV数据中有空值的问题,对此的答案(和问题)非常有帮助:https://stackoverflow.com/a/5968530/687896。
我正在Debian上的MySQL5.7.11上工作,为我工作的命令是:
mysql> SELECT @@global.secure_file_priv;