CentOS下mysql定時備份(crontab+mysql的備份sh腳本)

     背景還是數據庫被劫持事件,需要增加數據庫自動備份。

一、要備份的數據庫環境

     系統: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就行。

當然如果怕搞混,也是可以分開寫多個的。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章