今天因为某些需求,需要导出数据库里某个表里某个字段的一些数据,但是又不需要全部,就有了这篇文章。mysql -uroot -p xw -e "SELECT title from typecho_contents INTO OUTFILE'/mysql/title.sql'"
导出数据库xw下typecho_contents表下的title字段里所有的内容导出到/mysqls/title.sql文件里。
在导出前,请确认有/mysql/这个目录。
在我执行上去命令后,出错了,提示[root@VM_0_5_centos ~]# mysql -uroot -p xw -e "SELECT title from typecho_contents INTO OUTFILE'/mysql/title.sql'"
Enter password:
ERROR 1290 (HY000) at line 1: The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
可以看到,跳出一个1290错误,不要慌,继续查看错误详情,登录数据库,执行以下语句show variables like '%secure%';
主要是看 secure_file_priv ;。可以看到,我这里secure_file_priv的 value 为 NULL,代表不允许导出,既然这样那就找到配置文件修改。
找到mysql的配置项文件my.cnf,在[mysqld]的下面添加一句secure_file_priv = /mysql/,这句的意思是允许将数据库导出到/mysql/下的文件夹,修改好后保存后重启mysql即可。
宝塔用户可直接到软件商店找到mysql后,点击设置-配置修改 ,同样在在[mysqld]的下面添加一句secure_file_priv = /mysql/即可,修改后记得重启数据库。
修改后后再去执行第一条导出命令,哦豁,又出问题了,提示ERROR 1 (HY000) at line 1: Can't create/write to file '/mysql/.sql' (Errcode: 13)
问题很明显,是因为写权限问题所致。
考虑到/mysql/是我刚刚手动创建的,没给权限,可能是这里导致的,在给/mysql/重新设置好权限后,问题就解决了
最后,为了安全考虑,在需要的数据库导出后,我建议你将secure_file_priv = /mysql/这句删掉恢复原状。
参考资料:
感谢两位