- 浏览: 2538534 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (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 102861.1命令myisamchk(必须停掉mysql服务,或者所操 ... -
Table_locks_immediate
2014-08-25 15:46 3062Table_locks_immediate表示立即释放表锁数 ... -
mysql分区
2014-02-21 10:38 1846mysql自5.1开始支持分区 ... -
InnoDB 引擎独立表空间 innodb_file_per_table
2013-02-25 11:14 1309http://deeplyloving.iteye.com ... -
mysql监测工具tuning-primer.sh
2013-01-21 17:57 2653【转】http://www.dbasky.net ... -
mysql主从日志的定期清理
2013-01-21 16:24 1153[转]http://wangwei007.blog.51 ... -
[转]Mysql报错:Result consisted of more than one row
2013-01-09 16:25 15862Error Code : 1172 Result consi ... -
根据bin log 分析管理员被莫名删除问题
2013-01-04 17:04 1161============== 根据bin log 分析管理 ... -
mysql中select * for update锁表的问题
2013-01-04 14:07 2508先前介绍过SELECT ... FOR UPDATE的用法 ... -
PDO报错:Cannot execute queries while other unbuffered queries are active.
2012-12-12 17:57 11925用 PDOStatement->execute() 执行 ... -
MySQL死锁导致无法查询
2012-12-11 14:51 2558客服反馈后台无法查询,原因大概知道,是因为MySQL的事务 ... -
mysql性能分析:mysql profiling 应用
2012-12-11 10:26 13441)先打开profiling ==> set pro ... -
mysql体系结构和查看当前的数据库请求
2012-12-07 15:00 2891mysql体系结构: 由 ... -
mysql_error:Error starting thread: Resource temporarily unavailable
2012-11-01 17:57 2108121031 18:53:17 InnoDB: Unable ... -
导出bin log时间段脚本datarecover.sh
2012-09-06 13:34 1242修改 _binlogdir='/data/mysql/m ... -
Mysql备份工具xtraback全量和增量测试
2012-08-17 14:58 3864【转载】http://blog.chinaunix.net/s ... -
数据库中的隔离级别和锁机制
2012-08-09 17:55 1585ANSI/ISO SQL92标准定义了 ... -
mysqldump和mysql命令
2012-08-03 13:44 1380========================= mys ... -
【汇总】mysql join
2012-07-18 11:35 1167标准SQL中CROSS JOIN交叉连接(笛卡尔积)和内连接I ... -
mysql cursor游标的使用,实例
2012-07-17 23:09 1809mysql被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数据库连接数负载能力的方法: 1. **调整InnoDB并发线程数**: 默认情况下,InnoDB存储引擎会根据系统资源自动管理线程并发数。你可以通过设置`innodb_thread_concurrency`参数来限制并发线程...
怎么进入mysql命令行呢? mysql的安装目录下面有个bin目录,先用命令行进入该目录,然后用 mysql -uroot -p123456 ... mysql> show processlist; 命令: show status; 命令:show status like ‘%下面变量%’; Aborted_
在MySQL数据库系统中,最大连接数是一个至关重要的配置参数,它定义了服务器同时可以处理的客户端连接数量。默认情况下,MySQL的最大连接数设置为100,对于大多数小型应用而言,这可能是足够的,但对于流量较大的...
总结来说,这些方法提供了多种杀死MySQL连接的途径,可以根据实际情况选择最适合的方法。在进行此类操作时,请务必谨慎,因为错误的操作可能会导致数据丢失或服务中断。在执行之前,确保你了解每个命令的含义和可能...
* 检查点:检查 MySQL 数据库连接统计,包括打开的连接数、中止的连接数和中止的客户端数 * 检查方法:使用 show status 命令查看连接统计 * 结果解释:检查结果正常,Aborted_connects 0,Threads_connected 2,Max...
MySQL的`SHOW PROCESSLIST`命令是数据库管理员用来监控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...
我们通常情况下要统计数据库的连接数指的是统计总数,没有细分到每个IP上。现在要监控每个IP的连接数,实现方式如下: 方法一: 代码如下:select SUBSTRING_INDEX(host,’:’,1) as ip , count(*) from ...
一、MySQL连接方式 1. 命令行连接:通过终端或命令提示符输入`mysql -u username -p`,然后输入密码,可以直接连接到MySQL服务器。 2. 图形化工具连接:例如MySQL Workbench、phpMyAdmin、Navicat等,提供直观的界面...
* 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 数据库故障排除方案,涵盖了数据库连接数、慢查询日志、数据库总大小、Top 10 大表、主从复制、MySQL 进程和锁死锁等多个方面的知识点。 第一部分:连接数 * 使用 `mysql> status;` 或 `...
MySQL数据库在运行过程中可能会遇到“Too many connections”的错误提示,这意味着服务器上的MySQL实例达到了其最大允许的并发连接数。此问题通常由以下两种情况引起: 1. **并发连接过多**:大量的应用程序或用户...
在高并发场景下,可能需要调整MySQL的最大连接数限制,可以在配置文件中增加如下设置: ```ini [mysqld] max_connections = 100 ``` 默认情况下,`max_connections`的值通常是100,你可以根据实际情况调整这个数值...
`SHOW PROCESSLIST`是MySQL中一个非常实用的命令,它用于查看当前正在执行的SQL查询进程,帮助数据库管理员监控和诊断系统的性能问题。通过这个命令,你可以获取到一系列关于线程的信息,包括线程的ID、用户、主机、...
9. 监控与告警:监控MySQL的CPU、内存、磁盘I/O等资源使用情况,以及监控锁等待、连接数等数据库状态,可以使用`mysqldumpslow`, `pt-online-schema-change`, `Percona Toolkit`等工具。 10. 数据迁移与升级:在...