MySql 8+版本 load data出錯的問題


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

https://stackoverflow.com/questions/18437689/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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM