Mysql
無法將 MySQL 數據輸出到文件
我正在嘗試將數據從 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>
如果有問題的目錄被修改為 777,那麼 MySQL 使用者為什麼不能寫入該文件?有趣的是,我也無法寫入 /tmp/。
編輯: 看起來 DB 使用者具有適當的 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)
根據SELECT … INTO OUTFILE上的 MySQL 文件
INTO OUTFILE 或 INTO DUMPFILE 創建的任何文件都可以被伺服器主機上的所有使用者寫入。這樣做的原因是 MySQL 伺服器不能創建一個文件,該文件由執行它的帳戶下的使用者以外的任何人擁有。(出於這個和其他原因,您永遠不應該以 root 身份執行 mysqld。)因此該文件必須是全域可寫的,以便您可以操作其內容。
你應該輸出
SELECT INTO OUTFILE
到 /var/lib/mysql 如下SELECT * FROM data INTO OUTFILE 'data.csv';
當然,您需要確保您對 gs@localhost 具有 FILE 權限。
有兩種方法可以獲得此權限
方法#1
GRANT FILE ON *.* TO 'gs'@'localhost';
方法#2
UPDATE mysql.user SET File_priv = 'Y' WHERE user='gs' AND host='localhost'; FLUSH PRIVILEGES;
更新 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