mysql日志文件使用简单介绍
本文目录:
- 1.如何查看mysql数据库活动日志?
- 2、通过mysql日志恢复数据库。紧急帮助
- 3.如何打开mysql日志或者如何查看mysql日志文件
- 4.使用mysqlbinlog二进制日志文件导出
- 5.如何使用mysql日志文件?
- 6、如何使用mysql中的mysqlbinlog工具将日志文件生成txt文件进行分析
如何查看mysql数据库活动日志?
有时我们会不小心更新一个大表,例如,如果我们在错误的项目上写入了条件...
目前,如果我们终止更新线程,则需要花费很多时间来取消撤消日志时间。 。如果你不管它,你将不知道要花多长时间来更新。
可以知道更新进度吗?
试试吧
首先创建测试数据库:
快速创建数据:
连续运行多次相同的SQL,可以快速构建千万级数据:
行数:
将发布一个大更新:
然后启动一个新会话并观察 Performance_schema 中的数据:
可以看到 Performance_schema 列出了从当前 SQL 引擎接收到的行数。
SQL执行完毕后,我们看看更新从引擎中获取了多少行:
可以看到更新从引擎中获取的行数是表中总行数的两倍。然后我们可以评估:更新进度 = (rows_explored) / (2 * 表行数)
? Tips
information_schema.tables提供了表中行数的估计,这比使用select count(1)便宜得多,几乎可以忽略。
那么在所有更新中,从引擎接收到的行数会变成表大小的两倍吗?此事仍需具体情况具体讨论。上面的 SQL 更新主键。如果只更新内容而不更新主键怎么办?我们来测试一下:
等待更新完成,检查row_examined,发现它正好是数组的大小:
我们如何准确确定这个倍数?
一种方法是依靠经验:update语句中检查了多少行在哪里,主键是否改变,唯一键是否改变,并根据这些条件评估乘数。
另一种方法是尝试使用具有相同结构的较小表并获得倍数。
这样我们就可以准确评估大更新的进度。
如何通过mysql日志恢复数据库紧急求助
1。首先查看my.ini(Win系统)或者my.cnf(Linux系统)配置是否有如下
[mysqld]
log-bin=mysql-bin
等号后面是文件名或路径加文件名。
或
使用命令查看binlog规范是否启用:
mysql显示主日志;
mysql显示binlog事件g;
2。输入故障时间描述
3。如果清除Binglok后启用,可以根据故障恢复点或时间恢复操作
mysqlbinlog --start-position=
mysqlbinlog --start-datetime=
这里的语法是一个提示进一步询问,我不知道您使用哪个操作系统,开发库还是生产库?不要随意下达命令。
【备份:故障恢复和数据恢复前不要进行备份(数据文件和日志文件)】
如何打开mysql日志或如何查看mysql日志文件
mysql有以下日志:
错误日志:-log-err
查询日志:-log
慢查询日志:-log-slow-queries
更新日志
二进制日志:-log- bin
打开mysql安装目录下的my.ini,最后添加以上参数,保存并重启mysql服务。
例如:#输入二进制日志的名称。否则,使用默认名称。
#log-bin=#输入查询日志文件的名称。否则,将使用默认名称。
#log=#输入错误日志文件的名称。否则,使用默认名称。
log-error=#输入更新日志文件的名称。否则,使用默认名称。
# log-update=
上面仅使用错误日志。如果要打开其他日志,去掉前面的“#”
显示命令:①显示'log_%'等变量;显示所有日志命令
②显示'log_bin'等变量;查看具体日志命令
用mysqlbinlog二进制日志文件导出
检查 MySQL 中是否启用了 binlog(输入 mysql 函数)
显示类似 'log_bin%' 的变量;
2.询问 binlog 文件名
显示主状态;
路径通常安装在mysql/ 在 data
下键入 mysqlbinlog 运行文件目录 - 在 mysql/bin
下运行
mysqlbinlog --no-defaults ../data/mysql-bin.000012 b. .查询时间段 内部日志执行内容
mysqlbinlog --start-datetime='2018-01-08 02:01:00' --stop-datetime='2018-01-08 02:30:10' -d test /var /lib/mysql/mysql-bin.000170 -v
2、查询日志
查询期间执行的删除命令 mysqlbinlog --start-datetime='2018-01-08 02:01: 00' - -stop-datetime='2018-01-08 02:30:10' -d test /var/lib/mysql/mysql-bin.000170 -v|grep DELETE -A 5
3. 内的日志一个统计周期。删除
完成的语句mysqlbinlog --start-datetime='2018-01-08 02:01:00' --stop-datetime='2018-01-08 02:30:10' -d test /var/lib/mysql/mysql-bin .000170 -v|grep DELETE |wc -l

