冷備份(Cold Backup)即停止數據庫服務後,直接拷貝/打包數據目錄的物理文件。原理簡單、恢復快、邏輯無損,但需停機、佔用空間大、不適合大數據量 7×24 業務。本文通過完整實驗演示冷備份全流程。
/usr/local/mysql/data/databackupmysql> USE larrydb; mysql> CREATE TABLE class (cid INT, cname VARCHAR(30)) ENGINE=InnoDB; mysql> CREATE TABLE stu (sid INT, sname VARCHAR(30), cid INT) ENGINE=MyISAM; mysql> INSERT INTO class VALUES (1,'linux'),(2,'oracle'); mysql> INSERT INTO stu VALUES (1,'larry01',1),(2,'larry02',2);
[root@serv01 ~]# /etc/init.d/mysqld stop Shutting down MySQL... SUCCESS!
必須確保服務完全停止,否則文件處於寫入狀態導致備份不一致。
[root@serv01 ~]# mkdir /databackup [root@serv01 ~]# chown mysql:mysql /databackup -R
[root@serv01 databackup]# tar -cvPzf mysql01.tar.gz /usr/local/mysql/data # -c 創建 -v 顯示過程 -P 保留絕對路徑 -z gzip壓縮 -f 指定文件名
[root@serv01 databackup]# rm -rf /usr/local/mysql/data/*
[root@serv01 databackup]# /etc/init.d/mysqld start Starting MySQL.. ERROR! The server quit without updating PID file...
無數據目錄無法啟動,符合預期。
[root@serv01 databackup]# tar -xvPf mysql01.tar.gz # -x 解壓 -v 顯示 -P 保留絕對路徑 -f 指定文件
[root@serv01 databackup]# /etc/init.d/mysqld start Starting MySQL.. SUCCESS! [root@serv01 ~]# mysql -e "USE larrydb; SELECT * FROM class; SELECT * FROM stu;" +------+--------+ +------+---------+------+ | cid | cname | | sid | sname | cid | +------+--------+ +------+---------+------+ | 1 | linux | | 1 | larry01 | 1 | | 2 | oracle | | 2 | larry02 | 2 | +------+--------+ +------+---------+------+
數據完整恢復,冷備份演練成功。
| 維度 | 說明 |
|---|---|
| 前提條件 | 必須停止 MySQL 服務(service mysqld stop) |
| 備份對象 | 整個 datadir 目錄(含 .frm/.ibd/.MYD/.MYI/ibdata1/redo log 等) |
| 工具選擇 | tar/cp/rsync + 壓縮(gzip/xz),或快照(LVM/AWS EBS) |
| 恢復速度 | 極快(僅解壓/拷貝,無重放邏輯日志) |
| 一致性 | 物理級完全一致(停機狀態下) |
| 缺點 | 需停機、空間佔用大、無增量備份能力、跨版本/架構遷移受限 |