首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 跨平台資料庫遷移實戰:從 Windows 5.5 導入 Linux 5.1

     編輯:MySQL 綜合教學

MySQL 跨平台資料庫遷移實戰記錄

任務背景:將線上環境 MySQL 5.5 (Windows) 的完整資料遷移至測試環境 MySQL 5.1 (Linux)。資料庫包含大量二進位資料、視圖、函數、觸發器,且存在歷史亂碼問題。

一、圖形化工具嘗試失敗

先後使用 Navicat Premium、SQLyog 進行匯出/匯入,雖然匯出成功,但匯入總是中斷報錯。主要原因推測為:

  1. 版本差異導致語法不相容(已排除)
  2. 複雜物件(二進位欄位、View、Function、Trigger)處理不當
  3. 舊專案遺留的亂碼欄位定義干擾匯入

二、改用命令列工具 mysqldump 成功

匯出指令(Windows 端)

mysqldump.exe -uroot -proot --default-character-set=utf8 \
  --opt --extended-insert=false --triggers -R --hex-blob -x house > backup.sql

關鍵參數說明:

  • --hex-blob:二進位欄位以十六進位導出,避免編碼問題
  • --triggers -R:包含觸發器與預存程序/函數
  • --extended-insert=false:單行 INSERT,利於除錯與部分恢復
  • -x:鎖定所有資料表,保證一致性快照

匯入指令(Linux 端)

mysql> source /path/to/backup.sql

三、遇到的關鍵問題與解決

1. log_bin_trust_function_creators 錯誤

匯入自訂函數時提示:ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA...

臨時方案(重啟失效):

SET GLOBAL log_bin_trust_function_creators = 1;

永久方案:修改 my.cnf(或 my.ini)的 [mysqld] 區段:

[mysqld]
log_bin_trust_function_creators = 1

重啟 MySQL 服務生效。

2. 多實例環境連線錯誤

測試伺服器運行兩個 MySQL 實例,預設 mysql 指令連到錯誤實例。

定位正確 socket:

ps aux | grep mysqld
# 找到目標實例的 --socket=/tmp/mysql.sock

指定 socket 連線:

mysql -uroot -p -P3306 -S /tmp/mysql.sock

四、遷移完成驗證

  • 所有資料表結構、資料完整無誤
  • 視圖、函數、觸發器正常建立
  • 二進位欄位(含圖片、檔案內容)完好
  • 亂碼問題因 --hex-blob 與字符集一致性得到解決

五、經驗總結

  1. 跨版本、跨平台遷移首選 mysqldump + source,參數要精準
  2. 二進位資料務必加 --hex-blob,字符集統一指定 --default-character-set
  3. 啟用二進位日誌的環境必須處理 log_bin_trust_function_creators
  4. 多實例環境務必透過 -S socket 指定連線目標
  5. 遷移前先在測試庫做全量演練,驗證腳本與參數
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved