Maison > Article > base de données > Analyse du problème de l'ouverture inexplicable du moniteur InnoDB
1. Problèmes
Récemment, il a été découvert qu'une grande quantité de journaux était générée dans le journal des erreurs d'une certaine base de données. Après analyse, cela était dû à la surveillance InnoDB de la base de données de manière inexplicable. activé puis n'a pas été éteint à temps, ce qui a affecté les enregistrements de journaux et les performances de la base de données. Vérifiez que les statuts innodb_status_output et innodb_status_output_locks sont tous deux activés.
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. Deux paramètres liés à la surveillance InnoDB
InnoDB dispose de quatre types de surveillance, dont StandardMonitor, LockMonitor, TablespaceMonitor et TableMonitor. Ces deux derniers types de surveillance ont été supprimés dans la version 5.7. Supprimer. Après la suppression, obtenez-le à partir de la table information_schema. Standard Monitor surveille les verrous de table, les verrous de ligne, les attentes de verrouillage de transaction, les attentes de sémaphore de thread, les demandes d'E/S de fichiers, les statistiques du pool de tampons, la purge du thread principal InnoDB et les activités de fusion de tampon de modification détenues par les transactions actives ; Lock Monitor fournit des informations de verrouillage supplémentaires ;
Le moniteur d'InnoDB n'est allumé qu'en cas de besoin. Cela entraînera une surcharge de performances. N'oubliez pas de désactiver la surveillance une fois l'observation terminée.
La méthode d'activation et de désactivation de StandardMonitor est la suivante. Le paramètre innodb_status_output est utilisé pour contrôler l'activation ou la désactivation du moniteur InnoDB. Cette méthode d'ouverture affichera les résultats de la surveillance dans le journal des erreurs MySQL dans le répertoire de données, et la sortie sera générée toutes les 15 secondes. C'est pourquoi une grande quantité de sortie se trouve dans le journal des erreurs.
set GLOBAL innodb_status_output=ON/OFF;
La méthode pour activer et désactiver le moniteur de verrouillage est la suivante. Notez que innodb_status_output doit être activé avant de l'allumer, il vous suffit de désactiver directement innodb_status_output_locks. innodb_status_output est désactivé, le moniteur standard sera également désactivé en même temps.
set GLOBALinnodb_status_output=ON; set GLOBAL innodb_status_output_locks=ON;
3. Analyse de la traçabilité du journal d'audit de sécurité
Envisagez de retracer l'opération d'ouverture inexplicable ci-dessus à travers le journal d'audit de sécurité. L'exemple d'analyse de champ du journal d'audit de sécurité est le suivant. :
<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>
Le journal ci-dessus est analysé selon le document du site officiel comme suit :
<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语句; 等等
Après avoir compris la signification des paramètres ci-dessus, vous pouvez saisir le mot-clé correspondant "innodb_status_output " et le contenu et le format du journal contextuel du journal d'audit de sécurité. Le contenu est le même que ci-dessus. Sur la base de l'analyse et de l'analyse ci-dessus, le compte qui a effectué cette opération inexplicable, l'heure de l'opération, l'adresse IP de la source de l'opération et d'autres les informations peuvent être auditées pour réaliser la traçabilité des problèmes anormaux.
4. Résumé
(1) Le moniteur d'InnoDB n'est allumé qu'en cas de besoin et fermé à temps une fois l'observation terminée, car cela affectera les performances de la base de données et sortie du journal ;
(2) Des opérations anormales similaires peuvent être retracées grâce aux journaux d'audit de sécurité. La rapidité d'enregistrement des journaux d'audit de sécurité doit être dans la plage efficace, et l'espace de stockage et la rapidité d'enregistrement doivent être équilibrés ; >
(3) Plus important En ce qui concerne les questions, vous devez faire attention au contrôle de la journalisation des journaux d'audit et au contrôle de la gestion des autorisations de compte. Ce qui précède est l'analyse du problème d'ouverture inexplicable du moniteur InnoDB. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !