mysql对数据的更新操作记录在通用查询日志和二进制日志中。通用查询日志用来记录用户的所有操作,包括启动和关闭 MySQL 服务、更新语句和查询语句等;二进制日志会以二进制的形式记录数据库的各种操作,但不记录查询语句。

(推荐教程:mysql视频教程)

日志是数据库的重要组成部分,主要用来记录数据库的运行情况、日常操作和错误信息。

MySQL通用查询日志(General Query Log)

通用查询日志(General Query Log)用来记录用户的所有操作,包括启动和关闭 MySQL 服务、更新语句和查询语句等。

默认情况下,通用查询日志功能是关闭的。可以通过以下命令查看通用查询日志是否开启,命令如下:mysql> SHOW VARIABLES LIKE '%general%';

+------------------+----------------------------------------------------------------+

| Variable_name | Value |

+------------------+----------------------------------------------------------------+

| general_log | OFF |

| general_log_file | C:\ProgramData\MySQL\MySQL Server 5.7\Data\LAPTOP-UHQ6V8KP.log |

+------------------+----------------------------------------------------------------+

2 rows in set, 1 warning (0.01 sec)

从结果可以看出,通用查询日志是关闭的,general_log_file 变量指定了通用查询日志文件所在的位置。

启动和设置通用查询日志

在 MySQL 中,可以通过在 MySQL 配置文件添加 log 选项来开启通用查询日志,格式如下:[mysqld]

log=dir/filename

其中,dir 参数指定通用查询日志的存储路径;filename 参数指定日志的文件名。如果不指定存储路径,通用查询日志将默认存储到 MySQL 数据库的数据文件夹下。如果不指定文件名,默认文件名为 hostname.log,其中 hostname 表示主机名。

查看通用查询日志

如果希望了解用户最近的操作,可以查看通用查询日志。通用查询日志以文本文件的形式存储,可以使用普通文本文件查看该类型日志内容。

例 1

首先我们查看通用查询日志功能是否是开启状态,然后查询 tb_student 表的记录,SQL 命令和执行过程如下:mysql> SHOW VARIABLES LIKE '%general%';

+------------------+----------------------------------------------------------------+

| Variable_name | Value |

+------------------+----------------------------------------------------------------+

| general_log | ON |

| general_log_file | C:\ProgramData\MySQL\MySQL Server 5.7\Data\LAPTOP-UHQ6V8KP.log |

+------------------+----------------------------------------------------------------+

2 rows in set, 1 warning (0.02 sec)

mysql> use test;

Database changed

mysql> SELECT * FROM tb_student;

+----+--------+

| id | name |

+----+--------+

| 1 | Java |

| 2 | MySQL |

| 3 | Python |

+----+--------+

3 rows in set (0.06 sec)

执行成功后,打开通用查询日志,这里日志名称为 LAPTOP-UHQ6V8KP.log,下面是通用查询日志中的部分内容。C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqld.exe, Version: 5.7.29-log (MySQL Community Server (GPL)). started with:

TCP Port: 3306, Named Pipe: MySQL

Time Id Command Argument

2020-05-29T06:43:44.382878Z 7 Quit

2020-05-29T06:44:10.001382Z 8 Connect root@localhost on using SSL/TLS

2020-05-29T06:44:10.007532Z 8 Query select @@version_comment limit 1

2020-05-29T06:44:11.748179Z 8 Query SHOW VARIABLES LIKE '%general%'

2020-05-29T06:44:25.487472Z 8 Query SELECT DATABASE()

2020-05-29T06:44:25.487748Z 8 Init DB test

2020-05-29T06:44:35.390523Z 8 Query SELECT * FROM tb_student

可以看出,该日志非常清晰地记录了客户端的所有行为。

MySQL二进制日志(Binary Log)

二进制日志(Binary Log)也可叫作变更日志(Update Log),是 MySQL 中非常重要的日志。主要用于记录数据库的变化情况,即 SQL 语句的 DDL 和 DML 语句,不包含数据记录查询操作。

如果 MySQL 数据库意外停止,可以通过二进制日志文件来查看用户执行了哪些操作,对数据库服务器文件做了哪些修改,然后根据二进制日志文件中的记录来恢复数据库服务器。

默认情况下,二进制日志功能是关闭的。可以通过以下命令查看二进制日志是否开启,命令如下:mysql> SHOW VARIABLES LIKE 'log_bin';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| log_bin | OFF |

+---------------+-------+

1 row in set, 1 warning (0.02 sec)

从结果可以看出,二进制日志是关闭的。

启动和设置二进制日志

