Bootstrap

【Mysql】我在广州学Mysql 系列—— 有关日志管理的示例

ℹ️大家好,我是练小杰,今天星期四了,明天周五,美好的周末又要到了!!😆


本文是对MySQL日志管理内容进行练习,后续将添加更多相关知识噢,谢谢各位的支持🙏

复习: 【Mysql 日志管理详解
数据库专栏:👉【数据库专栏】【Mysql练习题

主页:👉【练小杰的CSDN

“我是一只猫,快乐的星猫~~”

在这里插入图片描述

在这里插入图片描述

前言

在练习本博客的示例之前,先看看👉【Mysql 日志管理详解】的博客内容噢!!
俗话说,“温故而知新,可以为师矣!!”

查询日志的相关信息

  • 使用SHOW VARIABLES语句查询日志设置,显示所有以 “log_” 开头的系统变量及其当前值。执行命令如下:
 SHOW VARIABLES LIKE 'log_%' ;
  • 以下结果是基于 MySQL 8.x 版本,实际结果可能会因 MySQL 版本、安装方式以及配置文件的不同而有所变化。
+-------------------------------+------------------------------+
| Variable_name                 | Value                        |
+-------------------------------+------------------------------+
| log_bin                       | ON                           |
| log_bin_basename              | /var/lib/mysql/binlog        |
| log_bin_index                 | /var/lib/mysql/binlog.index  |
| log_bin_trust_function_creators | OFF                         |
| log_error                     | /var/log/mysql/error.log     |
| log_output                    | FILE                         |
| log_queries_not_using_indexes | OFF                          |
| log_slow_admin_statements     | OFF                          |
| log_slow_slave_statements     | OFF                          |
| log_statements_unsafe_for_binlog | ON                        |
| log_throttle_queries_not_using_indexes | 0                      |
| log_timestamps                | UTC                          |
| log_warnings                  | 2                            |
| log_slow_queries              | OFF                          |
| log_slave_updates             | ON                           |
| log_syslog_tag                |                              |
+-------------------------------+------------------------------+

详细说明

log_bin:

  • 值: ON
  • 表示二进制日志已启用。二进制日志用于主从复制和备份恢复。

log_bin_basename:

  • 值: /var/lib/mysql/binlog
  • 表明二进制日志文件的基本路径和前缀。

log_bin_index:

  • 值: /var/lib/mysql/binlog.index
  • 说明: 二进制日志索引文件的路径。

log_bin_trust_function_creators:

  • 值: OFF
  • 说明: 是否信任存储函数创建者,允许创建带有不确定性的函数。

log_error:

  • 值: /var/log/mysql/error.log
  • 说明: 错误日志文件的路径。

log_output:

  • 值: FILE
  • 说明: 日志输出的目标。FILE 表示日志输出到文件,TABLE 表示输出到数据库表,NONE 表示不输出。

log_queries_not_using_indexes:

  • 值: OFF
  • 说明: 是否记录未使用索引的查询。启用后可以用于性能优化。

log_slow_admin_statements:

  • 值: OFF
  • 说明: 是否记录由管理员执行的慢查询。

log_slow_slave_statements:

  • 值: OFF
  • 说明: 是否记录从服务器上的慢查询。

log_statements_unsafe_for_binlog:

  • 值: ON
  • 说明: 是否记录被认为对二进制日志不安全的语句。

log_throttle_queries_not_using_indexes:

  • 值: 0
  • 说明: 每分钟记录未使用索引的查询次数限制。0 表示无限制。

log_timestamps:

  • 值: UTC
  • 说明: 日志时间戳的格式。UTC 表示使用协调世界时。

log_warnings:

  • 值: 2
  • 说明是否记录警告信息。这里的 2 表示记录所有警告。

log_slow_queries:

  • 值: OFF
  • 说明: 是否启用慢查询日志。OFF 表示未启用。

log_slave_updates:

  • 值: ON
  • 说明: 是否记录从服务器上的更新操作。启用后可以用于主从复制。

log_syslog_tag:

  • 值: ()
  • 说明: 当日志输出到 syslog 时,用于标记日志消息的标签。

查看二进制日志文件个数及文件名

  • 使用SHOW BINARY LOGS将查看二进制日志文件个数及文件名,执行命令及结果如下:
 SHOW BINARY LOGS;
 +------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |    107374 |
| mysql-bin.000002 |    209715 |
| mysql-bin.000003 |    524288 |
| mysql-bin.000004 |    1048576|
| mysql-bin.000005 |    2097152|
| mysql-bin.000006 |    3145728|
+------------------+-----------+

输出结果说明

  • Log_name: 二进制日志文件的名称
  • File_size: 二进制日志文件的大小,以字节为单位。

