MySQL DELETE语句HANG住问题解决纪实

1、MySQL 简单的delete语句hang住

同事说线上一个库执行简单的delete卡住了,我去check线上库的负载很低,show full processlist;也没有啥慢卡住或者锁的sql在执行,那问题在哪里呢?去查看错误日志,有如下信息

2017-03-14T01:32:22.628309Z 6553507 [Note] Access denied for user 'root'@'127.0.0.1' (using password: NO)

2017-03-14T01:32:23.491555Z 6553508 [Note] Access denied for user 'root'@'127.0.0.1' (using password: NO)

2017-03-14T01:32:24.718334Z 6553515 [Note] Access denied for user 'root'@'127.0.0.1' (using password: NO)

2017-03-14T01:32:24.755244Z 6553516 [Note] Access denied for user 'root'@'127.0.0.1' (using password: NO)

2017-03-14T01:32:25.816457Z 6553517 [Note] Access denied for user 'root'@'127.0.0.1' (using password: NO)

2017-03-14T01:32:26.908096Z 6553519 [Note] Access denied for user 'root'@'127.0.0.1' (using password: NO)

2017-03-14T01:32:28.078465Z 6553523 [Note] Access denied for user 'root'@'127.0.0.1' (using password: NO)

2017-03-14T01:32:29.102774Z 6553527 [Note] Access denied for user 'root'@'127.0.0.1' (using password: NO)

2017-03-14T01:32:30.205321Z 6553528 [Note] Access denied for user 'root'@'127.0.0.1' (using password: NO)

 

 

 

用more查看出现这个的最新时间是2016-05-03日,已经是很久以前的事情了

[root@prod_3_11 mysql]# more /usr/local/mysql/mysqld.log |grep 127.0.0.1 |more

2016-05-03T08:57:13.997474Z 1701 [Note] Access denied for user 'root'@'127.0.0.1' (using password: NO)

2016-05-03T08:57:16.117305Z 1702 [Note] Access denied for user 'root'@'127.0.0.1' (using password: NO)

2016-05-03T08:57:30.661653Z 1704 [Note] Access denied for user 'root'@'127.0.0.1' (using password: NO)

2016-05-03T08:58:16.491907Z 1705 [Note] Access denied for user 'root'@'127.0.0.1' (using password: NO)

2016-05-03T08:58:31.221777Z 1707 [Note] Access denied for user 'root'@'127.0.0.1' (using password: NO)

2016-05-03T08:59:30.861211Z 1709 [Note] Access denied for user 'root'@'127.0.0.1' (using password: NO)

2016-05-03T09:00:12.617069Z 1710 [Note] Access denied for user 'root'@'127.0.0.1' (using password: NO)

 

 

 

2、问题分析

突然想到2016-05-03,刚在这太mysql库里面添加了zabbix监控,难道是zabbix的agent引起的问题?看到这个登陆失败,于是关闭zabbix的agent

[root@prod_3_11 mysql]# killallzabbix_agentd

[root@prod_3_11 mysql]#

 

在查看mysql的错误日志/usr/local/mysql/mysqld.log,没有新的Access deniedfor user 'root'@'127.0.0.1' (using password: NO)错误信息过来,而mysql库也稳定下来了,看来问题出在zabbix的监控访问上面。

 

去查看zabbix的agent'启动方式,找到zabbix配置文件zabbix_agentd.conf

[root@prod_3_11 ~]# ps -eaf|grep zabbix

zabbix   27118     1  0 13:54 ?        00:00:00 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf

zabbix   27119 27118  0 13:54 ?        00:00:00 /usr/sbin/zabbix_agentd: collector [idle 1 sec]         

zabbix   27120 27118  0 13:54 ?        00:00:00 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection]

zabbix   27121 27118  0 13:54 ?        00:00:00 /usr/sbin/zabbix_agentd: listener #2 [waiting for connection]

zabbix   27122 27118  0 13:54 ?        00:00:00 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection]

zabbix   27123 27118  0 13:54 ?        00:00:00 /usr/sbin/zabbix_agentd: active checks #1 [idle 1 sec]  

root     27590 15250  0 13:58 pts/4    00:00:00 grep zabbix

[root@prod_3_11 ~]#

 

 

 

再查看配置文件/etc/zabbix/zabbix_agentd.conf,进入到最文件最末端,找到关于mysql的配置

UserParameter=mysql.version,mysql -V

UserParameter=mysql.status[*],/usr/local/zabbix/chk_mysql_1.sh $1 $2

UserParameter=mysql.ping,nmap 192.168.3.11 -p 3317|grep open |wc -l

UserParameter=mongodmonitor,/usr/local/zabbix/mongodmonitor.sh "$1"

 

 

 

关于mysql的有2行记录,执行下这2行记录,看是否能顺利执行

