如何查看mysql数据库操作记录日志

哎呀,我们来谈谈更新数据库吧。
有时您可能会不小心写错了 where 条件并最终更新了一个大表。
这实在是一件令人头疼的事。
如果要杀掉线程,回滚undo log需要很长时间。
如果你放着不管,你都不知道什么时候会更新。
那么我们如何才能知道本次更新的进度呢?
我们先来尝试一下。
让我们首先构建一个测试数据库并立即获取一些数据。
连续运行相同的SQL语句可以快速构建千万级数据。
然后数一共有多少行。

计数完毕后,让我们执行一次大型更新操作。
然后,在另一个会话中,导航到 Performance_schema 并查看信息。

Performance_schema 告诉您当前 SQL 已从引擎中获取了多少行。
更新完成后,让我们检查从引擎检索的行数。

此更新从引擎检索的总行数是表大小的两倍。
那么我们如何估计进展呢?简单地说,更新进度等于(rows_examined)除以(表中的2 行)。

请记住这个提示。
information_schema.tables 提供表中行数的估计。
这比使用 select count(1 ) 便宜得多,并且几乎可以忽略不计。

这是否意味着每次更新时,从引擎检索的行数将是表大小的两倍?这取决于。
例如,上面的 SQL 更新主键。
如果只更新内容而不更新主键怎么办?
让我们再试一次。
更新完成后,检查 row_examined 并发现它与表的大小完全相同。

那么如何准确估计这个倍数呢?一种方法是凭经验判断update语句的where中扫描了多少行,主键是否改变,唯一键是否改变,然后根据这些条件估计因子。
另一种方法是用相同结构的较小表进行试验以获得倍数。

通过这种方式,您可以准确地估计大型更新的进度。
说实话,当时我并不明白这个原理,但是慢慢研究之后,我终于明白了。

如何查看MySQL数据库恢复的进度

只需检查日志以了解恢复进度。
错误日志是最可靠的。

登录服务器。
使用根帐户。
检查路径:SHOW VARIABLES like 'log_error'; 查看路径: sudo tail -f /var/log/mysql/error.log
查看日志中主要几行: “InnoDB:Doingrecovery”
进行恢复。
“InnoDB:Applybatchcompleted”
进展已向前推进。
“InnoDB:Logscanprogressedpastcheckpoint”
正在进行中。

或者使用命令: 显示进程列表 检查进程。
显示引擎 InNODB 状态 检查恢复状态。
您还可以检查文件大小的变化。
例如,ib_logfile 等临时文件。

总之,记录是最直接的。
你自己看看吧。

如何查看MySQL数据库的死锁日志

好吧,我们来谈谈吧。
要检查MySQL崩溃日志,首先需要进入终端或命令提示符。
你需要连接到MySQL,对吧?输入命令:mysql -hxxxx.xxx.xxx -P3 3 06 -u用户名 -p。
别担心,xxxx.xxx.xxx是你的数据库IP地址,username是你的用户名,那么它会要求你输入密码,对吧?输入后就登录了。

进入MySQL客户端后,需要查看阻塞信息。
可以输入命令:show engine innodb status\G;对于该字符串,您需要添加反斜杠并按 Enter。

然后您会在许多信息中找到“LAST IMPASS DETECTED”部分。
我要画一条红线来标记这条线。

然后你需要分析这个信息,看看哪个事务正在等待哪个锁,哪个锁正在让哪个事务等待。
例如,事务1 正在等待锁,事务2 已经在该位置持有S锁,但仍在等待X锁。

理论上事务2 是可以提交的,对吧,但是日志只显示了最后一部分的阻塞信息。
事实上,由于事务1 也持有锁S,所以事务2 无法获取锁X,事务1 也无法获取锁X,这就构成了死锁。