ℹ️大家好,我是练小杰,今天星期四了,明天周五,美好的周末又要到了!!😆
本文是对MySQL日志管理内容进行练习,后续将添加更多相关知识噢,谢谢各位的支持🙏复习: 【Mysql 日志管理详解】
数据库专栏:👉【数据库专栏】【Mysql练习题】主页:👉【练小杰的CSDN】
“我是一只猫,快乐的星猫~~”
日志例题
- 主页:👉【[练小杰的CSDN](https://blog.csdn.net/weixin_55767624?spm=1011.2415.3001.5343)】
- "我是一只猫,快乐的星猫~~"
- 前言
- 查询日志的相关信息
- 详细说明
- 查看二进制日志文件个数及文件名
- 输出结果说明
- mysqlbinlog 命令查看日志
- 删除创建时间比某个文件早的日志
- 删除某个时间点之前的日志
- 恢复 mysql日志
- 记事本查看日志
- 查看MySQL错误日志
- 查看MySQL通用查询日志
- 删除MySQL通用查询日志
- 查看慢日志
前言
在练习本博客的示例之前,先看看👉【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通用查询日志,执行步骤如下:
- 查看
my.ini
(或者my.cnf)查看通用查询日志的文件目录,在my.ini
中通用查询日志配置如下。
[mysqld]
log
可以看到,配置文件中没有指定日志文件名和存储目录,通用查询日志文件存储在MySQL默认数据目录中。
-
在数据目录中找到日志文件所在目录
C:\Documents and Settings\All Users.WINDOWS\ Application Data\MySQL\MySQL Server 5.6\data\
,删除该后缀为.err
的文件。 -
通过
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】😆
ℹ️欢迎各位在评论区踊跃讨论,积极提出问题,解决困惑!!!
⚠️若博客里的内容有问题,欢迎指正,我会及时修改!!