<返回更多

生产环境下shell脚本:Mysql数据库备份和Mysql主从同步监控

2020-12-18    
加入收藏


作者:迷神

在企业的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

好了,就这么多,有问题欢迎留言进行交流哦。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>