在 MySQL 中,可以通过在配置文件中添加 log-bin 选项来开启二进制日志,格式如下:[mysqld]

log-bin=dir/[filename]

其中,dir 参数指定二进制文件的存储路径;filename 参数指定二进制文件的文件名,其形式为 filename.number,number 的形式为 000001、000002 等。

每次重启 MySQL 服务后,都会生成一个新的二进制日志文件,这些日志文件的文件名中 filename 部分不会改变,number 会不断递增。

如果没有 dir 和 filename 参数,二进制日志将默认存储在数据库的数据目录下,默认的文件名为 hostname-bin.number,其中 hostname 表示主机名。

下面在 my.ini 文件的 [mysqld] 组中添加以下语句:log-bin

重启 MySQL 服务器后,可以在 MySQL 数据库的数据目录下看到 LAPTOP-UHQ6V8KP-bin.000001 这个文件,同时还生成了 LAPTOP-UHQ6V8KP-bin.index 文件。此处,MySQL 服务器的主机名为 LAPTOP-UHQ6V8KP。

还可以在 my.ini 文件的 [mysqld] 组中进行如下修改。语句如下:log-bin=C:log\mylog

重启 MySQL 服务后,可以在 C:log 文件夹下看到 mylog.000001 文件和 mylog.index 文件。

查看二进制日志

1. 查看二进制日志文件列表

可以使用如下命令查看 MySQL 中有哪些二进制日志文件:mysql> SHOW binary logs;

+----------------------------+-----------+

| Log_name | File_size |

+----------------------------+-----------+

| LAPTOP-UHQ6V8KP-bin.000001 | 177 |

| LAPTOP-UHQ6V8KP-bin.000002 | 154 |

+----------------------------+-----------+

2 rows in set (0.00 sec)

2. 查看当前正在写入的二进制日志文件

可以使用以下命令查看当前 MySQL 中正在写入的二进制日志文件。mysql> SHOW master status;

+----------------------------+----------+--------------+------------------+-------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+----------------------------+----------+--------------+------------------+-------------------+

| LAPTOP-UHQ6V8KP-bin.000002 | 154 | | | |

+----------------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

3. 查看二进制日志文件内容

二进制日志使用二进制格式存储,不能直接打开查看。如果需要查看二进制日志,必须使用 mysqlbinlog 命令。

mysqlbinlog 命令的语法形式如下:mysqlbinlog filename.number

mysqlbinlog 命令只在当前文件夹下查找指定的二进制日志,因此需要在二进制日志所在的目录下运行该命令,否则将会找不到指定的二进制日志文件。

例 1

下面使用 mysqlbinlog 命令,来查看 C:\log 目录下的 mylog.000001 文件,代码执行如下:C:\Users\11645>cd C:\log

C:\log>mysqlbinlog mylog.000001

/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;

/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;

DELIMITER /*!*/;

# at 4

#200527 9:33:37 server id 1 end_log_pos 123 CRC32 0x69738cfd Start: binlog v 4, server v 5.7.29-log created 200527 9:33:37 at startup

......

由于日志内容较长,这里只展示了 mylog 中的部分内容。

使用 mysqlbinlog 命令时,可以指定二进制文件的存储路径。这样可以确保 mysqlbinlog 命令可以找到二进制文件。上面例子中的命令可以变为如下形式:mysqlbinlog C:\log\mylog.000001

这样,mysqlbinlog 命令就会到 C:\log 目录下去查找 mylog.000001 文件。如果不指定路径,mysqlbinlog 命令将在当前目录下查找 mylog.000001 文件。

除了 filename.number 文件,MySQL 还会生成一个名为 filename.index 的文件,这个文件存储着所有二进制日志文件的列表,可以用记事本打开该文件。小技巧:实际工作中,二进制日志文件与数据库的数据文件不放在同一块硬盘上,这样即使数据文件所在的硬盘被破坏,也可以使用另一块硬盘上的二进制日志来恢复数据库文件。两块硬盘同时坏了的可能性要小得多,这样可以保证数据库中数据的安全。

更多编程相关知识,请访问:编程入门!!

