dot*_*hen 13 mysql linux permissions
我正在尝试将 MySQL 表中的数据输出到文件,但出现权限错误:
$ pwd
/home/dotancohen
$ mkdir in
$ chmod 777 in/
$ mysql -ugs -p
mysql> USE someDatabase;
mysql> SELECT * FROM data INTO OUTFILE '/home/dotancohen/in/data.csv';
ERROR 1045 (28000): Access denied for user 'gs'@'localhost' (using password: YES)
mysql>
Run Code Online (Sandbox Code Playgroud)
如果有问题的目录被chmodded为777,那么为什么MySQL用户不能写入文件?有趣的是,我也不能写入 /tmp/。
编辑: 看起来数据库用户具有适当的 MySQL 权限:
mysql> show grants;
+----------------------------------------------------------------------------------+
| Grants for gs@localhost |
+----------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'gs'@'localhost' IDENTIFIED BY PASSWORD 'somePassword' |
| GRANT ALL PRIVILEGES ON `gs\_%`.* TO 'gs'@'localhost' |
+----------------------------------------------------------------------------------+
2 rows in set (0.01 sec)
Run Code Online (Sandbox Code Playgroud)
Rol*_*DBA 13
根据SELECT ... INTO OUTFILE上的 MySQL 文档
任何由 INTO OUTFILE 或 INTO DUMPFILE 创建的文件都可以被服务器主机上的所有用户写入。这样做的原因是 MySQL 服务器不能创建一个文件,该文件由它运行的帐户下的用户以外的任何人拥有。(出于这个和其他原因,您永远不应该以 root 身份运行 mysqld。)因此该文件必须是全局可写的,以便您可以操作其内容。
你应该输出SELECT INTO OUTFILE
到 /var/lib/mysql 如下
SELECT * FROM data INTO OUTFILE 'data.csv';
Run Code Online (Sandbox Code Playgroud)
当然,您需要确保您对 gs@localhost 具有 FILE 权限。
有两种方法可以获得此权限
方法#1
GRANT FILE ON *.* TO 'gs'@'localhost';
Run Code Online (Sandbox Code Playgroud)
方法#2
UPDATE mysql.user SET File_priv = 'Y' WHERE user='gs' AND host='localhost';
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)
更新 2012-05-01 07:09 EDT
要给自己 FILE 权限,请执行以下操作:
service mysql restart --skip-networking --skip-grant-tables
mysql <hit enter>
UPDATE mysql.user SET File_priv = 'Y' WHERE user='gs' AND host='localhost';
exit
service mysql restart
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
54579 次 |
最近记录: |