首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 匯出匯入實戰與常見錯誤排坑指南

     編輯:MySQL 資料庫相關知識

    命令列匯出 (mysqldump)

    # 完整庫
    mysqldump -u root -p --single-transaction --routines --events --triggers db_name > backup.sql
    
    # 單表
    mysqldump -u root -p db_name table_name > table.sql
    
    # 僅結構
    mysqldump -u root -p --no-data db_name > schema.sql
    
    # 壓縮輸出
    mysqldump -u root -p db_name | gzip > backup.sql.gz

    命令列匯入

    # 進入 mysql 建庫
    mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS target_db;"
    
    # 匯入
    mysql -u root -p target_db < backup.sql
    
    # 或 mysql 內部
    mysql> USE target_db;
    mysql> SOURCE /path/backup.sql;

    常見錯誤與解決

    錯誤訊息原因解決
    Unknown database 'xxx'Shell 下執行 mysqldump 不需分號,資料庫名含特殊字元未加反引號資料庫名加反引號 \`db_name\`,或先 mysql -e "CREATE DATABASE \`db_name\`;"
    Access denied for user ''@'localhost'未指定 -u,或密碼錯誤補齊 -u root -p
    ERROR 1044 (42000): Access denied for user '@'localhost' to database 'mysql'免密登入 (--skip-grant-tables) 進入匿名用戶正常登入或指定用戶
    Got a packet bigger than 'max_allowed_packet'大欄位 (BLOB/TEXT) 超過限制mysqldump --max_allowed_packet=1G、SET GLOBAL max_allowed_packet=1G
    Character set 'utf8mb4' unsupported舊版 MySQL 導入新版備份目標庫建表指定 CHARSET=utf8,或升級目標 MySQL
    Table doesn't exist in engine.ibd 檔遺失/損壞Discard/Import tablespace 或從備份恢復

    大資料庫匯入優化

    • SET autocommit=0; SET unique_checks=0; SET foreign_key_checks=0; 關閉檢查
    • 分檔匯入:split -l 10000 backup.sql part_
    • 使用 pv backup.sql | mysql -u root -p db 顯示進度
    • 啟用 LOAD DATA INFILE 替代 INSERT (需 secure_file_priv 配合)

    跨版本遷移清單

    1. 來源 mysql_upgrade (若升級)
    2. 目標 mysql_install_db / mysqld --initialize
    3. 備份前 FLUSH TABLES WITH READ LOCK (一致性)
    4. 匯入後 ANALYZE TABLE 更新統計資訊
    1. 上一篇文章:
    2. 下一篇文章:
    Copyright © 程式碼之家 All Rights Reserved