- 浏览: 2513427 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (676)
- linux运维 (157)
- php (65)
- mysql (78)
- nginx (27)
- apche (18)
- framework (6)
- windows (9)
- IDE工具 (23)
- struts2 (7)
- java (13)
- 移动互联网 (14)
- memcache redis (23)
- shell基础/命令/语法 (37)
- shell (50)
- puppet (4)
- C (11)
- python (9)
- 产品经理 (27)
- Sphinx (4)
- svn (12)
- 设计构建 (12)
- 项目管理 (44)
- SEO (1)
- 网站架构 (26)
- 审时度势 (42)
- 网络 (14)
- 激发事业[书&视频] (81)
- 其它 (12)
- 摄影 (8)
- android (21)
最新评论
-
zhongmin2012:
原文的书在哪里
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
renzhengzhi:
你好,请问个问题,从master同步数据到slave的时候,s ...
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
ibc789:
你好,看了你的文章,我想请教个问题, 我在用 redis的时候 ...
redis 的两种持久化方式及原理 -
iijjll:
写得非常好
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
iijjll:
写得非常好
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器
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
发表评论
-
mysql表修复
2015-04-07 10:16 102381.1命令myisamchk(必须停掉mysql服务,或者所操 ... -
Table_locks_immediate
2014-08-25 15:46 2968Table_locks_immediate表示立即释放表锁数 ... -
mysql分区
2014-02-21 10:38 1805mysql自5.1开始支持分区 ... -
InnoDB 引擎独立表空间 innodb_file_per_table
2013-02-25 11:14 1269http://deeplyloving.iteye.com ... -
mysql监测工具tuning-primer.sh
2013-01-21 17:57 2616【转】http://www.dbasky.net ... -
mysql主从日志的定期清理
2013-01-21 16:24 1123[转]http://wangwei007.blog.51 ... -
[转]Mysql报错:Result consisted of more than one row
2013-01-09 16:25 15800Error Code : 1172 Result consi ... -
根据bin log 分析管理员被莫名删除问题
2013-01-04 17:04 1120============== 根据bin log 分析管理 ... -
mysql中select * for update锁表的问题
2013-01-04 14:07 2478先前介绍过SELECT ... FOR UPDATE的用法 ... -
PDO报错:Cannot execute queries while other unbuffered queries are active.
2012-12-12 17:57 11793用 PDOStatement->execute() 执行 ... -
MySQL死锁导致无法查询
2012-12-11 14:51 2519客服反馈后台无法查询,原因大概知道,是因为MySQL的事务 ... -
mysql性能分析:mysql profiling 应用
2012-12-11 10:26 13111)先打开profiling ==> set pro ... -
mysql体系结构和查看当前的数据库请求
2012-12-07 15:00 2862mysql体系结构: 由 ... -
mysql_error:Error starting thread: Resource temporarily unavailable
2012-11-01 17:57 2070121031 18:53:17 InnoDB: Unable ... -
导出bin log时间段脚本datarecover.sh
2012-09-06 13:34 1192修改 _binlogdir='/data/mysql/m ... -
Mysql备份工具xtraback全量和增量测试
2012-08-17 14:58 3818【转载】http://blog.chinaunix.net/s ... -
数据库中的隔离级别和锁机制
2012-08-09 17:55 1550ANSI/ISO SQL92标准定义了 ... -
mysqldump和mysql命令
2012-08-03 13:44 1350========================= mys ... -
【汇总】mysql join
2012-07-18 11:35 1140标准SQL中CROSS JOIN交叉连接(笛卡尔积)和内连接I ... -
mysql cursor游标的使用,实例
2012-07-17 23:09 1762mysql被oracle收购后,从mysql-5.5开始, ...
相关推荐
./mysqladmin -uadmin -p -h10.140.1.1 processlist2、只查看当前连接数(Threads就是连接数.): ./mysqladmin -uadmin -p -h10.140.1.1 status 、查看当前所有连接的详细资料: mysqladmin -uroot -proot ...
怎么进入mysql命令行呢? mysql的安装目录下面有个bin目录,先用命令行进入该目录,然后用 mysql -uroot -p123456 ... mysql> show processlist; 命令: show status; 命令:show status like ‘%下面变量%’; Aborted_
当前正在执行的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...
通过information_schema.processlist表中的连接信息生成需要处理掉的MySQL连接的语句临时文件,然后执行临时文件中生成的指令。 代码如下: mysql> select concat(‘KILL ‘,id,’;’) from information_schema....
我们通常情况下要统计数据库的连接数指的是统计总数,没有细分到每个IP上。现在要监控每个IP的连接数,实现方式如下: 方法一: 代码如下:select SUBSTRING_INDEX(host,’:’,1) as ip , count(*) from ...
数据库连接数文档 连接数过多 爆掉了数据库,无论重启tomcat或者是mysql,都是浮云 无用
# MySQL的最大连接数,如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接数越多,介于MySQL会为每个连接提供连接缓冲区,就会开销越多的内存,...
背景:把mysql换成mysqli时出现,连接数过多,其实际上并不是,原因是我挪动了一下php的sock文件位置导致,因这几个socket修改没有修改完全,于是出现了too many connections ,从mysql里show processlist并没有发现...
MySQL 系统信息函数 version() 用于返回当前 MySQL 的版本号,“show processlist” 用于显示 MySQL 运行时相关线程的运行状态,这些信息包括连接数、连接状态等,通过这些信息可以帮助使用者识别出有问题的查询语句...
max_user_connects 最大并发数 连接数 0没有限制 max_connects_per_hour 每个小时最大的并发数 0没有限制 【数据库的基本CLI】 1、show databases; 查看服务器中的所有数据库 2、select user(); 查看当前用户 ...
#/bin/sh #检测mysql server是否正常提供服务 mysqladmin -u sky -ppwd -h localhost ping ...#获取当前数据库的连接数 mysql -u root -p123456 -BNe "select host,count(host) from processlist group by host;
pt-kill 是一个优秀的kill MySQL连接的一个工具,是percona toolkit的一部分,在因为空闲连接较多导致超过最大连接数、某个有问题的sql导致mysql负载很高时,都需要将一些连接kill掉,这个工具主要就是这个用途。...