主页 > 其他  > 

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

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

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


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

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

主页:👉【练小杰的CSDN】 “我是一只猫,快乐的星猫~~”

日志例题 主页:👉【[练小杰的CSDN]( 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 f)查看通用查询日志的文件目录,在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】😆 ℹ️欢迎各位在评论区踊跃讨论,积极提出问题,解决困惑!!! ⚠️若博客里的内容有问题,欢迎指正,我会及时修改!!

标签:

【Mysql】我在广州学Mysql系列——有关日志管理的示例由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【Mysql】我在广州学Mysql系列——有关日志管理的示例