Gestion des journaux de base de données MySQL
Préface
Le service MySQL propose également de nombreux types de journaux. Les journaux sont impliqués dans la sauvegarde des données de la base de données, la récupération des données, le dépannage et le réglage du serveur. Ensuite, nous parlons de la gestion des journaux MySQL en détail
Cet environnement est basé sur le système Centos 7.8 pour construire MySQL-5.7.14 pour
une construction spécifique, veuillez vous référer à la construction de l'environnement MySQL-5.7.14
Journal MySQL
Fichier journal | Type d'informations dans le fichier journal |
---|---|
Journal des erreurs | Enregistrer les problèmes qui surviennent lors du démarrage, de l'exécution ou de l'arrêt |
Journal des requêtes | Enregistrer les connexions client établies et les instructions exécutées |
Journal binaire | Enregistrez toutes les déclarations de modification des données. Principalement utilisé pour la réplication et la récupération à un moment donné |
Journal lent | Consigner toutes les requêtes dont le temps d'exécution dépasse log_query_time secondes ou les requêtes qui ne doivent pas utiliser d'index |
Journal des transactions | Enregistrer les journaux générés lors de l'exécution des moteurs de stockage pris en charge tels que InnoDB |
1. Journal des erreurs
Le journal des erreurs enregistre principalement les types de journaux suivants
- Informations lors du démarrage et de l'arrêt du serveur
- Message d'erreur pendant le fonctionnement du serveur
- Informations générées par le planificateur d'événements pendant un certain temps
- Informations générées lors du démarrage du processus du serveur esclave sur le serveur esclave
Gérer les journaux d'erreurs
Le journal des erreurs MySQL est stocké dans le répertoire datadir (répertoire de données) par défaut,
mais nous pouvons également définir manuellement le chemin de stockage du fichier journal
1. Enregistrer le chemin du chemin de stockage par défaut
[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. Le chemin de stockage du journal n'est pas spécifié
[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. Définissez le chemin de stockage
[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)
Remarque: le journal des erreurs MySQL est stocké dans le répertoire de données
2. Journal des requêtes
Journal des requêtes: enregistrez les connexions client établies et les instructions exécutées
Ouvrir le journal des requêtes
[root@mysql-yum ~]# vim /etc/my.cnf
general_log=on
[root@mysql-yum ~]# systemctl restart mysqld
Afficher l'état du journal
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();
Afficher les enregistrements du journal
Trois journaux de requêtes lentes
Journal lent: enregistre toutes les requêtes dont le temps d'exécution dépasse log_query_time secondes ou les requêtes qui ne doivent pas utiliser l'index
Fonction: principalement utilisée pour le réglage du serveur
Définir le démarrage lent du journal et l'heure de la requête
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)
Quatrièmement, le journal binaire
Quel est le journal binaire?
- Le journal binaire contient toutes les instructions qui ont des données mises à jour ou qui ont des données potentiellement mises à jour (par exemple, un DELETE qui ne correspond à aucune ligne)
- Les instructions sont stockées sous la forme d '"événements", qui décrivent les changements de données. Le journal binaire contient également des informations sur l'heure d'exécution de chaque instruction qui met à jour la base de données. Il ne contient pas d'instructions qui ne modifient aucune donnée.
Le rôle du journal binaire?
- Le but principal du journal binaire est de mettre à jour la base de données autant que possible lors de la restauration (récupération à un moment donné) lorsque la base de données est défectueuse, car le journal binaire contient toutes les mises à jour effectuées après la sauvegarde
- Le journal binaire est également utilisé pour enregistrer toutes les instructions qui seront envoyées au serveur esclave sur le serveur de réplication maître
Dans l'environnement de production, nous adoptons souvent: exécuter des instructions et enregistrer les résultats d'exécution, enregistrer les journaux binaires
Ouvrez log_bin
[root@mysql-yum ~]# systemctl restart mysqld
log_bin=mysql-bin
server_id=10
[root@mysql-yum ~]# systemctl restart mysqld
Afficher le statut ouvert de log_bin
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)
Afficher le contenu de log_bin
[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: La version supérieure de MySQL, l'instruction dans log_bin a été chiffrée, et elle doit être décodée pour afficher
Lorsque log_bin est activé, le numéro server_id doit être spécifié, et cette valeur est unique dans le cluster de serveurs MySQL
Supprimer 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)
Remarque: les fichiers journaux binaires ne peuvent pas être supprimés directement. Si vous utilisez des commandes telles que rm pour supprimer directement les fichiers journaux, la base de données peut se bloquer.
1. Supprimer avec la commande de purge 2. Supprimer
avec la commande de réinitialisation