MySQL日志

MySQL的日志记录了MySQL的日常操作和错误信息,通过这些日志我们可以知道MySQL内部发生的事情,可以为MySQL的优化和管理提供必要的信息。

MySQL的日志主要有:二进制日志、通用查询日志、慢查询日志、错误日志、事务日志等。

二进制日志

二进制日志用来记录操作MySQL数据库中的写入性操作(包括增删改,但不包括查询),操作语句以事件的形式进行保存,描述数据更改。

二进制的主要作用有两个: 1. 复制,配置了主从复制的时候,主服务器会将其产生的二进制日志发送到slave端,slave端会利用这个二进制日志的信息在本地重做,实现主从同步。 2. 恢复,因为二进制日志包含了备份以后的所有更新,因此可以用于最大限度地恢复数据库。因此,建议二进制日志单独保存到一个磁盘上,以便磁盘损坏以后进行数据恢复。   

查看二进制日志是否打开

二进制可以通过show variables like 'log_bin';查看是否已经打开。

下面的返回表示是关闭的:

mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | OFF   |
+---------------+-------+

Windows下配置MySQL二进制日志

  1. 首先确保MySQL Server已经安装,笔者是在Windows10操作系统安装的 MySQL5.7 64位的服务,MySQL服务名为:MySQL57

安装成功以后,查看MySQL版本:

C:>mysql -V
mysql  Ver 14.14 Distrib 5.7.17, for Win64 (x86_64)

  1. 打开C:ProgramDataMySQLMySQL Server 5.7(注意目录不要搞错)目录下的my.ini文件,并在[mysqld]配置组下面加入如下配置:
# MySQL二进制日志配置
# bin log输出的目录及文件
log-bin="C:/1workspace/develop/db/mysql/mysql57/logs/binlog"
# bin log清理时间
expire_logs_days=7
# 每个bin log文件大小
max_binlog_size=200m
#binlog缓存大小
binlog_cache_size=10m
#最大binlog缓存大小
max_binlog_cache_size=20m

  1. 通过 管理员模式 打开cmd,重启MySQL服务:
C:>net stop MySQL57
MySQL57 服务正在停止.
MySQL57 服务已成功停止。C:>net start MySQL57
MySQL57 服务正在启动 .
MySQL57 服务已经启动成功。

  1. 连接MySQL服务:
C:>mysql -uroot -pmysqltao

  1. 下面显示MySQL的bin log已经开启:
mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+

这时候你可以打开你配置的bin log路径,可以看到生成的二进制日志文件:binlog.000001,

以及一个二进制log的索引文件:binlog.index。

查看 bin log

每次重启MySQL都会生成一个新的binlog文件,通过show binary logs语句可以看到所有的binlog文件,返回的内容跟 binlog.index 文件里记录的binlog文件数是一样的。

现在有3个binglog文件:

mysql> show binary logs;
+---------------+-----------+
| Log_name      | File_size |
+---------------+-----------+
| binlog.000001 |       177 |
| binlog.000002 |       177 |
| binlog.000003 |       154 |
+---------------+-----------+

执行一条update语句:

update demo_java_db_1.t_user set name='Jack' where id=1;

再通过mysqlbinlog语句查看当前的binlog文件:

C:1workspacedevelopdbmysqlmysql57logs>mysqlbinlog binlog.000003
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#190704 17:19:28 server id 1  end_log_pos 123 CRC32 0xaf193fc6  Start: binlog v 4, server v 5.7.17-log created 190704 17:19:28 at startup
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
BINLOG '
oMQdXQ8BAAAAdwAAAHsAAAABAAQANS43LjE3LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAACgxB1dEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA
AcY/Ga8=
'/*!*/;
# at 123
#190704 17:19:29 server id 1  end_log_pos 154 CRC32 0xc916f3aa  Previous-GTIDs
# [empty]
# at 154
#190704 17:39:43 server id 1  end_log_pos 219 CRC32 0xcecca4bf  Anonymous_GTID  last_committed=0    sequence_number=1
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 219
#190704 17:39:43 server id 1  end_log_pos 287 CRC32 0xb6a3de97  Query   thread_id=7     exec_time=0 error_code=0
SET TIMESTAMP=1562233183/*!*/;
SET @@session.pseudo_thread_id=7/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1344274432/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!C utf8 *//*!*/;
SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
BEGIN
/*!*/;
# at 287
#190704 17:39:43 server id 1  end_log_pos 358 CRC32 0xd1ce52d6  Table_map: `demo_java_db_1`.`t_user` mapped to number 115
# at 358
#190704 17:39:43 server id 1  end_log_pos 445 CRC32 0x7a57aa7a  Update_rows: table id 115 flags: STMT_END_FBINLOG '
X8kdXRMBAAAARwAAAGYBAAAAAHMAAAAAAAEADmRlbW9famF2YV9kYl8xAAZ0X3VzZXIABQgPDw8P
CGAAYABgAGAAHtZSztE=
X8kdXR8BAAAAVwAAAL0BAAAAAHMAAAAAAAEAAgAF///wAQAAAAAAAAAFZmlyc3QGcHdkMTIzA01B
TvABAAAAAAAAAARKYWNrBnB3ZDEyMwNNQU56qld6
'/*!*/;
# at 445
#190704 17:39:43 server id 1  end_log_pos 476 CRC32 0x6e49c227  Xid = 42
COMMIT/*!*/;
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*/;

