Heim Datenbank MySQL-Tutorial MySQLinnodb_monitor及死锁检测

MySQLinnodb_monitor及死锁检测

Jun 07, 2016 pm 05:41 PM
死锁检测

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” 博客,请务必保留此出处

    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

    Heiße KI -Werkzeuge

    Undresser.AI Undress

    Undresser.AI Undress

    KI-gestützte App zum Erstellen realistischer Aktfotos

    AI Clothes Remover

    AI Clothes Remover

    Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

    Undress AI Tool

    Undress AI Tool

    Ausziehbilder kostenlos

    Clothoff.io

    Clothoff.io

    KI-Kleiderentferner

    AI Hentai Generator

    AI Hentai Generator

    Erstellen Sie kostenlos Ai Hentai.

    Heißer Artikel

    R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
    2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
    Repo: Wie man Teamkollegen wiederbelebt
    1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
    Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
    4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

    Heiße Werkzeuge

    Notepad++7.3.1

    Notepad++7.3.1

    Einfach zu bedienender und kostenloser Code-Editor

    SublimeText3 chinesische Version

    SublimeText3 chinesische Version

    Chinesische Version, sehr einfach zu bedienen

    Senden Sie Studio 13.0.1

    Senden Sie Studio 13.0.1

    Leistungsstarke integrierte PHP-Entwicklungsumgebung

    Dreamweaver CS6

    Dreamweaver CS6

    Visuelle Webentwicklungstools

    SublimeText3 Mac-Version

    SublimeText3 Mac-Version

    Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

    So lösen Sie das Problem der MySQL können die gemeinsame Bibliothek nicht öffnen So lösen Sie das Problem der MySQL können die gemeinsame Bibliothek nicht öffnen Mar 04, 2025 pm 04:01 PM

    Dieser Artikel befasst sich mit MySQLs Fehler "Die freigegebene Bibliotheksfehler". Das Problem ergibt sich aus der Unfähigkeit von MySQL, die erforderlichen gemeinsam genutzten Bibliotheken (.SO/.dll -Dateien) zu finden. Lösungen beinhalten die Überprüfung der Bibliotheksinstallation über das Paket des Systems m

    Reduzieren Sie die Verwendung des MySQL -Speichers im Docker Reduzieren Sie die Verwendung des MySQL -Speichers im Docker Mar 04, 2025 pm 03:52 PM

    In diesem Artikel wird die Optimierung von MySQL -Speicherverbrauch in Docker untersucht. Es werden Überwachungstechniken (Docker -Statistiken, Leistungsschema, externe Tools) und Konfigurationsstrategien erörtert. Dazu gehören Docker -Speichergrenzen, Tausch und CGroups neben

    Wie verändern Sie eine Tabelle in MySQL mit der Änderungstabelleanweisung? Wie verändern Sie eine Tabelle in MySQL mit der Änderungstabelleanweisung? Mar 19, 2025 pm 03:51 PM

    In dem Artikel werden mithilfe der Änderungstabelle von MySQL Tabellen, einschließlich Hinzufügen/Löschen von Spalten, Umbenennung von Tabellen/Spalten und Ändern der Spaltendatentypen, erläutert.

    Führen Sie MySQL in Linux aus (mit/ohne Podman -Container mit Phpmyadmin) Führen Sie MySQL in Linux aus (mit/ohne Podman -Container mit Phpmyadmin) Mar 04, 2025 pm 03:54 PM

    Dieser Artikel vergleicht die Installation von MySQL unter Linux direkt mit Podman -Containern mit/ohne phpmyadmin. Es beschreibt Installationsschritte für jede Methode und betont die Vorteile von Podman in Isolation, Portabilität und Reproduzierbarkeit, aber auch

    Was ist SQLite? Umfassende Übersicht Was ist SQLite? Umfassende Übersicht Mar 04, 2025 pm 03:55 PM

    Dieser Artikel bietet einen umfassenden Überblick über SQLite, eine in sich geschlossene, serverlose relationale Datenbank. Es beschreibt die Vorteile von SQLite (Einfachheit, Portabilität, Benutzerfreundlichkeit) und Nachteile (Parallelitätsbeschränkungen, Skalierbarkeitsprobleme). C

    Wie konfiguriere ich die SSL/TLS -Verschlüsselung für MySQL -Verbindungen? Wie konfiguriere ich die SSL/TLS -Verschlüsselung für MySQL -Verbindungen? Mar 18, 2025 pm 12:01 PM

    In Artikel werden die Konfiguration der SSL/TLS -Verschlüsselung für MySQL, einschließlich der Erzeugung und Überprüfung von Zertifikaten, erläutert. Das Hauptproblem ist die Verwendung der Sicherheitsauswirkungen von selbstsignierten Zertifikaten. [Charakterzahl: 159]

    Ausführen mehrerer MySQL-Versionen auf macOS: Eine Schritt-für-Schritt-Anleitung Ausführen mehrerer MySQL-Versionen auf macOS: Eine Schritt-für-Schritt-Anleitung Mar 04, 2025 pm 03:49 PM

    In diesem Handbuch wird die Installation und Verwaltung mehrerer MySQL -Versionen auf macOS mithilfe von Homebrew nachgewiesen. Es betont die Verwendung von Homebrew, um Installationen zu isolieren und Konflikte zu vermeiden. Der Artikel Details Installation, Starten/Stoppen von Diensten und Best PRA

    Was sind einige beliebte MySQL -GUI -Tools (z. B. MySQL Workbench, PhpMyAdmin)? Was sind einige beliebte MySQL -GUI -Tools (z. B. MySQL Workbench, PhpMyAdmin)? Mar 21, 2025 pm 06:28 PM

    In Artikel werden beliebte MySQL -GUI -Tools wie MySQL Workbench und PhpMyAdmin beschrieben, die ihre Funktionen und ihre Eignung für Anfänger und fortgeschrittene Benutzer vergleichen. [159 Charaktere]

    See all articles