MYSQL文件導入

參考博客:https://www.cnblogs.com/Braveliu/p/11411272.html

使用命令:load data 語法格式爲

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[PARTITION (partition_name,...)]
[CHARACTER SET charset_name]
[{FIELDS | COLUMNS}
[TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
[ESCAPED BY 'char']
]
[LINES
[STARTING BY 'string']
[TERMINATED BY 'string']
]
[IGNORE number {LINES | ROWS}]
[(col_name_or_user_var,...)]
[SET col_name = expr,...]

注意load data需要FILE操作權限,如果未授權,會報錯

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

解決方案:

1.將load data infile 改爲load data local infile;

2.授權

爲當前用戶開通權限。給當前用戶開通FILE Privilege權限時,注意:

FILE權限與SELECE/DELETE/UPDATE等不同,後者是可以具體指定到某個db的某個表的,而FILE則是全局的,

即只能通過grant FILE on *.* to 'abcde'@'%'才能使FILE權限對所有db的所有tables生效。

通過grant all on db.* to 'abcde'@'%'不能使指定的user在指定的db上具有FILE權限。

根據最小權限原則(操作系統安全的概念),這個方法並不安全,故不推薦使用。

3.

非root用戶從client機器load data local infile至remote mysql server時,報錯:

ERROR 1148 (42000): The used command is not allowed with this MySQL version

可能原因(from mysql reference manual):

If LOAD DATA LOCAL is disabled, either in the server or the client, a client that attempts to issue such a statement receives the following error message:

ERROR 1148: The used command is not allowed with this MySQL version

可見,出於安全考慮,默認是不允許從client host遠程通過load data命令導數據的

解決辦法:

For the mysql command-line client, enable LOAD DATA LOCAL by specifying the --local-infile[=1]option, or disable it with the --local-infile=0 option

也即,在需要從client host導人數據的場景下,當登陸mysql時,需用--local-infile[=1]顯式指定參數,典型命令形式爲:

mysql --local-infile -u user -p passwd

登陸成功後,再執行load data infile 'filename' into table即可。

 

腳本大概長這樣:


#!/bin/bash
hostname=192.0.0.1
user=root
port=3306
pwd=mmmmmmmmm
filename=$1
dbname=$2
tablename=$3
mysql  -h $hostname -P$port -u$user -p$pwd $dbname --default-character-set=utf8 -e "load data local infile '${filename}' into table ${tablename} fields terminated by ',';"

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章