通过binlog可以看到在 17:39:43改了demo_java_db_1库的t_user表。

通过binlog恢复数据

通过show binlog events命令可以查看binlog内记录的事件:

mysql> show binlog events in 'binlog.000003'G
*************************** 1. row ***************************Log_name: binlog.000003Pos: 4Event_type: Format_descServer_id: 1
End_log_pos: 123Info: Server ver: 5.7.17-log, Binlog ver: 4
*************************** 2. row ***************************Log_name: binlog.000003Pos: 123Event_type: Previous_gtidsServer_id: 1
End_log_pos: 154Info:
*************************** 3. row ***************************Log_name: binlog.000003Pos: 154Event_type: Anonymous_GtidServer_id: 1
End_log_pos: 219Info: SET @@SESSION.GTID_NEXT= 'ANONYMOUS'
*************************** 4. row ***************************Log_name: binlog.000003Pos: 219Event_type: QueryServer_id: 1
End_log_pos: 287Info: BEGIN
*************************** 5. row ***************************Log_name: binlog.000003Pos: 287Event_type: Table_mapServer_id: 1
End_log_pos: 358Info: table_id: 115 (demo_java_db_1.t_user)
*************************** 6. row ***************************Log_name: binlog.000003Pos: 358Event_type: Update_rowsServer_id: 1
End_log_pos: 445Info: table_id: 115 flags: STMT_END_F
*************************** 7. row ***************************Log_name: binlog.000003Pos: 445Event_type: XidServer_id: 1
End_log_pos: 476Info: COMMIT /* xid=42 */
*************************** 8. row ***************************Log_name: binlog.000003Pos: 476Event_type: Anonymous_GtidServer_id: 1
End_log_pos: 541Info: SET @@SESSION.GTID_NEXT= 'ANONYMOUS'
*************************** 9. row ***************************Log_name: binlog.000003Pos: 541Event_type: QueryServer_id: 1
End_log_pos: 609Info: BEGIN
*************************** 10. row ***************************Log_name: binlog.000003Pos: 609Event_type: Table_mapServer_id: 1
End_log_pos: 680Info: table_id: 115 (demo_java_db_1.t_user)
*************************** 11. row ***************************Log_name: binlog.000003Pos: 680Event_type: Update_rowsServer_id: 1
End_log_pos: 765Info: table_id: 115 flags: STMT_END_F
*************************** 12. row ***************************Log_name: binlog.000003Pos: 765Event_type: XidServer_id: 1
End_log_pos: 796Info: COMMIT /* xid=69 */
*************************** 13. row ***************************Log_name: binlog.000003Pos: 796Event_type: Anonymous_GtidServer_id: 1
End_log_pos: 861Info: SET @@SESSION.GTID_NEXT= 'ANONYMOUS'
*************************** 14. row ***************************Log_name: binlog.000003Pos: 861Event_type: QueryServer_id: 1
End_log_pos: 929Info: BEGIN
*************************** 15. row ***************************Log_name: binlog.000003Pos: 929Event_type: Table_mapServer_id: 1
End_log_pos: 1000Info: table_id: 115 (demo_java_db_1.t_user)
*************************** 16. row ***************************Log_name: binlog.000003Pos: 1000Event_type: Update_rowsServer_id: 1
End_log_pos: 1085Info: table_id: 115 flags: STMT_END_F
*************************** 17. row ***************************Log_name: binlog.000003Pos: 1085Event_type: XidServer_id: 1
End_log_pos: 1116Info: COMMIT /* xid=101 */
*************************** 18. row ***************************Log_name: binlog.000003Pos: 1116Event_type: Anonymous_GtidServer_id: 1
End_log_pos: 1181Info: SET @@SESSION.GTID_NEXT= 'ANONYMOUS'
*************************** 19. row ***************************Log_name: binlog.000003Pos: 1181Event_type: QueryServer_id: 1
End_log_pos: 1249Info: BEGIN
*************************** 20. row ***************************Log_name: binlog.000003Pos: 1249Event_type: Table_mapServer_id: 1
End_log_pos: 1320Info: table_id: 115 (demo_java_db_1.t_user)
*************************** 21. row ***************************Log_name: binlog.000003Pos: 1320Event_type: Update_rowsServer_id: 1
End_log_pos: 1405Info: table_id: 115 flags: STMT_END_F
*************************** 22. row ***************************Log_name: binlog.000003Pos: 1405Event_type: XidServer_id: 1
End_log_pos: 1436Info: COMMIT /* xid=107 */
22 rows in set (0.00 sec)

  • Log_name: 此条log存在那个文件中,从上面可以看出这2条log皆存在与mysql_bin.000001文件中。
  • Pos: log在bin-log中的开始位置
  • Event_type:log的类型信息
  • Server_id:可以查看配置中的server_id, 表示log是那个服务器产生, server_id可以在my.ini配置
  • End_log_pos:log在bin-log中的结束位置
  • Info: log的一些备注信息,可以直观的看出进行了什么操作

