mysqldump引發的一系列問題

mysqldump引發的一系列問題

問題背景

  • 生產環境數據異常,需要批量執行sql進行修復。修復之前需要把生產數據導入測試環境數據庫,先對測試環境數據進行修復驗證。

解決過程

  • 第一步:首先徵求項目經理意見,允許將生產環境數據導入到測試環境數據庫。
  • 第二步:生產數據導出,我選擇的是通過mysqldump命令:

mysqldump -h10.11.20.98 -P3306 -uweifan -pweifan aipc --skip-lock-tables --skip-add-locks > D:\aipc_prd.dump

  • 第三步:將生產數據導入測試環境數據庫,我選擇的是通過mysql命令:

mysql -h172.30.1.75 -P3306 -uaipc -pweifan aipc-uat < D:\aipc_prd.dump

執行mysql導入命令,報錯:

ERROR 1227 (42000) at line 18: Access denied; you need (at least one of) the SUPER privilege(s) for this operation

最直觀的翻譯是說權限的問題,一般是mysql的用戶創建後沒給權限;但也可能是其他原因!!!

問題1

  • 用編輯器打開dump文件(其實是想定位第18行內容),意外發現導出的dump文件中,全是亂碼!

解決

  • 使用mysqldump命令時,增加參數:–default-character-set=utf8:

mysqldump -h10.11.20.98 -P3306 -uweifan -pweifan aipc --skip-lock-tables --skip-add-locks --default-character-set=utf8 > D:\aipc_prd.dump

再次執行數據導出,發現dump文件依舊亂碼!!!

  • 究其原因發現,數據庫中表字段使用了blob類型,在面對BINARY, VARBINARY, BLOB, BIT類型時,mysqldump只能導出爲“亂碼”,可以使用參數:–hex-blob 避免

mysqldump -h10.11.20.98 -P3306 -uweifan -pweifan aipc --skip-lock-tables --skip-add-locks --default-character-set=utf8 --hex-blob > D:\aipc_prd.dump

  • 再次執行mysqldump命令,成功導出無亂碼dump文件。

問題2

  • 用編輯器打開dump文件,定位到18行顯示的是一個這樣的語句: SET @@SESSION.SQL_LOG_BIN= 0;

mysql導數據遇到錯誤提示ERROR 1227,Acess denied

使用用Mysql導入數據庫提示 ERROR 1227 (42000) at line 18: Access denied; you need (at least one of) the SUPER privilege(s) for

解決

  • 手動將dump文件的第18行內容刪除,並將SET @@ 格式內容一併刪除,再執行mysql導入命令,確實可以成功導入,但是dump文件一旦過大,不可能採用此手動刪除方式去解決問題。
  • 究其根本原因:如果數據庫用GTID模式,在mysqldump數據時,應該加上參數–set-gtid-purged=OFF,此時導出的sql文件將不會包含SET @@等內容

mysqldump -h10.11.20.98 -P3306 -uweifan -pweifan aipc --skip-lock-tables --skip-add-locks --default-character-set=utf8 --hex-blob --set-gtid-purged=OFF > D:\aipc_prd.dump

mysqldump導出時 --set-gtid-purged=OFF

Mysqldump參數大全

MySQL5.6 新特性之GTID

  • 到此,mysqldump導出可執行的dump文件已經結束。
  • 再次執行mysql導入命令:

mysql -h172.30.1.75 -P3306 -uaipc -pweifan aipc-uat --default-character-set=utf8 < D:\aipc_prd.dump

因爲導出的時候指定了字符集,導入時也需要指定字符集。

總結

  • 本來以爲很簡單的mysql數據導出導入,引發了一系列問題,對mysql數據庫加深了認識。技術的領域博大精深,任何小問題都會引出一堆未知領域的問題,比如:Mysql GTID
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章