目錄
- MySQL數據的備份和恢復
- 1. 數據備份的重要性
- 2. 數據庫備份的分類
- 3. 常見的備份方法
- 4. MySQL完全備份
- (1) 物理冷備份與恢復
- (2) mysqldump備份與恢復
- (3) MySQL物理冷備份及恢復
- 5. mysqldump備份數據庫
- (1) mysqldump命令對單個庫進行完全備份
- (2) 單庫備份的示例
- (3) mysqldump命令對多個庫進行完全備份
- (4) 對所有庫進行完全備份
- (5) mysqldump可針對庫內特定的表進行備份
- 6. 恢複數據庫
- (1) 使用source恢複數據庫的步驟
- (2) 使用mysql命令恢複數據
- (3) 恢復表的操作
1. 數據備份的重要性
- 在生產環境中,數據的安全性至關重要
- 任何數據的丟失都可能產生嚴重的後果
- 造成數據丟失的原因
程序錯誤人為操作錯誤運算錯誤磁盤故障災難(如火災、地震)和盜竊
2. 數據庫備份的分類
- 物理備份:對數據庫操作系統的物理文件(如數據文件、日誌文件等)的備份
- 物理備份方法
- 冷備份(脫機備份):是在關閉數據庫的時候進行的
- 熱備份(聯機備份):數據庫處於運行狀態,依賴於數據庫的日誌文件
- 溫備份:數據庫鎖定表格(不可寫入但可讀)的狀態下進行備份操作
- 邏輯備份:對數據庫邏輯組件(如:表等數據庫對象)的備份
從數據庫的備份策略角度,備份可分為
- 完全備份:每次對數據庫進行完整的備份
- 差異備份:備份自從上次完全備份之後被修改過的文件
- 增量備份:只有在上次完全備份或者增量備份後被修改的文件才會被備份
3. 常見的備份方法
(1) 物理冷備
- 備份時數據庫處於關閉狀態,直接打包數據庫文件
- 備份速度快,恢復時也是最簡單的
(2) 專用備份工具mydump或mysqlhotcopy
- mysqldump常用的邏輯備份工具
- mysqlhotcopy僅擁有備份MyISAM和ARCHIVE表
(3) 啟用二進制日誌進行增量備份
- 進行增量備份,需要刷新二進制日誌
(4) 第三方工具備份
- 免費的MySQL熱備份軟件Percona XtraBackup
4. MySQL完全備份
- 是對整個數據庫、數據庫結構和文件結構的備份
- 保存的是備份完成時刻的數據庫
- 是差異備份與增量備份的基礎
優點
- 備份與恢復操作簡單方便
缺點
- 數據存在大量的重複
- 佔用大量的備份空間
- 備份與恢復時間長
(1) 物理冷備份與恢復
- 關閉MySQL數據庫
- 使用tar命令直接打包數據庫文件夾
- 直接替換現有MySQL目錄即可
(2) mysqldump備份與恢復
- MySQL自帶的備份工具,可方便實現對MySQL的備份
- 可以將指定的庫、表導出為SQL腳本
- 使用命令mysql導入備份的數據
(3) MySQL物理冷備份及恢復
物理冷備份
[root@localhost ~]# systemctl stop mysqld
[root@localhost ~]# mkdir /backup
[root@localhost ~]# tar zcf /backup/mysql_all-$(date +%F).tar.gz /usr/local/mysql/data/
1234
恢複數據庫
[root@localhost ~]# mkdir bak
[root@localhost ~]# mv /usr/local/mysql/data/ /bak/
[root@localhost ~]# mkdir restore
[root@localhost ~]# tar zxf /backup/mysql_all-2020-01-02.tar.gz -C restore/
[root@localhost ~]# mv restore/usr/local/mysql/data/ /usr/local/mysql/
[root@localhost ~]# systemctl start mysqld
12345678
5. mysqldump備份數據庫
(1) mysqldump命令對單個庫進行完全備份
[root@localhost ~]#mysqldump -u 用戶名 -p [密碼] [選項] [數據庫名] > /備份路徑/備份文件名
1
(2) 單庫備份的示例
[root@localhost ~]#mysqldump -u root –p auth > /backup/auth.sql
[root@localhost ~]#mysqldump -u root –p mysql > /bakcup/mysql.sql
1234
(3) mysqldump命令對多個庫進行完全備份
[root@localhost ~]#mysqldump -u 用戶名 -p [密碼] [選項] --databases 庫名 1 [庫名2] … > /備份路徑/備份文件名
12
多庫備份的示例
[root@localhost ~]#mysqldump -u root –p --databases auth mysql > /backup/databases-auth-mysql.sql
123
(4) 對所有庫進行完全備份
[root@localhost ~]#mysqldump -u 用戶名 -p [密碼] [選項] --all-databases > /備份路徑/備份文件名
123
所有庫備份的示例
[root@localhost ~]#mysqldump -u root -p --opt --all-databases > /backup/all-data.sql
12
(5) mysqldump可針對庫內特定的表進行備份
使用mysqldump備份表的操作
[root@localhost ~]#mysqldump -u 用戶名 -p [密碼] [選項] 數據庫名 表名 > /備份路徑/備份文件名
12
備份表的示例
[root@localhost ~]#mysqldump -u root -p mysql user > /backup/mysql-user.sql
12
6. 恢複數據庫
- 使用mysqldump導出的腳本,可使用導入的方法
- source命令
- mysql命令
(1) 使用source恢複數據庫的步驟
- 登錄到MySQL數據庫
- 執行source 備份sql腳本的路徑
- source 恢復的示例
MySQL [(none)]> source /backup/all-data.sql
12
(2) 使用mysql命令恢複數據
[root@localhost ~]#mysql -u 用戶名 -p [密碼] < 庫備份腳本的路徑
1
mysql 命令恢復的示例
[root@localhost ~]#mysql -u root -p < /backup/all-data.sql
123
(3) 恢復表的操作
- 恢復表時同樣可以使用source或者mysql命令
- source恢復表的操作與恢復庫的操作相同
- 當備份文件中只包含表的備份,而不包括創建庫的語句時,必須指定庫名,且目標庫必須存在
[root@localhost ~]#mysql -u 用戶名 -p [密碼] < 表備份腳本的路徑
[root@localhost ~]#mysql -u root -p mysql < /backup/mysql-user.sql
123456
在生產環境中,可以使用Shell腳本自動實現定時備份
案例
cd /opt
mkdir server
cd /server
vim mysqld.sh ##定時備份腳本
#!/bin/bash
filename=data'date +%y%m%d'.sql # 防止每次備份的數據庫都把前面的一次備份給覆蓋了,所以每次備份的文件都要不一樣的命名
/usr/local/mysql/bin/mysqldump -u root -p123 【備份的數據庫名】 > /opt/server/data.sql
wq ##保存退出
chmod 777 mysqld.sh ##給腳本文件設置權限
##設置周期性任務進行每周5下午五點半備份
crontab -e
30 5 * * 5 /opt/server/mysqld.sh
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/253506.html