MySql數據庫升級到8以上時,對於開發人員來說非常好用的數據批量導入的工具loaddata使用會出現一些小問題。
這里簡單總結一下,如果可以幫大家省時間最好不過了
簡單粗暴,圍繞出啥錯,為什么,怎么解決三點開始正文
錯誤:ERROR 1148: The used command is not allowed with this MySQL version
為啥:load data local可被利用為高危漏洞,所以8以上mysql默認關閉改功能
咋辦:修改全局變量啟用load data
set global local_infile = 1;
修改config啟用load data local
[client] loose-local-infile = 1
錯誤:MySqlBulkLoader 報 promissions deny
為啥:5.6之前,這代碼沒問題,5.6之后的版本,默認local = false
咋辦:代碼加一段就可以了
var bulk = new MySqlBulkLoader(conn) { CharacterSet = "utf8mb4", Local = true, #加這個,參考官方文檔,文末有鏈接 FieldTerminator = ",", FieldQuotationCharacter = '"', EscapeCharacter = '"', LineTerminator = "\r\n", FileName = csvFileItemPath, NumberOfLinesToSkip = 1, TableName = cacheTableName }
錯誤:MySqlBulkLoader 報 The used command is not allowed with this MySQL version;設置了local_infile = 1也沒啥用
為啥:猜測mysqlconnection,默認關閉這個功能的。至於為啥全局變量啟用load data還是無效,我沒有深究,有知道的小伙伴能告訴我最好了 [手動狗頭]
咋辦:修改鏈接字符串,加上allowLoadLocalInfile
Data Source=***.***.***.*;Initial Catalog=******;user id=*****;pwd=*******;allowLoadLocalInfile=true;
錯誤:萬一手賤,以為是包的問題,把mysql.data.ef6包給升級了,發現咋跑都報錯
為啥:mysql.data.ef6遷了,最新版到包mysql.data.entityframework。如果還是有問題(具體啥錯我就不貼了),把下面的這個config招呼上
<entityFramework codeConfigurationType="MySql.Data.EntityFramework.MySqlEFConfiguration, MySql.Data.EntityFramework"> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="mssqllocaldb" /> </parameters> </defaultConnectionFactory> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.EntityFramework, Version=8.0.18.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> </providers> </entityFramework>
參考:
Mysql8以上版本默認禁用load data命令官宣
https://dev.mysql.com/doc/refman/8.0/en/load-data-local.html
LoadData命令相關
https://dev.mysql.com/doc/refman/5.7/en/load-data.html
命令報錯:ERROR 1148: The used command is not allowed with this MySQL version
MySqlBulkLoader官方實例
https://dev.mysql.com/doc/connector-net/en/connector-net-programming-bulk-loader.html