MySQL 匯出資料

wangq17發表於2016-12-05

mysql的資料匯出幾種方法 http://www.blogjava.net/fisher/articles/90455.html

1、匯出檔案,需要相關許可權

mysql資料匯出的方法有很多,例如mysqldump, mysql -e 'sql' > file, 這些都可以很方便的匯出資料,可是在使用普通使用者匯出資料的時候,出現了問題。

1
select * into outfile "file_path" from my_table

上面的語句也是mysql匯出資料的一種方式,在使用普通使用者執行語句時,出現了一下錯誤:

1
ERROR 1045 (28000): Access denied for user 'my_user'@'%' (using password: YES)

之前已經對該使用者在對應的資料庫上執行了授權,如下:

1
grant all on my_database.* to my_user ;

上面語句可以看出,已經把所有的許可權賦予了my_user,可是問題依舊存在。問題到底出現在什麼地方呢?google了一下後發現mysql有單獨的file許可權,需要單獨賦予,同時file是一個全域性許可權,不能夠僅僅將單個資料庫的檔案許可權賦予使用者。找到原因後,下面就將檔案許可權賦予相應使用者:

1
grant file on *.* to my_user ;

再次執行匯出語句,成功執行。

 

--自己本機上處理

mysql -u root -p

grant file on *.* to 'hadoop'@'stjf1'

 

---------------------------------------------------------------------------------------------------------------------------

 

2、可能匯出的時候回報下面的錯誤,需要修改匯出檔案的目錄。

mysql> select * from test into outfile '/tmp/test_out.txt' fields terminated by ',' optionally enclosed by '"';
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

報錯原因:
secure_file_priv設定了指定目錄,需要在指定的目錄下進行資料匯出

mysql> show variables like '%secure%';
+--------------------------+-----------------------+
| Variable_name            | Value                 |
+--------------------------+-----------------------+
| require_secure_transport | OFF                   |
| secure_auth              | ON                    |
| secure_file_priv         | /var/lib/mysql-files/ |
+--------------------------+-----------------------+
3 rows in set (0.27 sec)

mysql> select * from test into outfile '/var/lib/mysql-files/test_out.txt' fields terminated by ',' optionally enclosed by '"';
Query OK, 5 rows affected (0.21 sec)

secure_file_priv引數說明

這個引數用來限制資料匯入和匯出操作的效果,例如執行LOAD DATA、SELECT ... INTO OUTFILE語句和LOAD_FILE()函式。這些操作需要使用者具有FILE許可權。
如果這個引數為空,這個變數沒有效果;
如果這個引數設為一個目錄名,MySQL服務只允許在這個目錄中執行檔案的匯入和匯出操作。這個目錄必須存在,MySQL服務不會建立它;
如果這個引數為NULL,MySQL服務會禁止匯入和匯出操作。這個引數在MySQL 5.7.6版本引入。

相關文章