Verwaltung von MySQL-Datenbankprotokollen
Vorwort
Der MySQL-Dienst verfügt auch über viele Arten von Protokollen. Protokolle sind an der Sicherung von Datenbankdaten, der Datenwiederherstellung, der Fehlerbehebung und der Serveroptimierung beteiligt. Als nächstes sprechen wir ausführlich über die Verwaltung von MySQL-Protokollen
Diese Umgebung basiert auf dem Centos 7.8-System zum Erstellen von MySQL-5.7.14 für eine
bestimmte Konstruktion. Weitere Informationen finden Sie unter Aufbau der MySQL-5.7.14-Umgebung
MySQL-Protokoll
Logdatei | Art der Informationen in der Protokolldatei |
---|---|
Fehlerprotokoll | Notieren Sie Probleme, die beim Starten, Ausführen oder Stoppen auftreten |
Abfrageprotokoll | Zeichnen Sie eingerichtete Clientverbindungen und ausgeführte Anweisungen auf |
Binäres Protokoll | Notieren Sie alle Änderungsdatenanweisungen. Wird hauptsächlich für die Replikation und die Wiederherstellung zu einem bestimmten Zeitpunkt verwendet |
Langsames Protokoll | Protokollieren Sie alle Abfragen, deren Ausführungszeit log_query_time Sekunden überschreitet, oder Abfragen, die keine Indizes verwenden dürfen |
Transaktionsprotokoll | Aufzeichnen von Protokollen, die während der Ausführung unterstützter Speicher-Engines wie InnoDB erstellt wurden |
1. Fehlerprotokoll
Das Fehlerprotokoll zeichnet hauptsächlich die folgenden Protokolltypen auf
- Informationen beim Starten und Herunterfahren des Servers
- Fehlermeldung während des Serverbetriebs
- Vom Ereignisplaner für eine bestimmte Zeit generierte Informationen
- Informationen, die generiert werden, wenn der Slave-Server-Prozess auf dem Slave-Server gestartet wird
Fehlerprotokolle verwalten
Das MySQL-Fehlerprotokoll wird standardmäßig im Verzeichnis datadir (Datenverzeichnis) gespeichert. Sie
können den Speicherpfad für die Protokolldatei jedoch auch manuell festlegen
1. Protokollieren Sie den Standardspeicherpfad
[root@mysql-yum ~]# vim /etc/my.cnf
log-error=/var/log/mysqld.log
[root@mysql-yum ~]# systemctl restart mysqld
mysql> show global variables like '%log_error%';
+---------------------+---------------------+
| Variable_name | Value |
+---------------------+---------------------+
| binlog_error_action | ABORT_SERVER |
| log_error | /var/log/mysqld.log |
| log_error_verbosity | 3 |
+---------------------+---------------------+
3 rows in set (0.00 sec)
2. Der Protokollspeicherpfad ist nicht angegeben
[root@mysql-yum ~]# vim /etc/my.cnf
log-error
[root@mysql-yum ~]# systemctl restart mysqld
mysql> show global variables like '%log_error%';
+---------------------+----------------------------+
| Variable_name | Value |
+---------------------+----------------------------+
| binlog_error_action | ABORT_SERVER |
| log_error | /var/run/mysqld/mysqld.err |
| log_error_verbosity | 3 |
+---------------------+----------------------------+
3 rows in set (0.00 sec)
3. Legen Sie den Speicherpfad fest
[root@mysql-yum ~]# vim /etc/my.cn
log-error=mysql-yum
[root@mysql-yum ~]# systemctl restart mysqld
mysql> show global variables like '%log_error%';
+---------------------+-----------------+
| Variable_name | Value |
+---------------------+-----------------+
| binlog_error_action | ABORT_SERVER |
| log_error | ./mysql-yum.err |
| log_error_verbosity | 3 |
+---------------------+-----------------+
3 rows in set (0.00 sec)
Hinweis: Das MySQL-Fehlerprotokoll wird im Datenverzeichnis gespeichert
2. Abfrageprotokoll
Abfrageprotokoll: Aufgezeichnete Clientverbindungen und ausgeführte Anweisungen aufzeichnen
Abfrageprotokoll öffnen
[root@mysql-yum ~]# vim /etc/my.cnf
general_log=on
[root@mysql-yum ~]# systemctl restart mysqld
Protokollstatus anzeigen
mysql> show global variables like '%general_log%';
+------------------+------------------------------+
| Variable_name | Value |
+------------------+------------------------------+
| general_log | ON |
| general_log_file | /var/lib/mysql/mysql-yum.log |
+------------------+------------------------------+
2 rows in set (0.00 sec)
mysql> show global variables like '%log_output%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output | FILE |
+---------------+-------+
1 row in set (0.00 sec)
# 执行查询语句
mysql> show databases;
mysql> select database();
Protokolldatensätze anzeigen
Drei, langsames Abfrageprotokoll
Langsames Protokoll: Zeichnen Sie alle Abfragen auf, deren Ausführungszeit log_query_time Sekunden überschreitet, oder Abfragen, die den Index nicht verwenden dürfen.
Funktion: Wird hauptsächlich für die Serveroptimierung verwendet
Stellen Sie den langsamen Start des Protokolls und die Abfragezeit ein
mysql> set global slow_query_log=on;
Query OK, 0 rows affected (0.22 sec)
mysql> set global long_query_time=3;
Query OK, 0 rows affected (0.00 sec)
# 查看日志设定
mysql> show global variables like '%slow_query_log%';
+---------------------+-----------------------------------+
| Variable_name | Value |
+---------------------+-----------------------------------+
| slow_query_log | ON |
| slow_query_log_file | /var/lib/mysql/mysql-yum-slow.log |
+---------------------+-----------------------------------+
2 rows in set (0.00 sec)
mysql> show global variables like '%long_query_time%';
+-----------------+----------+
| Variable_name | Value |
+-----------------+----------+
| long_query_time | 3.000000 |
+-----------------+----------+
1 row in set (0.00 sec)
Viertens das binäre Protokoll
Was ist das Binärprotokoll?
- Das Binärprotokoll enthält alle Anweisungen, die Daten aktualisiert haben oder möglicherweise Daten aktualisiert haben (z. B. ein LÖSCHEN, das keiner Zeile entspricht).
- Anweisungen werden in Form von "Ereignissen" gespeichert, die Datenänderungen beschreiben. Das Binärprotokoll enthält auch Informationen zur Ausführungszeit jeder Anweisung, die die Datenbank aktualisiert. Es enthält keine Anweisungen, die keine Daten ändern.
Die Rolle des Binärprotokolls?
- Der Hauptzweck des Binärprotokolls besteht darin, die Datenbank während der Wiederherstellung (Wiederherstellung zu einem bestimmten Zeitpunkt) so weit wie möglich zu aktualisieren, wenn die Datenbank fehlerhaft ist, da das Binärprotokoll alle nach der Sicherung durchgeführten Aktualisierungen enthält
- Das Binärprotokoll wird auch verwendet, um alle Anweisungen aufzuzeichnen, die an den Slave-Server auf dem Master-Replikationsserver gesendet werden
In der Produktionsumgebung verwenden wir häufig: Anweisungen ausführen und Ausführungsergebnisse aufzeichnen, Binärprotokolle aufzeichnen
Öffnen Sie log_bin
[root@mysql-yum ~]# systemctl restart mysqld
log_bin=mysql-bin
server_id=10
[root@mysql-yum ~]# systemctl restart mysqld
Zeigen Sie den Öffnungsstatus von log_bin an
mysql> show global variables like '%log_bin%';
+---------------------------------+--------------------------------+
| Variable_name | Value |
+---------------------------------+--------------------------------+
| log_bin | ON |
| log_bin_basename | /var/lib/mysql/mysql-bin |
| log_bin_index | /var/lib/mysql/mysql-bin.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
+---------------------------------+--------------------------------+
5 rows in set (0.00 sec)
# 查看二进制日志文件
mysql> show binary logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 154 |
+------------------+-----------+
1 row in set (0.00 sec)
# 查看二进制日志文件内容
mysql> mysql> show binlog events in 'mysql-bin.000001';
+------------------+-----+----------------+-----------+-------------+---------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+-----+----------------+-----------+-------------+---------------------------------------+
| mysql-bin.000001 | 4 | Format_desc | 10 | 123 | Server ver: 5.7.14-log, Binlog ver: 4 |
| mysql-bin.000001 | 123 | Previous_gtids | 10 | 154 | |
+------------------+-----+----------------+-----------+-------------+---------------------------------------+
2 rows in set (0.00 sec)
Log_bin-Inhalt anzeigen
[root@mysql-yum ~]# mysqlbinlog /var/lib/mysql/mysql-bin.000001
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#210129 11:06:37 server id 10 end_log_pos 123 CRC32 0x323c980c Start: binlog v 4, server v 5.7.14-log created 210129 11:06:37 at startup
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
BINLOG '
vXsTYA8KAAAAdwAAAHsAAAABAAQANS43LjE0LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAC9exNgEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA
AQyYPDI=
'/*!*/;
# at 123
#210129 11:06:37 server id 10 end_log_pos 154 CRC32 0xb271a2b4 Previous-GTIDs
# [empty]
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
Main: In der höheren Version von MySQL wurde die Anweisung in log_bin verschlüsselt und muss zum Anzeigen dekodiert werden
Wenn log_bin aktiviert ist, muss die server_id-Nummer angegeben werden, und dieser Wert ist im MySQL-Servercluster eindeutig
Löschen Sie log_bin
# 多西刷新log_bin
mysql> flush logs;
Query OK, 0 rows affected (0.00 sec)
# 查看所有的log_bin
mysql> show binary logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 201 |
| mysql-bin.000002 | 201 |
| mysql-bin.000003 | 201 |
| mysql-bin.000004 | 201 |
| mysql-bin.000005 | 154 |
+------------------+-----------+
5 rows in set (0.00 sec)
# 删除日志
---方法一:按照日志名字删除
mysql> purge binary logs to 'mysql-bin.000003';
Query OK, 0 rows affected (0.00 sec)
mysql> show binary logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000003 | 201 |
| mysql-bin.000004 | 201 |
| mysql-bin.000005 | 154 |
+------------------+-----------+
3 rows in set (0.00 sec)
---方法二:按照日志删除
mysql> purge binary logs before '2021-01-29 11:24:37';
Query OK, 0 rows affected (0.00 sec)
mysql> show binary logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000004 | 201 |
| mysql-bin.000005 | 154 |
+------------------+-----------+
2 rows in set (0.00 sec)
---方法三:删除所有日志,重新从第一编号开始,重新记录日志
mysql> reset master;
Query OK, 0 rows affected (0.00 sec)
mysql> show binary logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 154 |
+------------------+-----------+
1 row in set (0.01 sec)
Hinweis: Binäre Protokolldateien können nicht direkt gelöscht werden. Wenn Sie Befehle wie rm verwenden, um Protokolldateien direkt zu löschen, kann die Datenbank abstürzen.
1. Löschen mit Löschbefehl 2. Löschen
mit Zurücksetzen