引言
在 linux 做自動化其實(shí)非常方便,不會像windows一樣受制于系統(tǒng)的配置以及桌面環(huán)境。Linux 完全沒有這些負(fù)擔(dān),一個 Bash 就搞定了。
今天我們分享一段基本的 Bash 代碼,實(shí)現(xiàn) MySQL 數(shù)據(jù)庫備份,并通過網(wǎng)絡(luò)連接拷貝到遠(yuǎn)程服務(wù)器目錄。
代碼時(shí)間
首先聲明所使用的解釋器:
#!/bin/bash
聲明時(shí)間戳變量:
TIMESTAMP=$(date +"%F")
然后是 MYSQL 操作所使用到的變量:
MYSQL="/usr/bin/mysql"
MYSQL_USER="{mysql_user_with_DBAdmin_permits}"
MYSQL_PASSword="{mysql_user_password}"
MYSQLDUMP="/usr/bin/mysqldump"
我們指定了 mysql 應(yīng)用位置,以及 mysqldump 工具的絕對路徑。還有連接數(shù)據(jù)庫所使用的用戶名和密碼。
接著是 Samba 服務(wù)器的遠(yuǎn)程掛載目錄相關(guān)的變量:
SMB_BACKUP_DIR="/mnt/backup"
SMB_BACKUP_SOURCE="//{path_to_network_share}"
SMB_BACKUP_USER="{network_user_with_permits_to_share}"
SMB_BACKUP_PASSWORD="{network_user_password}"
指定了備份的目錄,以及原始目錄,還有訪問遠(yuǎn)程目錄所使用的用戶名和密碼。
為了方便操作,再使用一個完整的備份文件路徑變量:
BACKUP_DIR="$SMB_BACKUP_DIR/$TIMESTAMP"
下面是邏輯過程。
如果用于映射 Samba 遠(yuǎn)程目錄的備份目錄不存在,就創(chuàng)建:
[[ ! -d "$SMB_BACKUP_DIR" ]] && mkdir -p $SMB_BACKUP_DIR
然后,我們把遠(yuǎn)程通過網(wǎng)絡(luò)訪問的 Samba 服務(wù)器地址,掛載到本地目錄,同時(shí)傳遞訪問的用戶授權(quán)信息。
mount -t cifs "$SMB_BACKUP_SOURCE" "$SMB_BACKUP_DIR" -o username="$SMB_BACKUP_USER",password="$SMB_BACKUP_PASSWORD"
注意文件類型一定是 cifs (Common Internet File System) 類型,需要 linux kernel 內(nèi)核支持該文件系統(tǒng)。
如果需要備份的目錄不存在,就創(chuàng)建:
[[ ! -d "$BACKUP_DIR" ]] && mkdir -p $BACKUP_DIR
下面是數(shù)據(jù)庫的備份。
我們把 MySQL 的數(shù)據(jù)庫遍歷出來:
databases=`$MYSQL --user=$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema)"`
結(jié)果就是本地所有數(shù)據(jù)庫名稱,然后我們使用循環(huán),逐一導(dǎo)出數(shù)據(jù),并壓縮到 $BACKUP_DIR ,文件名稱是數(shù)據(jù)庫名 + gz 后綴。
for db in $databases; do
$MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db | gzip > "$BACKUP_DIR/$db.gz"
done
好了,不知道會有多久這個任務(wù)執(zhí)行完畢,就可以不用掛載遠(yuǎn)程 Samba 目錄了,因?yàn)檫@很耗費(fèi)網(wǎng)絡(luò)資源。
umount $SMB_BACKUP_DIR
寫在最后
本文我們通過一個簡單的需求,在 Linux 下實(shí)現(xiàn)了 MySQL 自動備份到指定目錄。同時(shí)掛載 Samba 遠(yuǎn)程目錄,將數(shù)據(jù)庫備份到異地。
邏輯很清晰,實(shí)現(xiàn)很簡單,也沒有復(fù)雜的過程,很適合自動化工作。
HAppy coding :_)
我是 @程序員小助手 ,持續(xù)分享編程知識,歡迎關(guān)注。