MySQL:监控慢日志、错误日志、备份数据库的脚本

不念不忘少年蓝@ 2022-07-21 01:25 280阅读 0赞

1、监控慢日志、错误日志、备份数据库的脚本

mon_mysql_log.sh(点view plain 查看正确的脚本内容,ERROR、Warning有变形)

  1. #!/bin/bash
  2. user=root
  3. passwd=''
  4. host=''
  5. port=3306
  6. mysql_bin='/data/mysql/bin'
  7. bak_dir='/data/mysqlbak'
  8. my_cnf='/data/mysq/etc/my.cnf'
  9. slowlog_file='/data/mysql/log/slow.log'
  10. errlog_file='/var/log/mysqld.log'
  11. #lepus的db_servers_mysql表的ID键值
  12. lepus_server_id=274
  13. #创建监控日志文件
  14. InfoFile=/tmp/mon_mysql.log
  15. [ ! -f ${InfoFile} ] && touch ${InfoFile}
  16. cat ${InfoFile} >> /tmp/mon_mysql_history.log
  17. cat /dev/null > ${InfoFile}
  18. echo " " | tee -a $InfoFile
  19. echo "----------------"`date +"%Y-%m-%d %H:%M:%S"`"--------------------" | tee -a $InfoFile
  20. echo "------------------------"BEGIN"--------------------------" |tee -a $InfoFile
  21. now=`date +"%Y%m%d"`
  22. del_time=`date -d '7 day ago' +"%Y%m%d"`
  23. #创建备份目录
  24. check_dir () {
  25. [ ! -d ${bak_dir}/db_bak/ ] && mkdir -p ${bak_dir}/db_bak/
  26. [ ! -d ${bak_dir}/errlog_bak/ ] && mkdir -p ${bak_dir}/errlog_bak/
  27. [ ! -d ${bak_dir}/slowlog_bak/ ] && mkdir -p ${bak_dir}/slowlog_bak/
  28. }
  29. #备份慢日志
  30. bak_slowlog () {
  31. cat ${slowlog_file} >> ${bak_dir}/slowlog_bak/${now}_${port}.slow
  32. cat /dev/null > ${slowlog_file}
  33. echo "[ `date +"%Y-%m-%d %H:%M:%S"` ] slowlog backup is ok!"| tee -a $InfoFile
  34. }
  35. #基于lepus慢日志入库
  36. slowquery () {
  37. /usr/local/bin/pt-query-digest --user=lepus --password=xxx --port=3306 --review h=192.168.x.x,D=lepus,t=mysql_slow_query_review --history h=192.168.x.x,D=lepus,t=mysql_slow_query_review_history --no-report --limit=100% --filter="\$event->{add_column} = length(\$event->{arg}) and\$event->{serverid}=$lepus_server_id " ${bak_dir}/slowlog_bak/${now}_${port}.slow >/tmp/lepus_slowquery.log
  38. echo "[ `date +"%Y-%m-%d %H:%M:%S"` ] lepus slowquery is ok!"| tee -a $InfoFile
  39. }
  40. #备份error日志
  41. mon_errlog () {
  42. [ ! -f ${bak_dir}/errlog_bak/bak_error_${port}.log ] && cat ${errlog_file} > ${bak_dir}/errlog_bak/bak_error_${port}.log && > ${errlog_file}
  43. err_row=`cat ${errlog_file} | egrep "\[ERROR\]|\[Warning\]" | grep -v 'Aborted connection' | grep -v 'skip-name-resolve mode' | wc -l`
  44. if [ ${err_row} -gt 0 ];then
  45. cat ${errlog_file} >> ${bak_dir}/errlog_bak/bak_error_${port}.log
  46. echo "[ `date +"%Y-%m-%d %H:%M:%S"` ] [ERROR] MySQL errorlog is not empty!" | tee -a $InfoFile
  47. > ${errlog_file}
  48. else
  49. echo "[ `date +"%Y-%m-%d %H:%M:%S"` ] MySQL errorlog is OK!" | tee -a $InfoFile
  50. fi
  51. }
  52. #备份数据库
  53. bak_db() {
  54. /usr/bin/innobackupex-1.5.1 --defaults-file=${my_cnf} --user=${user} --password=${passwd} --host=${host} --port=${port} --slave-info --no-timestamp ${bak_dir}/db_bak/${now}_${port} 2>${bak_dir}/db_bak/${now}_${port}.log
  55. }
  56. #检查备份是否OK
  57. check_db_bak () {
  58. status=`sed -n '$p' ${bak_dir}/db_bak/${now}_${port}.log|grep "completed OK"|wc -l`
  59. if [ "$status" -ne 1 ]
  60. then
  61. echo "[ `date +"%Y-%m-%d %H:%M:%S"` ] [ERROR] MySQL db backup is error!" | tee -a $InfoFile
  62. else
  63. echo "[ `date +"%Y-%m-%d %H:%M:%S"` ] MySQL db backup is OK!" | tee -a $InfoFile
  64. fi
  65. }
  66. #删除过期备份
  67. del_bak () {
  68. rm -rf /data/mysqlbak/db_bak/${del_time}_${port}
  69. rm -rf /data/mysqlbak/db_bak/${del_time}_${port}.log
  70. echo "[ `date +"%Y-%m-%d %H:%M:%S"` ] MySQL del backup is OK! " | tee -a $InfoFile
  71. echo "----------------"`date +"%Y-%m-%d %H:%M:%S"`"--------------------" | tee -a $InfoFile
  72. echo "-------------------------"END"---------------------------" |tee -a $InfoFile
  73. }
  74. check_dir
  75. bak_slowlog
  76. slowquery
  77. mon_errlog
  78. bak_db
  79. check_db_bak
  80. del_bak

2、检查错误信息及报警

check_mysql_log.sh

  1. #!/bin/bash
  2. ip=`/sbin/ifconfig | grep "192.168.1.255" | awk -F "[: ]+" '{print $4}'`
  3. lognum=`cat /tmp/mon_mysql.log | grep "\[ERROR\]" |wc -l`
  4. call(){
  5. for phone in 186xxxx
  6. do
  7. curl "短信接口"
  8. done
  9. }
  10. check_status () {
  11. [ ${lognum} -gt 0 ] && call
  12. }
  13. bak_tmp_log () {
  14. cat /tmp/mon_mysql.log >> /tmp/mon_mysql_history.log
  15. cat /dev/null > /tmp/mon_mysql.log
  16. }
  17. check_status
  18. bak_tmp_log

发表评论

表情:
评论列表 (有 0 条评论,280人围观)

还没有评论,来说两句吧...

相关阅读