| 環境 | 工具 | 適用數據量 | 典型操作 |
|---|---|---|---|
| 虛擬主機 | phpMyAdmin | < 50MB | Web 界面點擊導入導出 |
| 虛擬主機 | 程序後台 | < 100MB | Discuz/WordPress 後台備份還原 |
| 虛擬主機 | 面板一鍵 | 任意 | 寶塔/朝暮面板 FTP 下載 |
| 服務器/VPS | mysqldump + source | 無上限 | 命令行完全控制 |
which mysql)# 1. 進入客戶端 mysql -u root -p # 2. 建庫並切換 CREATE DATABASE IF NOT EXISTS mydb; USE mydb; # 3. 執行導入 SOURCE /path/to/backup.sql;
優點:可見執行進度、錯誤即時顯示、支持多文件分批導入。
# Windows (進入 bin 目錄) mysql -u root -pabc123 mydb < D:\backup\file.sql # Linux (直接執行) mysql -u root -pabc123 mydb < /backup/file.sql
優點:一行命令、易集成 CI/CD、無交互阻塞。
# 基礎導出 mysqldump -u root -pabc123 mydb > /backup/mydb_$(date +%F).sql # 生產級熱備份(InnoDB 必加) mysqldump -u backup_user -p'StrongPass' \ --single-transaction \ --master-data=2 \ --flush-logs \ --routines --events --triggers \ --databases db1 db2 > /backup/full_$(date +%F_%H-%M).sql # 壓縮存儲 gzip /backup/full_*.sql
| 錯誤 | 原因 | 解決 |
|---|---|---|
| Lock wait timeout | 默認鎖表導出 | 加 --single-transaction (InnoDB) 或 --skip-lock-tables |
| Access denied | 權限不足 | 授予 SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER 權限 |
| Unknown table | 表不存在/拼寫錯 | 核對 SHOW TABLES |
| Max allowed packet | 大字段超過限制 | --max-allowed-packet=1G |
限制:受 upload_max_filesize、memory_limit、max_execution_time 限制,大文件易超時。
data/backup/ 目錄,FTP 下載mysqldump --flush-privileges 導出用戶權限CHECKSUM TABLE tbl 對比源目標一致性#!/bin/bash
# /usr/local/bin/mysql_backup.sh
set -euo pipefail
BACKUP_DIR="/backup/mysql"
RETENTION_DAYS=7
MYSQL_USER="backup_user"
MYSQL_PASS="StrongPass"
DATABASES="db1 db2"
mkdir -p "$BACKUP_DIR"
DATE=$(date +%F_%H-%M)
FILE="$BACKUP_DIR/full_${DATE}.sql"
mysqldump -u"$MYSQL_USER" -p"$MYSQL_PASS" \
--single-transaction --master-data=2 --flush-logs \
--routines --events --triggers \
--databases $DATABASES > "$FILE"
gzip "$FILE"
find "$BACKUP_DIR" -name "full_*.sql.gz" -mtime +$RETENTION_DAYS -delete
# 可選:上傳至對象存儲
# aws s3 cp "$FILE.gz" s3://my-bucket/mysql-backup/
導入導出核心:**虛擬主機用面板/程序後台,服務器用 mysqldump + source/管道**。生產環境務必**熱備份參數全開、壓縮存儲、異地複製、定期演練還原**。備份未驗證等於沒備份。