1. Probleme
Kürzlich wurde festgestellt, dass eine große Menge an Protokollausgaben im Fehlerprotokoll einer bestimmten Bibliothek generiert wurde. Nach der Analyse wurde dies durch eine unerklärliche Störung der InnoDB-Überwachung verursacht aktiviert und dann nicht rechtzeitig ausgeschaltet, was sich auf die Protokolldatensätze und die Datenbankleistung auswirkte. Überprüfen Sie, ob die Status „innodb_status_output“ und „innodb_status_output_locks“ beide EIN sind.
mysql> show variables like"innodb_status_output%"; +----------------------------+-------+ | Variable_name | Value | +----------------------------+-------+ | innodb_status_output | ON | | innodb_status_output_locks| ON | +----------------------------+-------+ 2 rows in set (0.00 sec)
2. Zwei Parameter im Zusammenhang mit der InnoDB-Überwachung
InnoDB verfügt über vier Überwachungstypen, darunter StandardMonitor, LockMonitor, TablespaceMonitor und TableMonitor. Die beiden letztgenannten Überwachungstypen wurden in Version 5.7 entfernt Entfernen. Rufen Sie es nach dem Entfernen aus der Tabelle „information_schema“ ab. Standard Monitor überwacht Tabellensperren, Zeilensperren, Wartezeiten auf Transaktionssperren, Thread-Semaphor-Wartezeiten, Datei-E/A-Anforderungen, Pufferpoolstatistiken, InnoDB-Hauptthread-Bereinigungs- und Änderungspuffer-Zusammenführungsaktivitäten, die von aktiven Transaktionen gehalten werden. Lock Monitor bietet zusätzliche Sperrinformationen.
Der Monitor von InnoDB wird nur bei Bedarf eingeschaltet. Dies führt zu Leistungseinbußen. Denken Sie daran, die Überwachung nach Abschluss der Beobachtung auszuschalten.
Die Methode zum Ein- und Ausschalten von StandardMonitor ist wie folgt. Der Parameter innodb_status_output wird verwendet, um das Ein- und Ausschalten des InnoDB-Monitors zu steuern. Diese Öffnungsmethode gibt die Überwachungsergebnisse im MySQL-Fehlerprotokoll im Datenverzeichnis aus und generiert alle 15 Sekunden eine große Ausgabemenge.
set GLOBAL innodb_status_output=ON/OFF;
Die Methode zum Ein- und Ausschalten des Sperrmonitors ist wie folgt: Wenn Sie ihn ausschalten, müssen Sie innodb_status_output_locks nur direkt ausschalten Wenn innodb_status_output ausgeschaltet ist, wird auch der Standardmonitor ausgeschaltet.
set GLOBALinnodb_status_output=ON; set GLOBAL innodb_status_output_locks=ON;
3. Analyse der Rückverfolgbarkeit des Sicherheitsüberwachungsprotokolls
Erwägen Sie, den oben genannten unerklärlichen Öffnungsvorgang anhand des Sicherheitsüberwachungsprotokolls zu verfolgen :
<AUDIT_RECORD> <NAME>Query</NAME> <RECORD>12050XXXXX_2016-08-08T08:07:52</RECORD> <TIMESTAMP>2016-09-17T06:10:40 UTC</TIMESTAMP> <COMMAND_CLASS>select</COMMAND_CLASS> <CONNECTION_ID>1618XXX</CONNECTION_ID> <STATUS>0</STATUS> <SQLTEXT>select 1</SQLTEXT> <USER>XX[XX]@ [172.XX.XX.XXX]</USER> <HOST></HOST> <OS_USER></OS_USER> <IP>172.XX.XX.XXX </IP> </AUDIT_RECORD>
Das obige Protokoll wird gemäß dem offiziellen Website-Dokument wie folgt analysiert:
<NAME>A string representing the typeof instruction that generated the audit event, such as a command that theserver received from a client.操作类型; <RECORD_ID>A unique identifier forthe audit record. The value is composed from a sequence number and timestamp,in the format SEQ_TIMESTAMP. The sequence number is initialized to the size ofthe audit log file at the time the audit log plugin opens it and increments by1 for each record logged. The timestamp is a UTC value in yyyy-mm-ddThh:mm:ss formatindicating the time when the audit log plugin opened the file.记录ID; <TIMESTAMP>The date and time that theaudit event was generated. For example, the event corresponding to execution ofan SQL statement received from a client has a <TIMESTAMP> value occurringafter the statement finishes, not when it is received. The value has the formatyyyy-mm-ddThh:mm:ss UTC (with T, no decimals). The format includes a time zonespecifier at the end. The time zone is always UTC.语句执行完成的时间; <COMMAND_CLASS>A string thatindicates the type of action performed.操作指令类型; <CONNECTION_ID>An unsigned integerrepresenting the client connection identifier. This is the same as theCONNECTION_ID()function value within the session;会话连接ID; <STATUS>An unsigned integerrepresenting the command status: 0 for success, nonzero if an error occurred.This is the same as the value of the mysql_errno()C API function.0代表成功,非0代表对应错误码; <SQLTEXT>A string representing thetext of an SQL statement. The value can be empty. Long values may be truncated.This element appears only if the <NAME> value is Query or Execute.执行的SQL语句; 等等
Nachdem Sie die Bedeutung der oben genannten Parameter verstanden haben, können Sie das entsprechende Schlüsselwort „innodb_status_output“ abrufen " und sein kontextbezogener Protokollinhalt und -format aus dem Sicherheitsüberwachungsprotokoll. Der Inhalt ist derselbe wie oben. Basierend auf der obigen Analyse können das Konto, das diesen unerklärlichen Vorgang ausgeführt hat, die Vorgangszeit, die IP-Adresse der Vorgangsquelle und andere Informationen ermittelt werden überprüft werden, um die Rückverfolgbarkeit abnormaler Probleme zu gewährleisten.
4. Zusammenfassung
(1) Der Monitor von InnoDB wird nur bei Bedarf eingeschaltet und rechtzeitig nach Abschluss der Beobachtung geschlossen, da dies Auswirkungen auf die Datenbankleistung hat Protokollausgabe;
(2) Ähnliche anormale Vorgänge können durch Sicherheitsüberwachungsprotokolle verfolgt werden. Die Aktualität der Aufzeichnung muss innerhalb des effektiven Bereichs liegen und der Speicherplatz und die Aktualität der Aufzeichnung müssen ausgeglichen sein >
(3) Noch wichtiger In dieser Hinsicht müssen Sie auf die Kontrolle der Audit-Protokollprotokollierung und die Kontrolle der Kontoberechtigungsverwaltung achten. Das Obige ist die Analyse des Problems, dass der InnoDB-Monitor unerklärlicherweise geöffnet wird. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).