mysql 数据修改记录日志_mysql对数据的更新操作记录在哪个日志中?相关推荐

  1. java查询到更新之前的数据_Java对数据库的查询和更新操作详解

    这篇文章主要介绍了使用Java对数据库进行基本的查询和更新操作,是Java入门学习中的基础知识,需要的朋友可以参考下 数据库查询 利用Connection对象的createStatement方法建立S ...

  2. mysql在线修改表结构大数据表的风险与解决办法归纳

    整理这篇文章的缘由: 互联网应用会频繁加功能,修改需求.那么表结构也会经常修改,加字段,加索引.在线直接在生产环境的表中修改表结构,对用户使用网站是有影响. 以前我一直为这个问题头痛.当然那个时候不需 ...

  3. mysql创建销售表_MySQL创建数据表(CREATE TABLE语句)

    在创建数据库之后,接下来就要在数据库中创建数据表.所谓创建数据表,指的是在已经创建的数据库中建立新表. 创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性.引用完整性和域 ...

  4. linux成功mysql数据直接拷贝_mysql数据库数据从一个linux系统移植到另一个linux系统的方法...

    背景 问题介绍 现在有一个linux系统的机器上数据需要移植到另外一个linux系统上.老机器称A机器,新机器称B机器. 前期调研 鉴于网上资料很多都是相同内容,而数据库的数据一般都很重要,这些方法都 ...

  5. mysql创建表参数_MySQL创建数据表(CREATE TABLE语句)

    在创建数据库之后,接下来就要在数据库中创建数据表.所谓创建数据表,指的是在已经创建的数据库中建立新表. 创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性.引用完整性和域 ...

  6. mysql用 fifo 记录日志_MySQL一丢丢知识点的了解

    1. MySQL体系结构 从概念上讲,数据库是文件的集合,是依照某种数据模型组织起来并存放于二级存储器中的数据集合:数据库实例是程序,是位于用户与操作系统之间的一层数据管理软件,用户对数据库数据的任何 ...

  7. mysql显示修改密码_MySQL修改密码

    第一种方式: 最简单的方法就是借助第三方工具Navicat for MySQL来修改,方法如下: 1.登录mysql到指定库,如:登录到test库. 2.然后点击上方"用户"按钮. ...

  8. app服务器数据修改,放开那三国数据修改,服务端数据库修改工具

    放开那三国App合服补偿奖励数据互通攻略,魏公子兵法放开那三国数据库很多小伙伴都在合服方面有着或多或少的疑问,那么不要紧,一起来看看放开那三国App合服补偿奖励数据互通攻略具体内容吧. 魏公子兵法数据 ...

  9. mysql 1054 修改密码_MySQL 5.7.16 修改密码提示 ERROR 1054 (42S22): U

    按照网上之前版本的操作,将my.ini中的skip-grant-tables注释去掉,然后在命令行中以mysql -u root -p可以直接进入,但是执行 mysql> update mysq ...

最新文章

  1. php写一个shell脚本文件格式,一篇文章学会——shell脚本编写
  2. C语言中的typedef
  3. 干货|4条实用小建议,送给初入NLP领域的你(附链接)
  4. 左右两个下拉列表框的选项互移及获值效果
  5. Azure Remoteapp 使用指南
  6. 2015 UESTC 数据结构专题H题 秋实大哥打游戏 带权并查集
  7. 数据类型,运算符和表达式02 - 零基础入门学习C语言03
  8. 利用Certbot工具快速给网站部署Let's Encrypt免费SSL证书
  9. .net core通过多路复用实现单服务百万级别RPS吞吐
  10. 计算机组成原理 北理,北京理工大学计算机组成原理期末复习.pdf
  11. linux缓冲区攻击实验报告,linux 下缓冲区溢出攻击原理及示例
  12. 纯css实现照片墙3D效果
  13. App 测试工具大全,收藏这篇就够了
  14. PayPal的一些注意事项
  15. 【bzoj3034】Heaven Cow与God Bull
  16. 别人写的微信小程序,收藏借鉴!
  17. java中封装类Feild和使用setter和getter方法访问封装的类Feild
  18. GDB基本命令(整合)
  19. c语言printf函数中的格式控制字符串,C++_C语言格式化输入输出函数详解,一:格式输出函数printf() 1 - phpStudy...
  20. AD19绘制原理图(阻容,IC,排针)

热门文章

  1. 助力在线教育,阿里云推出百万专项扶持基金计划
  2. 前端内存优化的探索与实践
  3. 漫画:什么是 “元宇宙” ?
  4. 腾讯开源之道:基于Apache之道的开源实践与探索
  5. 一套存储承载全场景,XSKY星辰天合发布企业级SDS V5系列
  6. antd的tooltip如何调整间距_Word字符间距不会调?那就试试这些技巧
  7. pythonplot绘图xrd_一种简化的截面动量组合测试[PythonMATLAB]
  8. android tab 切换动画,Android之ViewPager+TabLayout组合实现导航条切换效果(微信和QQ底部多标签切换)...
  9. java实现zip压缩文件(同一文件夹下的多个文件夹打成一个zip包)
  10. Spring Boot2 整合 MyBatis 多数据源