作者:迷神
在企業的Liunx運維中,經常需要應用到各種shell腳本,比如MySQL數據庫備份Shell腳本和Mysql主從同步監控Shell腳本等等常用企業運維shell腳本。。下面分享兩例,希望對大家有幫助
Mysql數據庫備份腳本(完整備份+異地備份)
Mysql數據庫備份其實方法有很多,一般非超大量業務,可以使用 mysqldump 。Mysql數據庫備份可以采用在MYSQL從庫上執行全量備份+增量備份方式。注意,盡力選擇服務器使用少的凌晨的時候進行備份,如果有主從的話,需要在從庫中備份避免Mysql主庫備份的時候鎖表造成業務影響。
#!/bin/bash
set -e #錯誤時,便停止執行腳本
#數據庫名,可以添加多個
DATABASES=(
"data01"
"data02"
)
USER="root"
PASSword="123456"
MAIL="123456@163.com"
BACKUP_DIR=/data/backup
LOGFILE=/data/backup/data_backup.log
DATE=`date +%Y%m%d_%H%M`
cd $BACKUP_DIR
#寫入日記文件
echo "--------------------" >> $LOGFILE
echo "BACKUP DATE:" $(date +"%y-%m-%d %H:%M:%S") >> $LOGFILE
echo "-------------------" >> $LOGFILE
for DATABASE in ${DATABASES};do
/usr/local/mysql/bin/mysqldump -u$USER -p$PASSWORD --events -R --opt $DATABASE |gzip >${BACKUP_DIR}/${DATABASE}_${DATE}.sql.gz
if [ $? == 0 ];then
echo "$DATE--$DATABASE is backup succeed" >> $LOGFILE
else
echo "Database Backup Fail!" >> $LOGFILE
fi
done
#全部成功就同步到異地備份服務器
if [ $? == 0 ];then
/usr/bin/rsync -zrtopg --delete /data/backup/* root@192.168.10.10:/data/backup/ >/dev/null 2>&1
else
echo "Database Backup Fail!" >> $LOGFILE
#備份失敗后向管理者發送郵件提醒
mail -s "database Daily Backup Fail!" $MAIL
fi
#刪除30天以上的備份文件
find $BACKUP_DIR -type f -mtime +30 -name "*.gz" -exec rm -f {} ;
這里使用的是 rsync 進行同步,但是實際生產過程中,大家也可以使用 scp 或者 ftp之類的都可以的。根據實際需要進行處理
Mysql主從同步監控郵件報警腳本
監控MySQL主從同步是否正常運行。主要是看Slave機器的IO和SQL狀態都必須為YES,缺一不可,這里用到了多重條件判斷。加入到計劃任務,可以10分鐘一次,根據實際需要,如果有一個不是YES,那就可以通過郵件通知,實際的,大家也可以通過其他的方式,比如微信,短信等等。
#!/bin/bash
#查找mysql端口是否存在。
MYSQLPORT='netstat -na|grep "LISTEN"|grep "3306"|awk -F[:" "]+ '{print $4}''
MYSQLIP='ifconfig eth0|grep "inet addr" | awk -F[:" "]+ '{print $4}''
#mysql登陸查看從庫狀態
STATUS=$(/usr/local/mysql/bin/mysql -u dbuser -dbpwd123 -S /tmp/mysql.sock -e "show slave status\G" | grep -i "running")
IO_env='echo $STATUS | grep IO | awk ' {print $2}''
SQL_env='echo $STATUS | grep SQL | awk '{print $2}''
if [ "$MYSQLPORT" == "3306" ]
then
echo "mysql is running"
else
mail -s "warn!server: $MYSQLIP mysql is down" magedu@gmail.com
fi
if [ "$IO_env" = "Yes" -a "$SQL_env" = "Yes" ]
then
echo "Slave is running!"
else
echo "####### $date #########">> /data/log/check_mysql_slave.log
echo "Slave is not running!" >> /data/log/check_mysql_slave.log
mail -s "warn! $MySQLIP_replicate_error" magedu@gmail.com << /data/log/check_mysql_slave.log
fi
好了,就這么多,有問題歡迎留言進行交流哦。