mysqlbinlog 命令查看日志

  • 使用mysqlbinlog查看二进制日志,执行命令及结果如下:
C:\> mysqlbinlog D:/MySQL/log/binlog.000001
  • 输出示例:
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;

# at 4
#220101 10:00:00 server id 1  end_log_pos 123 CRC32 0x5d7f1a2b  Start: binlog v 4, server v 8.0.23 created 220101 10:00:00
# Warning: this binlog is either in use or was not closed properly.
BINLOG '
dZ7f1A2BAAAAAAAAAAAQAMAAAAAAAQAMAAAAAAAAAAAAAADwAAANoYW5rZXRfaWQAAw==
'/*!*/;
# at 123
#220101 10:00:05 server id 1  end_log_pos 256 CRC32 0x1a2b3c4d  Query   thread_id=10    exec_time=0    error_code=0
SET TIMESTAMP=1640990405/*!*/;
SET @@session.time_zone='SYSTEM'/*!*/;
BEGIN
/*!*/;
# at 256
#220101 10:00:05 server id 1  end_log_pos 389 CRC32 0x4d5e6f70  Table_map: `test_db`.`users` mapped to number 108
# at 389
#220101 10:00:05 server id 1  end_log_pos 512 CRC32 0x708192a3  Write_rows: table id 108 flags: STMT_END_F

BINLOG '
BZwX2g8BAAAAMwAAAKsBAAAAAGF1a2VfdG9fY29tcGxldGVfc3RyaW5nAAADAAAABHRlc3RfZGIA
dXNlcnMAAwMAAQAAAB1c2VyX2lkAAQAAAB1c2VyX25hbWUEAAQAAAB1c2VyX3VzZXIAAQAA
'/*!*/;
### INSERT INTO `test_db`.`users`
### SET
###   user_id=1
###   user_name='Alice'
###   user_user='alice'
# at 512
#220101 10:00:05 server id 1  end_log_pos 584 CRC32 0x8192a3b4  Xid = 12345
COMMIT/*!*/;
# at 584
#220101 10:00:10 server id 1  end_log_pos 700 CRC32 0x5a6b7c8d  Query   thread_id=10    exec_time=0    error_code=0
SET TIMESTAMP=1640990410/*!*/;
SET @@session.time_zone='SYSTEM'/*!*/;
BEGIN
/*!*/;
# at 700
#220101 10:00:10 server id 1  end_log_pos 833 CRC32 0x6b7c8d9e  Table_map: `test_db`.`users` mapped to number 108
# at 833
#220101 10:00:10 server id 1  end_log_pos 956 CRC32 0x7c8d9e0f  Write_rows: table id 108 flags: STMT_END_F

BINLOG '
BZwX2g8BAAAAMwAAALcBAAAAAGF1a2VfdG9fY29tcGxldGVfc3RyaW5nAAADAAAABHRlc3RfZGIA
dXNlcnMAAwMAAQAAAB1c2VyX2lkAAQAAAB1c2VyX25hbWUEAAQAAAB1c2VyX3VzZXIAAQAA
'/*!*/;
### INSERT INTO `test_db`.`users`
### SET
###   user_id=2
###   user_name='Bob'
###   user_user='bob'
# at 956
#220101 10:00:10 server id 1  end_log_pos 1028 CRC32 0x8d9e0f1a  Xid = 12346
COMMIT/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

删除创建时间比某个文件早的日志

我们使用命令PURGE MASTER LOGS删除创建时间比binlog.000003早的所有日志文件。 首先,为了演示语句操作过程,准备多个日志文件,我们可以对MySQL服务进行多次重新启动。

  • 假设这里有10个日志文件,输出结果与上面类似,这里不再重复
 SHOW binary logs;
 +------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| binlog.000001    |    107374 |
| binlog.000002    |    209715 |
| binlog.000003    |    524288 |
| binlog.000004    |    1048576|
| binlog.000005    |    2097152|
| binlog.000006    |    3145728|
| binlog.000007    |    4194304|
| binlog.000008    |    5242880|
| binlog.000009    |    6291456|
| binlog.000010    |    7340032|
+------------------+-----------+

  • 执行删除命令如下:
 PURGE MASTER LOGS TO "binlog.000003";
Query OK, 0 rows affected (0.07 sec)
  • 执行完成后,再使用SHOW binary logs语句查看二进制日志
 SHOW binary logs;
 +------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| binlog.000003    |    524288 |
| binlog.000004    |    1048576|
| binlog.000005    |    2097152|
| binlog.000006    |    3145728|
| binlog.000007    |    4194304|
| binlog.000008    |    5242880|
| binlog.000009    |    6291456|
| binlog.000010    |    7340032|
+------------------+-----------+

