生產環境常無圖形化工具,掌握 mysqldump 導出與 mysql 導入命令是運維基本功。本文涵蓋庫/表/結構導出、大文件導入優化、常見參數詳解。
REM 進入 MySQL bin 目錄(按實際安裝路徑調整)
cd "C:\Program Files\MySQL\MySQL Server 8.0\bin"
REM 登錄驗證(可選,導出導入命令會提示輸入密碼)
mysql -h localhost -u root -p
| 需求 | 命令範例 | 關鍵參數說明 |
|---|---|---|
| 導出整庫 | mysqldump -h localhost -u root -p db_name > backup.sql |
包含建表語句、插入數據 |
| 導出單表 | mysqldump -h localhost -u root -p db_name table_name > table.sql |
指定表名 |
| 僅導出結構(無數據) | mysqldump -h localhost -u root -p db_name --no-data > schema.sql |
--no-data 或 -d |
| 導出結構+數據,並帶 DROP TABLE | mysqldump -h localhost -u root -p db_name --add-drop-table > full.sql |
便於覆蓋導入 |
| 導出壓縮(節省空間/傳輸) | mysqldump -h localhost -u root -p db_name | gzip > backup.sql.gz |
管道配合 gzip |
| 指定字符集避免亂碼 | mysqldump --default-character-set=utf8mb4 ... |
關鍵!防止中文亂碼 |
REM 方式一:SQL 文件導入(最常用)
mysql -h localhost -u root -p db_name < backup.sql
REM 方式二:進入 mysql 交互模式後執行
mysql -h localhost -u root -p db_name
mysql> SOURCE /path/to/backup.sql;
REM 方式三:壓縮文件直接導入(Linux/Mac/Git Bash)
gunzip < backup.sql.gz | mysql -h localhost -u root -p db_name
現象:ERROR 2006 (HY000): MySQL server has gone away 或導入極慢。
[mysqld]
max_allowed_packet = 512M # 關鍵:最大包大小
innodb_log_file_size = 256M # 配合大事務
innodb_buffer_pool_size = 2G # 視內存而定,建議 50-70% 物理內存
net_read_timeout = 600
net_write_timeout = 600
mysql --max_allowed_packet=512M -e "SET autocommit=0; SOURCE backup.sql; COMMIT;"sed 或腳本按表/行數切分大文件SET FOREIGN_KEY_CHECKS=0;
SET UNIQUE_CHECKS=0;
SOURCE backup.sql;
SET FOREIGN_KEY_CHECKS=1;
SET UNIQUE_CHECKS=1;
| 參數 | 默認值 | 建議調整 |
|---|---|---|
| upload_max_filesize | 2M | 200M |
| post_max_size | 8M | 200M |
| memory_limit | 128M | 512M |
| max_execution_time | 30 | 300 |
| max_input_time | 60 | 300 |
REM 檢查文件頭尾
head -20 backup.sql
tail -10 backup.sql
REM 統計表數量
grep -c "CREATE TABLE" backup.sql
REM 試導入測試庫
mysql -h localhost -u root -p test_db < backup.sql