序
背景還是數據庫被劫持事件,需要增加數據庫自動備份。
一、要備份的數據庫環境
系統:CentOS7.6
數據庫:mysql5.6
二、備份方案
使用crontab + shell腳本(mysql備份命令)。
三、mysql命令備份試驗
首先來直接試試mysql的備份命令:
在mysql的安裝目錄同級目錄下建mysqlBack目錄,在這個目錄裏再建command、sql2個目錄。例如:
因爲這裏使用的是mysql的數據泵命令mysqldump ,具體命令如下:
/usr/local/mysql/bin/mysqldump --opt -u數據庫用戶名 -p數據庫密碼 -hlocalhost mp > /usr/local/mysqlBack/sql/db_`date +%F`.sql
解釋:
這裏前面的路徑是mysqldump命令所在的目錄,也就是mysql安裝目錄下的bin目錄,後面的路徑是自己想要備份的路徑,date+%F這裏用到的是系統的常量。
- [ /usr/local/mysql/bin/mysqldump ] 是mysqldump命令所在的目錄
- [--opt ] 參數
- [-uroot ] -u數據庫用戶名 -h數據庫地址 數據庫名 > 導出的文件路徑;
- [ -hlocalhost] 數據庫地址
- [mp] 要備份的數據庫名
- [> /usr/local/mysqlBack/sql/db_`date +%F`.sql] 存儲到mysqlBack目錄下的sql目錄下,文件名db_2018-7-26.sql文件
這裏特別注意date與+%F之間又空格,名稱上面包裹的符號不是單引號,而是數字鍵1前面的按鍵。
這個命令還有其他一些參數,大家自行百度,這條命令我覺得夠用了。
看看命令執行的結果:
四、mysql備份命令轉化爲crontab腳本
1.先驗證系統是否支持crontab,執行命令:crontab -l
如果報 “command not found” ,就說明該crontab服務沒有安裝 如果報 “no crontab for root” ,就說明已經安裝crontab服務了, 不用再安裝了
其實-v,-u都可以,出現:
這也表示是安裝了的。
2.如果沒有則安裝crontab服務(如果系統不支持yum方式安裝,那需要找rpm方式安裝,或者先安裝yum支持)
yum install -y vixie-cron yum install crontabs /sbin/service crond start chkconfig --level 35 crond on
3.編輯一個文件
命名爲xxx.sh。注意使用文本編輯器保存時,文件一定要選所有文件,名稱連後綴一起哦。如果怕不保險,可以先使用vi/vim命令生成一個空文件,然後把文件使用ftp工具複製到本地修改。內容:
DB_USER="數據庫用戶名"
DB_PASS="數據庫密碼"
DB_HOST="localhost"
DB_NAME="要備份的數據庫名稱"
BIN_DIR="/usr/local/mysql/bin" #mysql的安裝目錄的bin目錄
BACK_DIR="/usr/local/mysqlBack/sql" #mysql準備備份保存的目錄
DATE=`date +%F` #文件名,注意date與+之間有個空格
$BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME > $BACK_DIR/db_$DB_NAME_$DATE.sql #這就是先前的測試命令
4.加入到crontab服務中
crontab -e
然後輸入:00 01 * * * /bin/sh /usr/local/mysqlBack/command/xxx.sh
前面時cron表達式,這裏設置爲明天凌晨1點備份。/bin/sh爲腳本執行標識,後面就是xxx.sh所在的目錄。
查看加入服務是否成功
命令:crontab -l
如果出現:
這就表示設置成功了,明天就可以看到自動備份的文件了。sql目錄下將會出現db_yyyy-MM-dd.sql文件。
多個備份命令可以都寫再一個sh文件裏,只需要多設置DB_NAME就行,比如DB_NAME1,DB_NAME2,但是注意
$BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME > $BACK_DIR/db_$DB_NAME_$DATE.sql這條命令也要設置多個哦,替換$DB_NAME爲$DB_NAME1就行。
當然如果怕搞混,也是可以分開寫多個的。