通过mysqlbinlog命令可以恢复数据,mysqlbinlog命令支持添加参数来恢复指定的事件:

mysqlbinlog --start-date="2019-07-04 18:00:00" --stop-date="2019-07-04 18:10:00" binlog.000003 |mysql -uroot -pmysqltao

错误日志

MySQL的错误日志记录了 mysqld 启动和停止时,以及服务器在运行过程中出现的任何严重错误。

与binlog一样,在my.ini文件配置:

# error log输出的目录及文件
log-error="C:/1workspace/develop/db/mysql/mysql57/logs/errorlog"

通用查询日志

通用查询日志能够存放到一个文本文件或者表中,全部连接和语句被记录到该日志文件或表,默认不开启该日志。

在my.ini文件[mysqld]组配置通用查询日志:

#通用查询日志输出格式 [none|file|table|file,table]
log_output=file
#是否启用通用查询日志[on|off]
general_log=on
#通用查询日志位置及名字
general_log_file="C:/1workspace/develop/db/mysql/mysql57/logs/generallog"

慢查询日志

慢查询日志记录的是查询较慢的SQL语句的日志,可用于对执行时间较长、执行效率较低的SQL语句的性能优化。

  1. 临时开启慢查询日志:
set global slow_query_log = on;

如果想关闭慢查询日志,只需要执行:

set global slow_query_log = off;

2.临时设置慢查询时间临界点

查询时间高于这个临界点的都会被记录到慢查询日志中。

所有执行时间超过1秒的sql都将被记录到慢查询日志:

set long_query_time = 1;

  1. 设置慢查询存储的方式
set globle log_output = file;

这里设置为了file,就是说慢查询日志是通过file保存,默认是none,我们还可以设置为table,如果是table则慢查询信息会保存到mysql库下的slow_log表中。

  1. 查询慢查询日志的开启状态和慢查询日志储存的位置
show variables like '%quer%';

补充:事务日志

事务日志是InnoDB引擎特有的日志,可以帮助提高事务的效率。

使用事务日志,存储引擎在修改表的数据时只需要修改其内存拷贝,再把改修改行为记录到持久在硬盘上的事务日志中,而不用每次都将修改的数据本身持久到磁盘。

事务日志采用追加的方式,因此写日志的操作是磁盘上一小块区域内的顺序I/O,而不像随机I/O需要在磁盘的多个地方移动磁头,所以采用事务日志的方式相对来说要快得多。

事务日志持久以后,内存中被修改的数据在后台可以慢慢的刷回到磁盘。目前大多数的存储引擎都是这样实现的,我们通常称之为预写式日志,修改数据需要写两次磁盘。

如果数据的修改已经记录到事务日志并持久化,但数据本身还没有写回磁盘,此时系统崩溃,存储引擎在重启时能够自动恢复这部分修改的数据。具有的恢复方式则视存储引擎而定。

查看事务日志参数:

mysql> SHOWGLOBAL VARIABLES LIKE '%log%';
+-----------------------------------------+-----------------------------------+
| Variable_name                           | Value                             |
+-----------------------------------------+-----------------------------------+
| innodb_flush_log_at_trx_commit          | 1             |
|innodb_locks_unsafe_for_binlog          |OFF                               |
| innodb_log_buffer_size                  | 8388608                           |
|innodb_log_file_size                    |5242880                           |
| innodb_log_files_in_group               | 2                      |
|innodb_log_group_home_dir               |./            |
|innodb_mirrored_log_groups              |1              |

总结

  • MySQL日志主要有:

错误日志、通用查询日志、慢查询日志、事务日志、二进制日志

  • MySQL日志的输出位置一般有三种方式:

file(文件),table(表)、none(不保存)

  • MySQL日志主要是用于:

异常监控、性能优化、数据恢复、主从同步