删除某个时间点之前的日志

  • 使用PURGE MASTER LOGS删除2025年2月20日前创建的所有日志文件,执行命令及结果如下:
 PURGE MASTER LOGS BEFORE '20250220';
Query OK, 0 rows affected (0.05 sec)

语句执行之后,2025年2月20日之前创建的日志文件都将被删除,但2025年2月20日的日志会被保留(我们还可以根据自己系统中创建日志的时间修改命令参数)。

  • 再使用mysqlbinlog 查看指定日志的创建时间,如前面例子所示,查询命令如下:
C:\> mysqlbinlog D:\MySQL\log\mysql-bin.000001

恢复 mysql日志

  • 使用mysqlbinlog 恢复MySQL数据库到2025年2月20日 15:27:48时的状态,执行命令及结果如下:
mysqlbinlog --stop-date="2025-02-20 15:27:48" D:\MySQL\log\binlog\binlog.000008 | mysql –uuser –ppass

250220

记事本查看日志

查看MySQL错误日志

使用记事本查看MySQL错误日志,首先,通过SHOW VARIABLES语句查询错误日志的存储路径和文件名。

 SHOW VARIABLES LIKE 'log_error';

可以看到错误的文件是Kevin.err,位于MySQL默认的数据目录下,使用记事本打开该文件,可以看到MySQL的错误日志:

250220 16:45:14 [Note] Plugin 'FEDERATED' is disabled.
250220 16:45:14 InnoDB: The InnoDB memory heap is disabled
250220 16:45:14 InnoDB: Mutexes and rw_locks use Windows interlocked functions
250220 16:45:14 InnoDB: Compressed tables use zlib 1.2.3
250220 16:45:15 InnoDB: Initializing buffer pool, size = 46.0M
250220 16:45:15 InnoDB: Completed initialization of buffer pool
250220 16:45:15 InnoDB: highest supported file format is Barracuda.
250220 16:45:15 InnoDB: Waiting for the background threads to start
250220 16:45:16 InnoDB: 1.1.7 started; log sequence number 1679264
250220 16:45:16 [Note] Event Scheduler: Loaded 0 events
250220 16:45:16 [Note] C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld: ready for connections.
Version: '5.6.10-log'  socket: ''  port: 3306  MySQL Community Server (GPL)

这里只是错误日志文件的一部分,其中记载了系统的一些错误。

查看MySQL通用查询日志

我们使用记事本打开D:\mysql-5.6.10-win32\data\目录下的my-PC.log,可以看到如下内容:

C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld, Version: 5.6.10-log (MySQL Community Server 
(GPL)). started with:
TCP Port: 3306, Named Pipe: (null)
Time                 Id Command    Argument
250220 17:24:32        1 Connect      root@localhost on 
    1 Query        select @@version_comment limit 1
250220 17:24:36        1 Query        SELECT DATABASE()
    1 Init DB        test
250220 17:24:53        1 Query         SELECT * FROM fruits
250220 17:24:55       1 Quit 

删除MySQL通用查询日志

  • 直接删除MySQL通用查询日志,执行步骤如下:
  1. 查看my.ini(或者my.cnf)查看通用查询日志的文件目录,在my.ini中通用查询日志配置如下。
[mysqld]
log

可以看到,配置文件中没有指定日志文件名和存储目录,通用查询日志文件存储在MySQL默认数据目录中。

  1. 在数据目录中找到日志文件所在目录C:\Documents and Settings\All Users.WINDOWS\ Application Data\MySQL\MySQL Server 5.6\data\,删除该后缀为.err的文件。

  2. 通过mysqladmin –flush logs命令建立新的日志文件,执行命令如下。

    C:\> mysqladmin –u root –p flush-logs
    

执行完命令可看到,C:\Documents and Settings\All Users.WINDOWS\Application Data\MySQL\MySQL Server 5.6\data\目录中已经建立了新的日志文件Kevin.log

查看慢日志

查看慢查询日志,我们可以使用文本编辑器打开数据目录下的Kevin-slow.log文件,文件部分如下:

C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld, Version: 5.6.10-log (MySQL Community Server 
(GPL)). started with:
TCP Port: 3306, Named Pipe: (null)
Time Id Command Argument
# Time: 250220 17:50:35
# User@Host: root[root] @ localhost [127.0.0.1]
# Query_time: 136.500000  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0
SET timestamp=1314697835;
SELECT BENCHMARK(100000000, PASSWORD('newpwd'));

本文有关Mysql数据库的日志相关示例已讲完了,明天再见啦👋
主页:【练小杰的CSDN】😆
ℹ️欢迎各位在评论区踊跃讨论,积极提出问题,解决困惑!!!
⚠️若博客里的内容有问题,欢迎指正,我会及时修改!!

;