怎么查看mysql binlog dump线程

怎么查看mysql binlog dump线程,第1张

主库上记录二进制日志,也就是binlog日志。

备库将主库的二进制日志复制到其本地的中继日志中。首先,备库会启动一个工作线程,称为I/O线程,I/O线程跟主库建立一个普通的客户端连接,然后在主库上启动一个特殊的二进制转存(Binglog Dump)线程,这个转存线程会读取主库上的二进制日志中事件,并发送给从库的I/O线程;如果主库没有更新信息将进入休眠。

备库的SQL线程执行最后一步,该线程从中继日志中读取事件并在备库执行,从而实现备库数据的更新。

$ ps -mp <PID>

例如查看mysqld进程中的线程

$ ps aux | grep mysqld

mysql 3496 0.7 51.7 4249652 2089140 ? Sl Dec05 10:42 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/data --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/lib/data/gk-compiler.err --pid-file=/var/lib/data/gk-compiler.pid --socket=/var/lib/mysql/mysql.sock --port=3306

从输出结果可看出mysqld的PID是3496,继续执行如下命令

$ ps -mp 3496

PID TTY TIME CMD

3496 ?00:10:42 mysqld

- -00:00:00 -

- -00:00:00 -

- -00:00:00 -

- -00:00:00 -

- -00:00:00 -

- -00:00:00 -

- -00:00:00 -

- -00:00:00 -

- -00:00:00 -

- -00:00:00 -

- -00:00:00 -

- -00:00:00 -

- -00:00:00 -

- -00:00:00 -

- -00:00:33 -

- -00:00:00 -

- -00:02:18 -

- -00:01:42 -

- -00:02:09 -

- -00:01:48 -

- -00:02:05 -

输出的信息中“3496 ?00:10:42 mysqld”这一行下面的都是该进程内的线程

1,查看数据库的隔离级别:

mysql>select @@tx_isolation

2,去查看先当前库的线程情况:

mysql>show processlist

没有看到正在执行的慢SQL记录线程,再去查看innodb的事务表INNODB_TRX,看下里面是否有正在锁定的事务线程,看看ID是否在show full processlist里面的sleep线程中,如果是,就证明这个sleep的线程事务一直没有commit或者rollback而是卡住了,我们需要手动kill掉。

mysql>SELECT * FROM information_schema.INNODB_TRX

如果有记录,则找到trx_mysql_thread_id这个字段对应的id, 将其kill掉。假如id=100

mysql->kill 100

SELECT CONCAT_WS('','kill',' ',t.trx_mysql_thread_id,'')a FROM information_schema.INNODB_TRX t

4,总结分析

表数据量也不大,按照普通的情况来说,简单的update应该不会造成阻塞的,mysql都是autocommit,不会出现update卡住的情况,去查看下autocommit的值。

mysql>select @@autocommit

1表示自动提交。0表示不自动提交。

如果你发现自己的数据库autocommit=0,将它改正吧。

解除死锁的两种方法:

(1)终止(或撤销)进程。终止(或撤销)系统中的一个或多个死锁进程,直至打破循环环路,使系统从死锁状态中解除出来。

(2)抢占资源。从一个或多个进程中抢占足够数量的资源,分配给死锁进程,以打破死锁状态。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/6159176.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-16
下一篇2023-03-16

发表评论

登录后才能评论

评论列表(0条)

    保存