我正在尝试使用我的脚本中的以下代码将MySQL脚本的结果写入文本文件.
SELECT p.title, p.content, c.name FROM post p LEFT JOIN category c ON p.category_id=c.id INTO OUTFILE 'D:\MySql\mysqlTest.txt';
但是,我得到以下内容
错误1290(HY000):MySQL服务器正在运行--secure-file-priv选项,因此无法执行此语句
我该如何解决这个问题?
Ubuntu 16.04(EASY):找出你可以写的地方
mysql> SELECT @@GLOBAL.secure_file_priv; +---------------------------+ | @@GLOBAL.secure_file_priv | +---------------------------+ | /var/lib/mysql-files/ | +---------------------------+ 1 row in set (0.00 sec)
然后,就在那里写
mysql> SELECT * FROM train INTO OUTFILE '/var/lib/mysql-files/test.csv' FIELDS TERMINATED BY ','; Query OK, 992931 rows affected (1.65 sec) mysql>
Mac OSX:通过MAMP安装Mysql
找出你可以写的地方
mysql> SELECT @@GLOBAL.secure_file_priv; +---------------------------+ | @@GLOBAL.secure_file_priv | +---------------------------+ | NULL | +---------------------------+ 1 row in set (0.00 sec)
NULL意味着你被搞砸了所以你必须创建文件"〜/ .my.cnf"
启用通过MAMP安装的MySQL的读/写(在Mac上):
打开"MAMP"使用聚光灯
单击"停止服务器"
编辑〜/ .my.cnf(使用vi或您喜欢的编辑器)并添加以下行:
$ vi~/.my.cnf
[mysqld_safe] [mysqld] secure_file_priv="/Users/russian_spy/"
单击"启动服务器"(在MAMP窗口中)
现在检查它是否有效:
一个.启动mysql(默认MAMP用户是root,密码也是root)
$ /Applications/MAMP/Library/bin/mysql -u root -p
湾 在mysql中查看列入白名单的路径
mysql> SELECT @@GLOBAL.secure_file_priv; +---------------------------+ | @@GLOBAL.secure_file_priv | +---------------------------+ | /Users/russian_spy/ | +---------------------------+ 1 row in set (0.00 sec)
C.最后,通过将表导出train
为CSV文件进行测试
mysql> SELECT * FROM train INTO OUTFILE '/Users/russian_spy/test.csv' FIELDS TERMINATED BY ','; Query OK, 992931 rows affected (1.65 sec) mysql>
编辑(CentOS的/etc/my.cnf文件)或(Windows的my.ini文件)
最后添加
secure-file-priv = ""
行
使用停止mysql服务 systemctl stop mysqld
使用重启它 systemctl start mysqld
它现在允许您导入和导出数据.
您无法导出数据,因为它是在mysql配置文件中配置的.打开my.cnf配置文件并检查.
引用MySQL 文档
此变量用于限制数据导入和导出操作,如那些由执行的效果
LOAD DATA
和SELECT ... INTO OUTFILE
报表和LOAD_FILE()
功能.仅允许具有此FILE
权限的用户执行这些操作.
secure_file_priv
可以设置如下:
如果为空,则变量无效.
如果设置为目录名称,则服务器会将导入和导出操作限制为仅适用于该目录中的文件.目录必须存在; 服务器不会创建它.
如果设置为
NULL
,则服务器禁用导入和导出操作.从MySQL 5.7.6开始允许该值.
(空值是默认值,或者可以在my.cnf中明确指定为secure_file_priv=""
.NULL
可以使用secure_file_priv=NULL
.设置值.)
因此,如果要导出数据,则需要注释此选项并重新启动mysql服务器.然后你就可以出口了.
替换"\"
为"/"
文件路径.
像这样:
INTO OUTFILE 'D:/MySql/mysqlTest.txt';