數據庫備份
1、在 CentOS7 中安裝 rsync
yum -y install rsync
2、用密鑰實現免密登錄
由於需要使用命令行傳輸文件,不方便輸入密碼,所以在服務器 A 中配置 ssh 免密登錄,配置成功后,服務器 A 登錄服務器 B 時就不需要輸入密碼就可以登錄了。
(1)生成公鑰
在服務器 A 中輸入命令:
ssh-keygen
該命令會生成一個公鑰,執行命令后,在 ~/.ssh/ 會出現兩個新文件:
生成公鑰
(2)將公鑰傳輸到服務器 B 中
在服務器 A 中輸入命令:
ssh-copy-id root@B服務器ip
或者
ssh-copy-id -i ~/.ssh/id_rsa.pub root@B服務器ip
需要注意文件夾的用戶權限以及所有者,如果是用root免密登陸,服務器a .ssh文件夾權限700 所有者root 服務b .shh的authorized_keys文件權限600 所有者root(本人被蒙了兩天,萌新一個)
從此以后,在服務器 A 中使用 ssh 方式登錄服務器 B 就不需要輸入密碼了。
3、在服務器 A 中書寫腳本 backup.sh
這個腳本主要的作用是將要備份的數據導出為一個 SQL 腳本,並將這個腳本傳輸到服務器 B 的指定目錄中:
#!/bin/bash
# 將 woods數據庫 導出為一個 SQL 腳本
mysqldump -h服務器A的IP -u用戶名 -p密碼 woods > /etc/backup/sql/woods`date +%Y%m%d%H%M%S`.sql
# 同步目錄(傳輸新增文件到服務器的B的指定目錄)
rsync -arv --delete /etc/backup/sql/ root@服務器B的IP:/etc/backup/sql/
保存之前建議set ff=unix
這個腳本做了兩個操作:
將 woods數據庫 導出為一個 SQL 腳本,這個腳本的命名帶上了當前時間。
會將服務器A的 /etc/backup/sql/ 目錄與服務器 B 的 /etc/backup/sql/ 目錄進行同步。
4、將 backup.sh 加上可執行權限
在服務器 A 中輸入命令:
//chmod 744 /usr/local/backup.sh
chmod 744 /home/backup/local/backup.sh
5、測試 backup.sh 是否達到預期的效果
在服務器 A 中輸入命令:
sh /usr/local/backup.sh
執行完畢后,查看是否已經生成了備份文件:
是否已經生成了備份文件
6、添加定時任務
輸入命令:
crontab -e
在打開的文件中加入如下內容:
0 1 * * * sh /usr/local/backup.sh
這個意思是每天凌晨 1 點執行腳本。關於 crontab 表達式的更多內容就不在這里說了,感興趣的可以自己去搜索引擎搜索 crontab 表達式自行學習。
(二)、在服務器 B 上需要進行的操作
注意:以下命令全部在服務器 B 上進行。
1、書寫腳本 reduction.sh
這個腳本的作用是執行從服務器 A 中傳入過來的 SQL 腳本:
#!/bin/bash
# 找到當天的備份文件的位置並存入到變量 woods_file
woods_file=$(find /etc/backup/sql -name woods`date +%Y%m%d*`)
# 一個 if 判斷,意思是如果變量 woods_file 字符串不為空,就執行 then 后面的命令
if [ -n $woods_file ]
then
echo $woods_file
# 執行查找到的 MySQL 腳本
mysql -hlocalhost -u數據庫用戶名 -p數據庫密碼 數據庫名< $woods_file
fi
保存之前建議set ff=unix
注意,MySQL 一定已經有你要備份的數據庫,mysqldump 導出的 SQL 腳本沒有帶創建數據庫的命令,所以沒有就要先自行創建。
2、測試 reduction.sh 是否達到預期效果
sh /usr/local/reduction.sh
執行腳本,查看數據庫的內容是否已經變化為備份文件的內容,如果沒有發生變化,請根據報錯提示,進行排查。
3、設置定時任務
設置定時任務定期執行腳本 reduction.sh
輸入命令:
crontab -e
在打開的文件中加入如下內容:
30 1 * * * sh /usr/local/reduction.sh
這個意思是每天凌晨 1 點 30 分執行腳本。