`
zhengdl126
  • 浏览: 2538534 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

查看mysql连接数processlist

阅读更多


mysqladmin -uiseeuon -pmtcera2009 processlist -v
看一下当前占CPU高的时候哪些语句在执行
然后再对那些语句添加索引,一般都会降下来的



1、查看当前所有连接的详细资料:
mysqladmin -uroot -proot processlist
D:\MySQL\bin>mysqladmin -uroot -proot processlist
+-----+------+----------------+---------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-----+------+----------------+---------+---------+------+-------+------------------+
| 591 | root | localhost:3544 | bbs | Sleep | 25 | | |
| 701 | root | localhost:3761 | | uery | 0 | | show processlist |
+-----+------+----------------+---------+---------+------+-------+------------------+

2、只查看当前连接数(Threads就是连接数.):
mysqladmin -uroot -proot status
D:\MySQL\bin>mysqladmin -uroot -proot status
Uptime: 2102 Threads: 3 Questions: 15531 Slow queries: 0 Opens: 0 Flush tab
les: 1 Open tables: 61 Queries per second avg: 7.389

3、修改mysql最大连接数:
打开my.ini,修改max_connections=100(默认为100)。
命令: show processlist;
如果是root帐号,你能看到所有用户的当前连接。如果是其它普通帐号,只能看到自己占用的连接。
show processlist;只列出前100条,如果想全列出请使用show full processlist;

4.mysqladmin extended-status
原来看到有人在博客上写监控服务器的脚本,出现问题就发邮件,手机短信报警的文章,感觉很神奇。过了一段时间学习的知识慢慢多了,现

在回想起来其实也很简单。基本思路就是用shell写命令去检测服务器(这里说的服务器可以有很多种,比如mysql,apache,nginx等),然后判

断返回的状态,失败的话就发邮件报警。最后把这个脚本加入到cron程序中让它定期运行,这样就可以检测mysql的健康状态了。下面是我写的

一个简单的脚本:
# test.sh

#!/bin/bash         #指定要调用的shell解释器

/usr/bin/mysqladmin -uroot ping &>/dev/null
#这句是用mysqladmin命令,ping参数是检测mysql服务器的健康状态,如果mysql进程挂掉则会报错,&>/dev/null是把错误重定向,让错误信

息不要在屏幕上输出来
    
if [ -z $? ]       #关键在$?这个变量 ,它是代表上一条命令执行后的退出状态,如果是0的话表示成功,其他                    # 非0

参数表示失败,另外这是在shell中的if语法,-z参数判断条件是否为0,
then
# do nothing ,$?为0的话表示执行成功,mysql进程健康
else
mail -s "mysql server cracked down" jackywdx@163.com
fi
这就是一个最简单的检测脚本,别忘了要运行chmod +x test.sh让它有执行的属性。判断mysql进程是否健康其实还用很多方法,比如用ps aux

| grep mysql | grep -v mysql判断,也可以直接执行mysql连接mysql看看,或者还有mysqltest命令好像也可以用,不过没用过。在发送邮件

的时候要注意本机要启动了一个mail服务器才行,如sendmail或者qmail都可以,如果没有安装可以这里有关sendmail架设的文章,邮件服务器之Sendmail应用专题--IT168服务器频道
下面是把这个脚本放入cron,让它定期去执行,命令如下:
crontab -e 敲回车,进入一个文本编辑页面,放入下面一条
*/5 * * * * /root/test.sh &>/dev/null
再退出保存即可(不会退出的话按住shift键,再按再次Z即可 ^_^)
上面的命令是让cron每隔5分钟运行一次test.sh脚本。具体的参数自己上网查查啦。
这只是一个很简单的监控脚本,更具体一点就是如果发现进程挂掉,则要去日志文件查找错误信息,这些就比较麻烦了一点,要用到sed或者awk的来提取出错的信息,以后有机会再试试写。

 

 

 

------------------------------   show processlist;

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

| Id | User | Host           | db  | Command | Time| State    | Info                                                                                        

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

|207|root |192.168.0.20:51718 |mytest | Sleep   | 5   |        | NULL                                                                                              

|208|root |192.168.0.20:51719 |mytest | Sleep   | 5   |        | NULL      

|220|root |192.168.0.20:51731 |mytest |Query   | 84  | Locked |

select bookname,culture,value,type from book where id=001

先简单说一下各列的含义和用途,第一列,id,不用说了吧,一个标识,你要kill一个语句的时候很有用。user列,显示单前用户,如果不是root, 这个命令就只显示你权限范围内的sql语句。host列,显示这个语句是从哪个ip的哪个端口上发出的。呵呵,可以用来追踪出问题语句的用户。db列,显 示这个进程目前连接的是哪个数据库。command列,显示当前连接的执行的命令,一般就是休眠(sleep),查询(query),连接 (connect)。time列,此这个状态持续的时间,单位是秒。state列,显示使用当前连接的sql语句的状态,很重要的列,后续会有所有的状态 的描述,请注意,state只是语句执行中的某一个状态,一个sql语句,已查询为例,可能需要经过copying to tmp table,Sorting result,Sending data等状态才可以完成,info列,显示这个sql语句,因为长度有限,所以长的sql语句就显示不全,但是一个判断问题语句的重要依据。

这个命令中最关键的就是state列,mysql列出的状态主要有以下几种:

  Checking table
 正在检查数据表(这是自动的)。
 Closing tables
 正在将表中修改的数据刷新到磁盘中,同时正在关闭已经用完的表。这是一个很快的操作,如果不是这样的话,就应该确认磁盘空间是否已经满了或者磁盘是否正处于重负中。
 Connect Out
 复制从服务器正在连接主服务器。
 Copying to tmp table on disk
 由于临时结果集大于tmp_table_size,正在将临时表从内存存储转为磁盘存储以此节省内存。
 Creating tmp table
 正在创建临时表以存放部分查询结果。
 deleting from main table
 服务器正在执行多表删除中的第一部分,刚删除第一个表。
 deleting from reference tables
 服务器正在执行多表删除中的第二部分,正在删除其他表的记录。
 Flushing tables
 正在执行FLUSH TABLES,等待其他线程关闭数据表。
 Killed
 发送了一个kill请求给某线程,那么这个线程将会检查kill标志位,同时会放弃下一个kill请求。MySQL会在每次的主循环中检查kill标志 位,不过有些情况下该线程可能会过一小段才能死掉。如果该线程程被其他线程锁住了,那么kill请求会在锁释放时马上生效。
 Locked
 被其他查询锁住了。
 Sending data
 正在处理SELECT查询的记录,同时正在把结果发送给客户端。
 Sorting for group
 正在为GROUP BY做排序。
 Sorting for order
 正在为ORDER BY做排序。
 Opening tables
 这个过程应该会很快,除非受到其他因素的干扰。例如,在执ALTER TABLE或LOCK TABLE语句行完以前,数据表无法被其他线程打开。正尝试打开一个表。
 Removing duplicates
 正在执行一个SELECT DISTINCT方式的查询,但是MySQL无法在前一个阶段优化掉那些重复的记录。因此,MySQL需要再次去掉重复的记录,然后再把结果发送给客户端。
 Reopen table
 获得了对一个表的锁,但是必须在表结构修改之后才能获得这个锁。已经释放锁,关闭数据表,正尝试重新打开数据表。
 Repair by sorting
 修复指令正在排序以创建索引。
 Repair with keycache
 修复指令正在利用索引缓存一个一个地创建新索引。它会比Repair by sorting慢些。
 Searching rows for update
 正在讲符合条件的记录找出来以备更新。它必须在UPDATE要修改相关的记录之前就完成了。
 Sleeping
 正在等待客户端发送新请求.
 System lock
 正在等待取得一个外部的系统锁。如果当前没有运行多个mysqld服务器同时请求同一个表,那么可以通过增加--skip-external-locking参数来禁止外部系统锁。
 Upgrading lock
 INSERT DELAYED正在尝试取得一个锁表以插入新记录。
 Updating
 正在搜索匹配的记录,并且修改它们。
 User Lock
 正在等待GET_LOCK()。
 Waiting for tables
 该线程得到通知,数据表结构已经被修改了,需要重新打开数据表以取得新的结构。然后,为了能的重新打开数据表,必须等到所有其他线程关闭这个表。以下几 种情况下会产生这个通知:FLUSH TABLES tbl_name, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE,或OPTIMIZE TABLE。
 waiting for handler insert
 INSERT DELAYED已经处理完了所有待处理的插入操作,正在等待新的请求。
 大部分状态对应很快的操作,只要有一个线程保持同一个状态好几秒钟,那么可能是有问题发生了,需要检查一下。
 还有其他的状态没在上面中列出来,不过它们大部分只是在查看服务器是否有存在错误是才用得着。

mysql手册里有所有状态的说明,链接如下:http://dev.mysql.com/doc/refman/5.0/en/general-thread-states.html

分享到:
评论
1 楼 天空之城 2009-12-22  
学习了,谢谢LZ!

相关推荐

    查看mysql当前连接数的方法详解

     ./mysqladmin -uadmin -p -h10.140.1.1 processlist2、只查看当前连接数(Threads就是连接数.):  ./mysqladmin -uadmin -p -h10.140.1.1 status  、查看当前所有连接的详细资料:  mysqladmin -uroot -proot ...

    快速增加MYSQL数据库连接数负载能力的方法分享

    以下是一些提高MySQL数据库连接数负载能力的方法: 1. **调整InnoDB并发线程数**: 默认情况下,InnoDB存储引擎会根据系统资源自动管理线程并发数。你可以通过设置`innodb_thread_concurrency`参数来限制并发线程...

    MySql状态查看方法 MySql如何查看连接数和状态?

    怎么进入mysql命令行呢? mysql的安装目录下面有个bin目录,先用命令行进入该目录,然后用 mysql -uroot -p123456 ... mysql> show processlist; 命令: show status; 命令:show status like ‘%下面变量%’; Aborted_

    修改MYSQL最大连接数的3种方法分享

    在MySQL数据库系统中,最大连接数是一个至关重要的配置参数,它定义了服务器同时可以处理的客户端连接数量。默认情况下,MySQL的最大连接数设置为100,对于大多数小型应用而言,这可能是足够的,但对于流量较大的...

    批量杀死MySQL连接的四种方法详解

    总结来说,这些方法提供了多种杀死MySQL连接的途径,可以根据实际情况选择最适合的方法。在进行此类操作时,请务必谨慎,因为错误的操作可能会导致数据丢失或服务中断。在执行之前,确保你了解每个命令的含义和可能...

    mysql巡检报告.pdf

    * 检查点:检查 MySQL 数据库连接统计,包括打开的连接数、中止的连接数和中止的客户端数 * 检查方法:使用 show status 命令查看连接统计 * 结果解释:检查结果正常,Aborted_connects 0,Threads_connected 2,Max...

    通过mysql show processlist 命令检查mysql锁的方法

    MySQL的`SHOW PROCESSLIST`命令是数据库管理员用来监控MySQL服务器中当前运行的线程和查询的重要工具。这个命令能够提供关于各个线程的详细信息,帮助诊断和解决性能问题,尤其是与锁有关的问题。下面我们将深入探讨...

    查看MySQL客户端连接情况

    当前正在执行的Mysql连接信息 SHOW PROCESSLIST; 1102 root 192.168.2.157:38994 data Query 0 starting SHOW PROCESSLIST 1103 root 192.168.2.157:38998 test123 Sleep 6 查看不同状态的链接数 show status like...

    如何查看连接MYSQL数据库的IP信息

    我们通常情况下要统计数据库的连接数指的是统计总数,没有细分到每个IP上。现在要监控每个IP的连接数,实现方式如下: 方法一: 代码如下:select SUBSTRING_INDEX(host,’:’,1) as ip , count(*) from ...

    mysql的连接数据问题

    一、MySQL连接方式 1. 命令行连接:通过终端或命令提示符输入`mysql -u username -p`,然后输入密码,可以直接连接到MySQL服务器。 2. 图形化工具连接:例如MySQL Workbench、phpMyAdmin、Navicat等,提供直观的界面...

    mysql语法文档

    * MYSQL *mysql_real_connect(MYSQL *mysql,const char *host,const char *user,const char *password,const char *db,unsigned int port,const char *unix_socket,unsigned int client_flag):建立mysql连接 ...

    mysql日常维护

    综上所述,通过对MySQL连接数和锁信息的持续监控与优化,可以有效提升数据库系统的稳定性和响应速度,从而更好地满足业务需求。此外,还需要根据实际情况定期审查和调整相关配置参数,确保系统能够在不同的负载条件...

    mysql数据库故障排除方案.pdf

    本文档主要介绍了 MySQL 数据库故障排除方案,涵盖了数据库连接数、慢查询日志、数据库总大小、Top 10 大表、主从复制、MySQL 进程和锁死锁等多个方面的知识点。 第一部分:连接数 * 使用 `mysql> status;` 或 `...

    关于mysql提示too many connections问题解决方法.doc

    MySQL数据库在运行过程中可能会遇到“Too many connections”的错误提示,这意味着服务器上的MySQL实例达到了其最大允许的并发连接数。此问题通常由以下两种情况引起: 1. **并发连接过多**:大量的应用程序或用户...

    Mysql远程访问的方法

    在高并发场景下,可能需要调整MySQL的最大连接数限制,可以在配置文件中增加如下设置: ```ini [mysqld] max_connections = 100 ``` 默认情况下,`max_connections`的值通常是100,你可以根据实际情况调整这个数值...

    mysql show processlist 显示mysql查询进程

    `SHOW PROCESSLIST`是MySQL中一个非常实用的命令,它用于查看当前正在执行的SQL查询进程,帮助数据库管理员监控和诊断系统的性能问题。通过这个命令,你可以获取到一系列关于线程的信息,包括线程的ID、用户、主机、...

    mysql dba 常用脚本

    9. 监控与告警:监控MySQL的CPU、内存、磁盘I/O等资源使用情况,以及监控锁等待、连接数等数据库状态,可以使用`mysqldumpslow`, `pt-online-schema-change`, `Percona Toolkit`等工具。 10. 数据迁移与升级:在...

Global site tag (gtag.js) - Google Analytics