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版本引入。