虽然这个帖子很老了,但在 2018 年这个问题仍然存在。我花了几个小时在这个迷宫中敲打我的头。
服务器版本:在 Ubuntu 14.04 上运行的 5.7.24 MySQL 社区服务器 (GPL)
要允许 MySql 选择 INTO OUTFILE,需要secure-file-priv
在配置中设置 MySQL 的选项。将以下 2 行附加到/etc/mysql/mysql.conf
:
[mysqld]
# allow INTO OUTFILE file and LOAD DATA INFILE to this directory
secure_file_priv=/usr/share/mysql-files
/usr/share/mysql-files
是存储我的文件的目录。我创建它是这样做的:
sudo su
cd /usr/share
mkdir mysql-files
chown mysql:mysql mysql-files
chmod a+rw mysql-files
更改/usr/share/mysql-files
为您喜欢的任何内容,但避免使用该/tmp
目录!
为什么?
因为,下次您将重新启动时,该/tmp
目录将被愉快地删除,包括您宝贵的 mysql-files 子目录。mysql 服务然后阻塞并且它不会启动,从而导致神秘消息出现奇怪的错误。
重启mysql并检查:
sudo su
service mysql restart
mysql
mysql> SHOW VARIABLES LIKE "%secure%";
+--------------------------+-------------------------+
| Variable_name | Value |
+--------------------------+-------------------------+
| require_secure_transport | OFF |
| secure_auth | ON |
| secure_file_priv | /usr/share/mysql-files/ |
+--------------------------+-------------------------+
3 rows in set (0.07 sec)
mysql> quit
Bye
你还没有完成!
有一个名为apparmor
谁会破坏你的项目的巨魔。编辑文件/etc/apparmor/local/usr/sbin/mysqld
并附加以下 2 行——不要忘记结尾的逗号:
/usr/share/mysql-files rw,
/usr/share/mysql-files/** rw,
保存它,然后重新解析:
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld
那应该可以。