MySQL-Fallkampf-MySQL-Datenbankprotokollverwaltung

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
Fügen Sie hier eine Bildbeschreibung ein

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

Ich denke du magst

Origin blog.csdn.net/XY0918ZWQ/article/details/113364127
Empfohlen
Rangfolge