操作 mysql 不生成日志_详解MySQL的日志相关推荐

  1. mysql重做日志_详解MySQL 重做日志(redo log)与回滚日志(undo logo)

    前言: 前面文章讲述了 MySQL 系统中常见的几种日志,其实还有事务相关日志 redo log 和 undo log 没有介绍.相对于其他几种日志而言, redo log 和 undo log 是更 ...

  2. mysql临键锁_详解 MySql InnoDB 中的三种行锁(记录锁、间隙锁与临键锁)

    详解 MySql InnoDB 中的三种行锁(记录锁.间隙锁与临键锁) 前言 InnoDB 通过 MVCC 和 NEXT-KEY Locks,解决了在可重复读的事务隔离级别下出现幻读的问题.MVCC  ...

  3. mysql 的dcl语句_详解MySQL第三篇—DCL语句

    DCL(Data Control Language)语句:数据控制语句,用于控制不同数据段直接的许可和访问级别的语句.这些语句定义了数据库.表.字段.用户的访问权限和安全级别.主要的语句关键字包括 g ...

  4. mysql通配符escape使用_详解MySQL like如何查询包含'%'的字段(ESCAPE用法)

    在SQl like语句中,比如 SELECT * FROM user WHERE username LIKE '%luchi%' SELECT * FROM user WHERE username L ...

  5. mysql通配符escape使用_详解MySQL like如何查询包含#39;%#39;的字段(ESCAPE用法)-MySQL教程-Web开发者网...

    在SQl like语句中,比如 SELECT * FROM user WHERE username LIKE '%luchi%' SELECT * FROM user WHERE username L ...

  6. mysql mgr 三节点_详解MySQL 5.7 MGR单主确定主节点方法

    我们行MGR年底要上线了,每天都要看官方文档学习,做测试,坚持每天写一个小知识点,有想一起学习的么~ MySQL 5.7 MGR单主确定主节点是哪个,我们可以通过成员ID来判断,然后结合read_on ...

  7. mysql 编辑数据库内容_详解mysql数据库增删改操作

    插入数据 insert into 表名(列名1,列名2,列名3) values(值1,值2,值3); insert into user(user_id,name,age) values(1,'nice ...

  8. mysql删除数据库恢复_详解MySQL数据库恢复误删除数据

    血的教训,事发经过就不详述了.直接上操作步骤及恢复思路(友情提示:数据库的任何操作都要提前做好备份),以下是Mysql数据后的恢复过程: 1. 找到binlog 恢复数据的前提是必须开启Mysql的b ...

  9. mysql insert 不需要日志_详解MySQL|你不知道的新特性-8.0错误日志增强

    MySQL 8.0 重新定义了错误日志输出和过滤,改善了原来臃肿并且可读性很差的错误日志. 比如增加了 JSON 输出,在原来的日志后面以序号以及 JSON 后缀的方式展示. 比如我机器上的 MySQ ...

最新文章

  1. win7下安装dynamips完全版
  2. Telnet不是内部或外部命令解决办法
  3. 2051温控器c语言程序,2051电子钟C程序.doc
  4. vue inheritAttrs、$attrs和$listeners使用
  5. GDAL源码剖析(二)之编译说明
  6. iOS6中旋转的略微改变
  7. python小星_Python学习【第3篇】:列表魔法
  8. 统计学基础知识之统计思维
  9. JQ6500语音模块
  10. win10怎么更新到1809正式版 升级windows10方法
  11. 备份文档到云服务器,备份到云服务器
  12. CC00024.CloudOpenStack——|OpenStack组件.V02|——|OpenStack-Cinder块存储|配置block.V2|
  13. 阿里acp认证是什么 阿里acp认证含金量高吗
  14. java 树结构_Java通用tree树形结构
  15. 如何利用C#/C++调取创蓝253短信验证码
  16. Line 10: Char 40: runtime error: signed integer overflow: 2147483647 + 1 cannot be represented in ty
  17. 会计学计算机技能,财经会计专业,需要懂IT技能吗?编程呢?
  18. 【BLE】蓝牙设备地址
  19. Rest Api 项目添加 Basic Auth 认证
  20. Block 本质、实现原理、内存管理、循环引用、__block等

热门文章

  1. Ordering Tasks UVA - 10305(拓扑排序)
  2. NRF24L01发送接收调试记录
  3. Python 创建目录文件夹
  4. Java中的引用数据类型-BigDecimal
  5. Oracle查询数据库中所有的表名称
  6. 怎么查询服务器绑定的网站吗,服务器绑定网站吗
  7. 高效能人士的七个习惯_有史以来最具影响力管理类书籍 高效能人士的七个习惯 让你成为一名成功高效的人士...
  8. 第二章 ---- spring注解开发
  9. python保存mat文件_python读取文件——python读取和保存mat文件
  10. 关键词之间用分号_如何选择关键词?快看这几个要点