찾다
데이터 베이스MySQL 튜토리얼 MySQLinnodb_monitor及死锁检测

showinnodbstatus只是其一种模式的直接展现,并且只能交互式开启,无法自动循环捕获信息innodb状态信息输出到err日志在如何库下都可以,推荐在test数据库下创建

show innodb status只是其一种模式的直接展现,并且只能交互式开启,无法自动循环捕获信息

 

innodb状态信息输出到 err 日志   在如何 库 下都可以,推荐在 test  数据库下创建如下表

mysql> create table innodb_monitor(a int) engine=innodb;
Query OK, 0 rows affected (0.09 sec)

mysql> create table innodb_tablespace_monitor(a int) engine=innodb;
Query OK, 0 rows affected (0.12 sec)

mysql> create table innodb_lock_monitor(a int) engine=innodb;
Query OK, 0 rows affected (0.13 sec)

mysql> create table innodb_table_monitor(a int) engine=innodb;
Query OK, 0 rows affected (0.09 sec)

创建表后innodb会每过15秒输出一次innodb状态信息到error log,通过删除表停止该monitor功能。


 

  • innodb_monitor:实际上就是show engine  innodb status\G
  • innodb_lock_monitor:和innodb_monitor差不多,香港服务器,但还会有更多关于锁的信息
  • innodb_table_monitor:系统中所有innodb的表的一些结构和内部信息输出
  • innodb_tablespace_monitor:输出的是tablespace的信息,注意该monitor输出的只是共享表空间的信息
  • 不包含独立表空间信息。

  • 对于死锁,香港服务器,MySQL并没有提供提供直接的变量来表示。对于5.5版本之后的performance_shcema可以提供锁的详细信息(但我们还是5.0呢),对于InnoDB自带的监控器 Innodb_lock_monitor 其输出总是输出到错误日志中,不方便进行对比。
  • 我监控采用的是zabbix,美国空间,采用agent 被动方式向zabbix server传送数据。脚本为shell,采用show innodb status 重定向

    核心代码:

    检测是否为新的死锁信息:

      New_deadlock() {
        new_line_tile=$(grep -n "LATEST DETECTED DEADLOCK" $1 | cut -d ':' -f 1)
        new_line_time=$(echo "$new_line_tile + 2" | bc)
        last_dect_time="$(head -n $new_line_time $1 | tail -n 1) ###截取死锁发生的时间戳
       
        [ -e $2 ] || cp $1 $2 #拿这次输出信息,和上次输出信息对比;如果是第一次检测,将这次输出信息cp作为上次输出信息
     
        old_line_tile=$(grep -n "LATEST DETECTED DEADLOCK" $2 | cut -d ':' -f 1)
     
        if [ -z $old_line_tile ];then
          echo 1
          mv $1  $2  ##判断上次输出是否为死锁,不是的话,直接返回1 表明最近一次是新的死锁。并将 此次输出信息重命名
          exit 1
      else      ##否则对比两次的时间戳
          old_line_time=$(echo "$old_line_tile + 2" | bc) 
          old_last_dect_time="$(head -n $old_line_time  $2 | tail -n 1)"
          mv $1  $2 #输出信息为下一次检测做准备
     
          if [ "$last_dect_time" = "$old_last_dect_time" ];then
            echo 0
          else
            cp $1 /tmp/$1_detail #已判定为死锁,需要保留作案信息
            echo 1
          fi
      fi
    }

    deadlock_check() {
      case $1 in
      1)
        $MYSQL_BIN -u $user -p$password  -S $SOC1 -e "show engine innodb status\G" > /tmp/innodb_status_1_$dthm
        have_dead_lock=$(grep -c  "LATEST DETECTED DEADLOCK" /tmp/innodb_status_1_$dthm)
        #判断这次检测是否包含死锁信息,包含的话 让 New_dead_lock 做死锁对比否则 返回0
        if [ $have_dead_lock -gt 0 ];then
          New_deadlock /tmp/innodb_status_1_$dthm /tmp/innodb_status_1_$dt
        else
          echo 0
        fi;;
      2)
        $MYSQL_BIN -u $user -p$password  -S $SOC2 -e "show engine innodb status\G" > /tmp/innodb_status_2_$dthm
        have_dead_lock=$(grep -c  "LATEST DETECTED DEADLOCK" /tmp/innodb_status_2_$dthm)
        if [ $have_dead_lock -gt 0 ];then
          New_deadlock /tmp/innodb_status_2_$dthm /tmp/innodb_status_2_$dt
        else
          echo 0
        fi;;
      3)
        $MYSQL_BIN -u $user -p$password  -S $SOC3 -e "show engine innodb status\G" > /tmp/innodb_status_3_$dthm
        have_dead_lock=$(grep -c  "LATEST DETECTED DEADLOCK" /tmp/innodb_status_3_$dthm)
        if [ $have_dead_lock -gt 0 ];then
          New_deadlock  /tmp/innodb_status_3_$dthm /tmp/innodb_status_3_$dt
        else
          echo 0
        fi;;
      4)
        $MYSQL_BIN -u $user -p$password  -S $SOC4 -e "show engine innodb status\G" > /tmp/innodb_status_4_$dthm
        have_dead_lock=$(grep -c  "LATEST DETECTED DEADLOCK" /tmp/innodb_status_4_$dthm)
        if [ $have_dead_lock -gt 0 ];then
          New_deadlock /tmp/innodb_status_4_$dthm /tmp/innodb_status_4_$dt
        else
          echo 0
        fi;;
      *)
        echo $ERROR
        exit 1;;
      esac
    }

    case  $1中的变量是针对不同机器上多个实例的情况,传送socket参数。

    本文出自 “My DBA life” 博客,请务必保留此出处

    성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    MySQL에서 뷰를 사용하는 한계는 무엇입니까?MySQL에서 뷰를 사용하는 한계는 무엇입니까?May 14, 2025 am 12:10 AM

    mysqlviewshavelimitations : 1) 그들은 upportallsqloperations, datamanipulation throughviewswithjoinsorbqueries를 제한하지 않습니다

    MySQL 데이터베이스 확보 : 사용자 추가 및 권한 부여MySQL 데이터베이스 확보 : 사용자 추가 및 권한 부여May 14, 2025 am 12:09 AM

    적절한 usermanagementInmysqliscrucialforenhancingsecurityandensuringfefficientDatabaseOperation.1) USECREATEUSERTOWDDUSERS,@'localHost'or@'%'.

    MySQL에서 사용할 수있는 트리거 수에 영향을 미치는 요인은 무엇입니까?MySQL에서 사용할 수있는 트리거 수에 영향을 미치는 요인은 무엇입니까?May 14, 2025 am 12:08 AM

    mysqldoes notimposeahardlimitontriggers, butpracticalfactorsdeteirefectiveuse : 1) ServerConfigurationimpactStriggerManagement; 2) 복잡한 트리거 스케일 스케일 사이드로드; 3) argertableSlowtriggerTriggerPerformance; 4) High ConconcercencyCancaUspriggerContention; 5) m

    MySQL : Blob을 저장하는 것이 안전합니까?MySQL : Blob을 저장하는 것이 안전합니까?May 14, 2025 am 12:07 AM

    예, It 'safetostoreBlobdatainmysql, butconsidertheStefactors : 1) StoragesPace : BlobScanconSumeSignificantspace, 잠재적으로 증가하는 CostsandSlownperformance

    MySQL : PHP 웹 인터페이스를 통해 사용자 추가MySQL : PHP 웹 인터페이스를 통해 사용자 추가May 14, 2025 am 12:04 AM

    PHP 웹 인터페이스를 통해 MySQL 사용자를 추가하면 MySQLI 확장 기능을 사용할 수 있습니다. 단계는 다음과 같습니다. 1. MySQL 데이터베이스에 연결하고 MySQLI 확장자를 사용하십시오. 2. 사용자를 생성하고 CreateUser 문을 사용하고 Password () 함수를 사용하여 암호를 암호화하십시오. 3. SQL 주입 방지 및 MySQLI_REAL_ESCAPE_STRING () 함수를 사용하여 사용자 입력을 처리하십시오. 4. 새 사용자에게 권한을 할당하고 보조금 명세서를 사용하십시오.

    MySQL : Blob 및 기타없는 SQL 스토리지, 차이점은 무엇입니까?MySQL : Blob 및 기타없는 SQL 스토리지, 차이점은 무엇입니까?May 13, 2025 am 12:14 AM

    mysql'sblobissuilableforstoringbinarydatawithinareldatabase, whilenosqloptionslikemongodb, redis, and cassandraofferflexible, scalablesolutionsforunstuctureddata.blobissimplerbutcanslowwownperformance를 사용하는 것들보업 betterscal randaysand

    MySQL 추가 사용자 : 구문, 옵션 및 보안 모범 사례MySQL 추가 사용자 : 구문, 옵션 및 보안 모범 사례May 13, 2025 am 12:12 AM

    TOADDAUSERINMYSQL, 사용 : CreateUser'UserName '@'host'IdentifiedBy'Password '; 여기서'showTodoitseciRely : 1) ChoosetheHostCareLyTocon trolaccess.2) setResourcelimitswithOptionslikemax_queries_per_hour.3) Usestrong, iriquepasswords.4) enforcessl/tlsconnectionswith

    MySQL : 문자열 데이터 유형을 피하는 방법 일반적인 실수?MySQL : 문자열 데이터 유형을 피하는 방법 일반적인 실수?May 13, 2025 am 12:09 AM

    toavoidcommonmistakeswithstringdatatypesinmysql, stroundStringTypenuances, chooseTherightType, andManageEncodingAndCollationSettingSefectively.1) usecharforfixed-lengthstrings, varcharvariable-length, andtext/blobforlargerdata.2) setcarcatter

    See all articles

    핫 AI 도구

    Undresser.AI Undress

    Undresser.AI Undress

    사실적인 누드 사진을 만들기 위한 AI 기반 앱

    AI Clothes Remover

    AI Clothes Remover

    사진에서 옷을 제거하는 온라인 AI 도구입니다.

    Undress AI Tool

    Undress AI Tool

    무료로 이미지를 벗다

    Clothoff.io

    Clothoff.io

    AI 옷 제거제

    Video Face Swap

    Video Face Swap

    완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

    뜨거운 도구

    스튜디오 13.0.1 보내기

    스튜디오 13.0.1 보내기

    강력한 PHP 통합 개발 환경

    SublimeText3 Linux 새 버전

    SublimeText3 Linux 새 버전

    SublimeText3 Linux 최신 버전

    Eclipse용 SAP NetWeaver 서버 어댑터

    Eclipse용 SAP NetWeaver 서버 어댑터

    Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

    MinGW - Windows용 미니멀리스트 GNU

    MinGW - Windows용 미니멀리스트 GNU

    이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

    DVWA

    DVWA

    DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는