LOCK TABLES tbl_name READ;
FLUSH TABLES;
SELECT * INTO OUTFILE 'data_bck.sql'
FIELDS TERMINATED BY ',' FROM tbl_name;
UNLOCK TABLES;
注意:對事務型表(InnoDB)需先設定 SET AUTOCOMMIT=0,否則 LOCK TABLES 會隱含提交當前事務。
| 場景 | 命令範例 |
|---|---|
| 單表完整備份 | mysqldump -h192.168.4.20 -uuser -ppass db tbl > data_bck.sql |
| 單庫完整備份 | mysqldump -h192.168.4.20 -uuser -ppass db > data_bck.sql |
| 全庫完整備份 | mysqldump -h192.168.4.20 -uuser -ppass --single-transaction --all-databases > all.sql |
| 全備+切換 Binlog | mysqldump ... --flush-logs --master-data=2 --all-databases > all.sql |
| 全備+刪除舊 Binlog | mysqldump ... --flush-logs --master-data=2 --delete-master-logs --all-databases > all.sql |
| 增量備份 | 先全備,再執行 mysqladmin flush-logs 產生新 Binlog |
停止 MySQL 服務或全域鎖表 FLUSH TABLES WITH READ LOCK,複製整個 data 目錄,完成後解鎖或重啟服務。
LOAD DATA INFILE 'data_bck.sql' INTO TABLE tbl_name FIELDS TERMINATED BY ',';
# 完整還原
mysql -h192.168.4.20 -uuser -ppass db < data_bck.sql
# 增量 Binlog 還原
mysqlbinlog binlog.000001 binlog.000008 | mysql
在 MySQL 互動式命令列中執行:
> tee /path/to/heihei.sql
> SELECT * FROM tbl_name;
所有後續輸入的命令與輸出結果(含錯誤)都會原樣寫入指定檔案,適合生成報表、簡易備份或操作審計。關閉記錄可用 notee。