如何使用mysql日志文件?
my.cnf 这个mysql日志分为错误日志、二进制日志、慢查询日志和转储日志。每个人都有不同的角色。检查全局变量。如果它亮起,则表示已打开。如果它可见,则表示它已打开。关闭,它的用途不是三言两语就能说清楚的。建议您去51cto页面查看相关技术博客
如何使用mysql中的mysqlbinlog工具将日志文件创建txt文件进行分析
MySQL的Binlog存储了MySQL数据库中的所有更改。了解Binlog的结构可以帮助我们解析Binlog,甚至可以对Binlog进行一些更改或者“篡改”,比如实现Oracle闪回、恢复记录不小心删除、恢复更新的记录等功能。本文将指导你实现这些神奇的功能,你会发现它比你想象的要简单得多。本文所指的binlog是ROW模式下的Binlog,这也是MySQL 8中的默认模式。由于使用上有很多限制,STATEMENT 模式越来越少被使用。
Binlog 由事件组成。请注意,交易不是交易。一个事件可以包含多个事件。该事件描述对数据库所做的更改。
现在我们已经了解了Binlog结构,我们可以尝试编辑Binlog数据了。例如上例中的Binlog删除了一条记录。我们可以尝试恢复这个记录。 Binlog有行删除事件(DELETE_ROWS_EVENT)。此事件删除记录。该事件与写行(WRITE_ROWS_EVENT)事件不同。数据结构完全一样,只是行删除事件类型为32,写行事件类型为30。我们将对应的Binlog位置32改为30,将删除的记录添加回来。从前面的“show binlog events”可以看到这个DELETE_ROWS_EVENT是从位置378开始的,这里的位置就是Binlog文件的实际位置(以字节为单位)。从交易结构中,我们可以看到type_code是交易的第5个字节。我们编写一个 Python 小程序将第 383 个(378+5=383)字节转换为 30。当然,您也可以使用二进制编辑工具进行更改。
找出 Binlog 中的大事件
因为 ROW 模式的 Binlog 会保存每次更改的日志,所以简单的 SQL 就可以在 Binlog 中产生一个巨大的事件,例如没有 UPDATE 或 DELETE 语句的事件,它更改了所有记录整个桌子。每条记录在 Binlog 中保存一次。结果就是创造了巨大的交易记录。像这样的大事常常会引起问题。我的一个客户曾经向我抱怨Binlog被前滚了,两天后没有任何动静。我分析了Binlog,发现有一个事件创建了1.4G记录,编辑了66万条记录!下面是一个简单的Python小程序,用于搜索Binlog中的大事件。我们知道Binlog是用mysqlbinlog解析的,每个事务以BEGIN开始,以COMMIT结束。我们找到BENGIN之前“#at”的位置,检查COMMIT之后“#at”的位置,将两个位置相减来计算交易大小。以下是该 Python 程序的示例。
削减Binlog中的大事件
对于大事务,MySQL将其拆分为多个事务(注意一个是事务TRANSACTION,一个是事件EVENT)。事件大小由参数 binlog-row-event-max-size 决定。该参数的默认值为8K。因此,我们可以将几个事件切割成一个单独的稍小的事件
ROW模式,即使我们只更新记录的一个字段,每个字段变化前后的值都会被保存。此行为由 binlog_row_image 参数控制。该参数有 3 个值。默认值为 FULL,这意味着对该列的所有更改都将被记录,即使该字段没有更改。这样我们就可以实现类似Oracle闪回的功能了。我个人估计MySQL未来的版本可能会推出这样一个基于Binlog的功能。
理解Binlog的结构和Python这把瑞士军刀一起,我们还可以实现很多功能。例如,我们可以统计哪张表被修改最多?我们还可以将Binlog切分成部分重新组织,这样就可以灵活地修改和迁移MySQL数据库。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网
