溝通很重要,溝通的渠道很重要。當團隊須要配合的時候,要想辦法將本身當下作的事情,以最有效的方式通知給團隊其它成員,以免沒必要要的傷害。html
好比,剛剛發生了以下事情:
有一測試系統,歷史的任務是完成上線前的最後一次測試,而後:
A 爲了給客戶演示系統的使用方法,在此係統上添加了大量的供演示用的支撐數據。
B 爲了刪除生產環境下冗餘數據,用生產環境下的數據覆蓋了測試的數據。mysql
致使:
A很無奈:覆蓋數據前居然不和我打招呼!
B很無辜:測試系統不就是用來測試而能夠隨時覆蓋的嗎?git
以上是閒談,若是咱們每日都對數據進行備份呢?是否是就能夠解決A、B兩我的的問題?github
#!/bin/sh #注意:liunx 系統請將上一行修改成:!/bin/bash # 備份數據庫腳本 # 設置變量 MyUSER="用戶名。建議單獨創建個用戶,給查詢權限,防止權限問題" # DB_USERNAME MyPASS="密碼" # DB_PASSWORD MyHOST="主機名" # DB_HOSTNAME Port="端口號" # 例3306 # 設置備份路徑(該路徑必須存在,且可寫) DEST="/請使用實際的絕對路徑" # 好比:/home/username/backups/DB # 接收通知的郵件 EMAIL="3792535@qq.com" # 備份保留天數 DAYS=8 # 查找mysql、MYSQLDUMP、GZIP的位置 (該腳本依賴於GZIP,若是沒有安裝的話,先安裝) MYSQL="/usr/local/bin/mysql" MYSQLDUMP="/usr/local/bin/mysqldump" GZIP="/usr/bin/gzip" # liunx系統請替換爲(注意去除註釋) # MYSQL="$(which mysql)" # MYSQLDUMP="$(which mysqldump)" # GZIP="$(which gzip)" # 以 年-月-日 的格式來獲取當前日期 NOW="$(date +"%Y-%m-%d_%s")" # 建立備份文件夾 目標文件夾/時間/mysql MBD="$DEST/$NOW/mysql" install -d $MBD # 須要備份的數據表 SKIP="schedule measurement" # 獲取全部的數據表 DBS="$($MYSQL -h $MyHOST -u $MyUSER -p$MyPASS -P $Port -Bse 'show databases')" # 備份數據表 for db in $DBS do skipdb=-1 if [ "$SKIP" != "" ]; then for i in $SKIP do [ "$db" == "$i" ] && skipdb=1 || : done fi if [ "$skipdb" == "1" ] ; then FILE="$MBD/$db.sql" $MYSQLDUMP -h $MyHOST -u $MyUSER -p$MyPASS $db > $FILE fi done # 壓縮、歸檔,發送郵件通知 cd $DEST tar -cf $NOW.tar $NOW $GZIP -9 $NOW.tar echo "MySQL backup is completed! Backup name is $NOW.tar.gz" | mail -s "MySQL backup" $EMAIL rm -rf $NOW # 刪除歷史的冗餘備份文件 find $DEST -mtime +$DAYS -exec rm -f {} \;
將上面的代碼保存爲sqlbak.sh
-> 在sqlbak.sh
的同級目錄下,執行bash sqlbak.sh
。執行後將在目錄文件夾中生成以下文件:sql
2019-07-02_1562042395.tar.gz
即爲備份文件數據庫
備份通過了1次打包(tar),一次壓縮(gzip)。在使用時,先進行解壓,再解包。bash
# gzip -d 2019-07-02_1562042395.tar.gz # ls 2019-07-02_1562042395.tar # tar -zxvf 2019-07-02_1562042395.tar # ls x 2019-07-02_1562042395/ x 2019-07-02_1562042395/mysql/ x 2019-07-02_1562042395/mysql/schedule.sql x 2019-07-02_1562042395/mysql/measurement.sql
有了sql文件,恢復相信不成問題了吧。測試
爲sqlbak.sh
加入執行權限 chmod +x sqlbak.sh
code
設置定時任務% crontab -e
若是是初次使用,請加入如下信息:htm
SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin # Order of crontab fields # minute hour mday month wday command
而後,加入咱們須要執行的sh
腳本,以及設置執行的時間。假設我天天晚上4:38執行一次。
SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin # Order of crontab fields # minute hour mday month wday command 38 4 * * * /mengyunzhi/databak/sqlbak.sh
其中:/mengyunzhi/databak/sqlbak.sh
爲腳本的絕對路徑。
加入後,咱們須要使用如下命令測試本身的腳本在執行自動任務時是否出錯:env -i SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin HOME=/home/panjie LOGNAME=panjie /usr/home/dru/bin/mycustomscript.sh
HOME=/home/panjie LOGNAME=panjie
應該分別設置爲本身用戶的路徑及用戶名。
執行後若是發現錯誤信息,請參考修正。
https://www.freebsd.org/doc/h...
https://gist.github.com/NARKO...