MYSQL5.7以上的版本
用insert * from table_name into outfile 'dir'时,提示图书错误
此时先通过这个命令查看一下
show VARIABLES like '%secure%'
如果secure_file_priv是NULL
则出现错误的原因是因为MYSQL5.7增加了新权限,secure_file_priv默认为NULL,限制了数据的导入导出。
此时我们可以先停止MYSQL,net stop mysql;
然后在命令行下用 mysqld --secure-file-priv=dir_name;
//dir_name,可以是一个具体的目录,比如D:/,此时导入导出操作可以再D盘及其目录下进行(如果需要保存在名字为汉字的文件夹中,则需要自己设置字符集,不然找不到目录)(如果要保存的文件名字为汉字,也要设置字符集,不然保存的文件名字为乱码)
//也可以是空(不是NULL),空是什么都不加,此时,所有的地方都可以进行(如果用到汉字,操作同上面括号)
//导入导出操作
此时,该命令窗口卡住,可以再打开另一个命令窗口,启用mysql ,net start mysql;启用时可能会提示启动失败,这个不用担心,已经可以使用了,此时已经可以登录使用了。只不过开启或者关闭服务都提示失败。等下次重启就正常了。
上一下MYSQL 操作手册的说明:已经翻译成了中文版(原网址为:https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_secure_file_priv)
命令行格式 | --secure-file-priv=dir_name | ||
系统变量 | 的名字 | secure_file_priv | |
变量作用域 | 全球 | ||
动态变量 | 没有 | ||
允许的值(< = 5.6.33) | 类型 | 字符串 | |
默认的 | empty | ||
有效值 | empty | ||
dirname | |||
允许的值(> = 5.6.34) | 类型 | 字符串 | |
默认的 | platform specific | ||
有效值 | empty | ||
dirname | |||
NULL |
该变量用于限制数据导入和导出操作的影响,比如那些执行的 LOAD DATA
和 SELECT ... INTO OUTFILE
语句和 LOAD_FILE()
函数。这些操作是允许只有用户 FILE
特权。
secure_file_priv
可能是设置如下:
-
如果空,变量没有影响。这不是一个安全的设置。
-
如果设置一个目录的名称,服务器限制进出口业务工作只有该目录中的文件。该目录必须存在;服务器将不创建它。
-
如果设置为
NULL
,服务器禁用进出口操作。MySQL 5.6.34这个值是允许的。
在MySQL 5.6.34之前,这个变量默认是空的。5.6.34,默认值是特定于平台和依赖的价值 INSTALL_LAYOUT
CMake选项,如下表所示。指定默认的secure_file_priv
值显式地从源,如果您正在构建使用 INSTALL_SECURE_FILE_PRIVDIR
CMake选择。
INSTALL_LAYOUT 价值 | 默认的 secure_file_priv 价值 |
---|---|
STANDALONE , WIN | NULL |
DEB , RPM , SLES , SVR4 | /var/lib/mysql-files |
否则 | mysql-files 下 CMAKE_INSTALL_PREFIX 价值 |
设置默认的 secure_file_priv
值 libmysqld
嵌入式服务器,使用 INSTALL_SECURE_FILE_PRIV_EMBEDDEDDIR
CMake选择。这个选项的默认值 NULL
.
MySQL 5.6.34,服务器检查的价值 secure_file_priv
在启动和写一个警告的错误日志,如果值是不安全的。一个非NULL
值被认为是不安全的,如果它是空的,或值是数据目录或子目录,或一个目录,所有用户都可以访问。如果 secure_file_priv
被设置为一个不存在的路径时,服务器将一个错误消息写入错误日志并退出。