資料庫匯出匯入是遷移、備份、同步核心操作。本文系統整理命令列、phpMyAdmin、原始檔案複製等多種方案。
# 基本語法
mysqldump -u username -p database_name > backup.sql
# 實例:匯出 db_name 為 test_db.sql
mysqldump -u root -p db_name > test_db.sql
# 遠端主機
mysqldump -h 192.168.0.156 -u username -p --skip-lock-tables db_name > database.sql
mysqldump -u username -p database_name table_name > table_backup.sql
# 範例
mysqldump -u wcnc -p test_db users > test_users.sql
mysqldump -u root -p --databases db1 db2 db3 > multi_db.sql
# 僅結構
mysqldump -u root -p -d db_name > structure.sql
# 僅資料
mysqldump -u root -p -t db_name > data.sql
# 方式 1:mysql 指令 (需先建立空資料庫)
mysql -u username -p database_name < backup.sql
# 方式 2:source 指令 (在 mysql client 內)
mysql -u root -p
CREATE DATABASE db_name;
USE db_name;
SOURCE /path/backup.sql;
gzip -d backup.sql.gz | mysql -u root -p db_nameSET autocommit=0; 結尾加 COMMIT;SET FOREIGN_KEY_CHECKS=0; ... SET FOREIGN_KEY_CHECKS=1;max_allowed_packet (如 100M)php.ini 的 upload_max_filesize、post_max_sizemax_execution_time# 停止服務
systemctl stop mysqld
# 複製資料目錄 (通常 /var/lib/mysql/db_name)
cp -r /var/lib/mysql/db_name /backup/
# 啟動服務
systemctl start mysqld
> ⚠️ InnoDB 無法直接複製檔案,需配合 innodb_file_per_table 且相同版本/架構。
# 啟用 binlog (my.cnf)
log-bin=mysql-bin
server-id=1
# 完整備份後,增量備份
mysqlbinlog mysql-bin.000001 > incremental.sql
| 項目 | 檢查點 |
|---|---|
| 版本相容 | 目標版本 ≥ 來源版本,或使用 --compatible 參數 |
| 字元集 | 來源/目標均為 utf8mb4 |
| 權限重建 | 匯入後執行 FLUSH PRIVILEGES |
| 觸發器/視圖 | mysqldump 預設包含,確認 DEFINER 存在 |
| 自增值 | 確認 AUTO_INCREMENT 值正確 |