(1)第一行是mysql.ping,ok,可以执行

         [root@prod_3_11 ~]# nmap 192.168.3.11 -p 3317|grep open |wc -l

         1

         [root@prod_3_11 ~]#

 

(2)第二行是执行一个脚本

         [root@prod_3_11 ~]# sh /usr/local/zabbix/chk_mysql_1.sh

         Please input one arguement:

         Usage:/usr/local/zabbix/chk_mysql_1.sh(Uptime|Com_update|Slow_queries|Com_select|Com_rollback|Questions)

         [root@prod_3_11 ~]# sh /usr/local/zabbix/chk_mysql_1.sh Com_update

         mysqladmin: connect to server at '127.0.0.1' failed

         error: 'Access denied for user 'root'@'127.0.0.1' (using password: NO)'

 

         [root@prod_3_11 ~]#

 

         看到了,执行报错“'Accessdenied for user 'root'@'127.0.0.1' (using password: NO)'”,这个错误也是在mysql的后台错误日志频繁出现的,终于找到了,那么这里就要去看下这个脚本/usr/local/zabbix/chk_mysql_1.sh,为啥会频繁报错。

 

3、问题解决  

看到脚本里面的密码好像是旧的,需要修复脚本/usr/local/zabbix/chk_mysql_1.sh,更新里面的用户名密码。

 

然后再启动zabbix的客户端引擎。

/usr/local/zabbix/sbin/zabbix_agentd -c/usr/local/zabbix/conf/zabbix_agentd.conf

 

回过头,查看mysql窗口等待的delete语句,已经消失了,查看数据,已经被删除了。

 

### 回答1: MySQL中的DELETE语句用于从表中删除行。它的基本语法如下: ``` DELETE FROM table_name WHERE condition; ``` 其中,`table_name`是要删除数据的表名,`condition`是删除数据的条件。 如果您想删除表中的所有数据,可以省略`WHERE`子句,如下所示: ``` DELETE FROM table_name; ``` 请注意,删除操作是不可逆的,因此在执行此操作之前,最好备份数据。 ### 回答2: MySQL中的DELETE语句用于从数据表中删除数据。DELETE语句的基本语法为: DELETE FROM 表名 WHERE 条件; 其中,表名表示要删除数据的表名称,WHERE子句用于指定删除数据的条件。 DELETE语句的执行过程如下: 1. 解析语句MySQL首先会解析DELETE语句,检查语法的正确性。 2. 访问权限检查:MySQL会检查当前用户是否有删除数据的权限。如果没有权限,将会返回错误信息。 3. 执行条件判断:MySQL会根据WHERE子句的条件进行条件判断,确定满足条件的数据行。 4. 锁定行:MySQL会对满足条件的数据行加锁,防止其他用户对这些行进行修改。 5. 删除数据行:满足条件的数据行被删除。 6. 更新索引:如果删除数据行导致索引的变化,MySQL会根据需要进行索引的更新。 7. 释放锁:删除操作完成后,MySQL会释放对数据行的锁定。 需要注意的是,如果没有指定WHERE子句,DELETE语句将会删除表中的所有数据。因此,在使用DELETE语句时,务必谨慎,确认要删除的数据。 另外,DELETE语句还支持使用LIMIT子句限制删除的行数。例如,可以使用DELETE FROM 表名 WHERE 条件 LIMIT 数量来限制删除的行数。 总而言之,DELETE语句MySQL中用于删除数据表中数据的重要操作,使用时需要注意语法的准确性和条件的设置,同时也要谨慎对待删除的数据。 ### 回答3: MySQLDELETE语句用于从数据表中删除一条或多条记录。DELETE语句的基本语法如下: ``` DELETE FROM 表名 WHERE 条件; ``` 其中,表名表示要删除记录的数据表名称,条件用于指定要删除的记录的筛选条件。 例如,我们有一个名为"students"的表,其中包含了学生的姓名(name)和年龄(age)两列。现在,我们想要删除年龄小于18岁的学生记录。可以使用以下DELETE语句实现: ``` DELETE FROM students WHERE age < 18; ``` 执行该语句后,MySQL将会删除students表中年龄小于18岁的学生记录。 此外,DELETE语句还可以与其他SQL语句结合使用,例如可以使用子查询来指定要删除的记录。例如,我们可以删除学生表中年龄小于18岁的记录,并且这些学生所在的班级为"ClassA",可以使用以下DELETE语句: ``` DELETE FROM students WHERE age < 18 AND class = (SELECT id FROM classes WHERE class_name = 'ClassA'); ``` 上述语句中,首先通过子查询获取了班级名为"ClassA"的班级ID,然后使用这个ID作为条件指定要删除的学生记录。 总之,DELETE语句MySQL中用于删除数据表中记录的重要语句,可以根据需要使用条件和子查询来进行灵活的删除操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值