前言
在生產環境中,數據的安全性是至關重要的,任何數據的丟失都可能產生嚴重的后果,正確的數據庫操作是實際環境下不可缺少的。
一、數據庫備份的分類
1.1 從物理與邏輯的角度,備份的分類
-
物理備份:對數據庫操作系統的物理文件(如數據文件、日志文件等)的備份
-
數據庫在物理層面分成了三類文件,每一個文件的名字以表的名字開始,擴展名指出文件類型
- 表結構文件:.frm文件存儲表定義
- 表數據文件的擴展名為.MYD( MYData)
- 表索引文件的擴展名是.MYI( MYIndex)
- 物理備份又可以分為脫機備份(冷備份)和聯機備份(熱備份)
- 冷備份:是在關閉數據庫的時候進行的
- 熱備份:數據庫處於運行狀態,這種備份方法依賴於數據庫的日志文件
-
- 邏輯備份:對數據庫邏輯組件(如表等數據庫對象)的備份
1.2 從數據庫的備份策略角度,備份的分類
- 完全備份:每次對數據進行完整的備份
- 差異備份:備份那些自從上次完全備份之后被修改過的文件
- 增量備份:只有那些在上次完全備份或者增量備份后被修改的文件才會被備份
1.3 常見的備份方法
- 物理冷備份
- tar命令
- 專用備份工具
- mysqldump
- Mysqlhotcopy
- 二進制日志
- 第三方工具備份
- Percona XtraBackup
- Xtrabackup、innobackupex、xbstream
二、MySQL的完全備份
2.1 什么是完全備份?
- 完全備份是對整個數據庫的備份、數據庫結構和文件結構的備份
- 完全備份保存的是備份完成時刻的數據庫
- 完全備份是增量備份和差異備份的基礎
2.2 完全備份的優缺點
- 優點:
- 安全性高
- 備份與恢復操作簡單方便
- 缺點
- 數據存在大量的重復
- 占用大量的備份空間,空間利用率低
- 備份與恢復時間長
2.3 mysqldump備份庫
2.3.1 有什么方式可以備份MySQL數據庫?
- 直接打包數據庫文件夾,如/usr/local/mysql/data
- 如:tar jcvf /opt/mysql-$(date +%F).tar.gz /usr/local/mysql/data
- 使用專用備份工具 mysqldump
2.3.2 什么是mysqldump?
- mysqldump命令是MySQLI自帶的備份工具,相當方便對MySQL進行備份
- 通過該命令工具可以將指定的庫、表或全部的庫導出為SQL腳本,在需要恢復時可進行數據恢復
2.3.3 如何使用mysqldump命令備份庫?
- 備份單個庫
1 語法: 2 mysqldump -u 用戶名 -p [密碼] [選項] [庫名] > /備份路徑/備份文件名 3 例如: 4 mysqldump -u root -p abc > /backup/abc.sql
- 備份多個庫
1 語法: 2 mysqldump -u 用戶名 -p [密碼] [選項] --databases 庫名1 [庫名2] ... > /備份路徑/備份文件名 3 例如: 4 mysqldump -u root -p --databases ab1 ab2 > /backup/ab1-ab2.sql
- 對所有庫完全備份
1 語法: 2 mysqldump -u 用戶名 -p [密碼] [選項] --all-databases > /備份路徑/備份文件名 3 例如: 4 mysqldump -u root -p --opt --all-databases > /backup/ku.sql
2.3.4 如何使用mysqldump命令備份表?
-
在實際生產環境中,存在對某個特定表的維護操作,此時 mysqldump同樣發揮重大作用
-
使用 mysqldump備份表的操作
1 語法 2 mysqldump -u 用戶名 -p [密碼] [選項] 數據庫名 表名 > /備份路徑/備份文件名 3 例如 4 mysqldump -u root -p abc school > /backup/abc-school.sql
- 使用 mysqldump備份表的結構
1 mysqldump -u 用戶名 -p [密碼] [選項] -d 數據庫名 表名 > /備份路徑/備份文件名 2 例如 3 mysqldump -u root -p -d abc school > /backup/abc-school.sql
三、如何恢復數據庫和表?
3.1 數據恢復的兩種方法
- 使用 mysqldump命令導出的SQL備份腳本,在進行數據恢復時可使用以下方法導入
- source命令
- mysql命令
3.2 如何使用source命令恢復數據庫?
-
使用 source恢復數據庫的步驟
- 登錄到 MySQL數據庫
- 執行 source備份sql腳本的路徑(絕對路徑)
1 mysql > source /backup/all-data.sql 2 '//source命令在mysql庫中使用'
3.3 如何使用mysql命令恢復數據庫?
3.3.1 使用 mysql恢復數據庫
1 語法: 2 mysql -u 用戶名 -p [密碼] < 庫備份腳本的路徑 3 '//此處用了導入<符號,而不是導出>符號' 4 例如 5 mysql -u root -p < /backup/all-data.sql
3.4 如何恢復表
-
恢復表時同樣可以使用 source或者mysql命令進行
-
source恢復表的操作與恢復庫的操作相同
-
當備份文件中只包含表的備份,而不包括創建庫的語句時,必須指定庫名,且目標庫必須存在
1 語法 2 mysql -u 用戶名 -p [密碼] < 表備份腳本的路徑 3 例如 4 mysql -u root -p mysql < /backup/abc-scholl.sql