離線備份:就是傳統意義上的cold backup(冷備份):需要關閉MySQL服務,讀寫請求均不允許狀態下進行,這種模式下資料損壞和不一致性風險最小。
半離線備份:也就是我們說的warm backup(溫備份): MySQL服務不關閉,但只開放了Read操作,關閉了Write操作。
線上備份:也就是hot backup(熱備份):在資料備份的同時,MySQL業務持續進行中,僅限於InnoDB引擎。
邏輯備份有如下優點:
邏輯備份的缺點:
物理備份的優點:
物理備份的缺點:
使用 select into outfile
方式實現資料的備份和還原
具體的操作步驟如下:
# 選擇對應的資料庫
mysql> use attend;
Database changed
# 查詢需要備份的資料
mysql> select * from userinfo where id < 10000;
+----+----------+------------------+---------+
| id | usercode | username | usersex |
+----+----------+------------------+---------+
| 1 | 374532 | 翁智華_attend | 1 |
| 2 | 123456 | 小度 | 0 |
+----+----------+------------------+---------+
2 rows in set (0.01 sec)
# 選擇備份的資料(可以精確條件),應該有兩條資料,注意備份的地址具備write許可權
mysql> select * from userinfo where id < 10000 into outfile '/Users/Brand/Downloads/tmp/userinfo.txt' ;
# 檢查檔案是否存在
brand@MacBook-Pro ~ % cd /Users/Brand/Downloads/tmp/
# 因為它是文字模式,所以我們使用 load data infile 恢復,並且在恢復之前先刪除掉要恢復的資料,做個測試
mysql> delete from userinfo where id < 10000;
mysql> load data infile '/Users/Brand/Downloads/tmp/userinfo.txt' into table userinfo;
可以使用類似 mysqldump工具 或者 mysqlhotcopy工具對資料進行備份和還原,也可以使用免費的熱備份軟體 Percona XtraBackup。
這邊以 mysqldump 為例子演示溫備的實現:
mysqldump -h主機 -P埠 -u使用者名稱 -p密碼 param1, param2, param3... > bak_filename.sql
這邊對各個欄位坐下說明:
–all-databases 或者 -A
mysqldump -uroot -p123456 --all-databases > /user/brand/db_bak/all.sql
mysqldump -uroot -p123456 -A > /user/brand/db_bak/all.sql
-databases [dbname,[dbname...]] --tables [tbname,[tbname...]] ,如果多個表where條件相同,也可以組合在一起使用:
mysqldump -uroot -p123456 --databases db1 --tables tb1 --where="id>1000" > /user/brand/db_bak/db1_tb1.sql
–add-drop-database 、 –add-drop-table
mysqldump -uroot -p123456 -A --add-drop-database --skip-add-drop-table > /user/brand/db_bak/all.sql
–add-locks:備份資料庫表時鎖定資料庫表,預設就是開啟的狀態,可以使用–skip-add-locks取消
# 不佳引數選項的時候,預設是新增LOCK的
mysqldump -uroot -p123456 -A > /user/brand/db_bak/all.sql
# 取消LOCK的狀態
mysqldump -uroot -p123456 -A --skip-add-locks > /user/brand/db_bak/all_skip_lock.sql
–compact:壓縮模式,去掉註釋、頭尾等結構資訊,讓輸出更少
mysqldump -uroot -p123456 -A --compact > /user/brand/db_bak/all_compact.sql
使用mysql命令進行恢復,語法如下
mysql -u user -p pwd [dbname] < bak_filename.sql
注意箭頭方向
# 刪除資料庫,模擬資料庫損壞
mysql> drop database db1;
# 匯入完全備份的檔案
mysql < /user/brand/db_bak/all_compact.sql
備份和恢復主要使用在以下幾個方面: