当我在我的数据库服务器上运行顶部时,我得到的mysqld已经运行了4:00.51,并继续上升。
我认为这意味着一个MySQL的进程已经从这里的其他职位运行了很长时间。 它没有设置为累积模式,因为如果情况如此,标题看起来会变成CTIME。
我想知道的是,如果这是正常的网站,使大量的个人连接使用PHP。 我不应该有任何长时间运行的进程,这将持续到这么长的一个MySQL连接,最多只有几秒钟。
我错误地认为这次涉及到一个连接/进程运行? 我想通常我会看到它在顶部闪现,而不是随着这个数字的增长而停留在那里。
当您查看top并查看mysqld , 每个实例只应该有一个mysqld 。 老版本的服务器编译的mysqld产生了许multithreading。 我会假设你没有使用这样的。
要看到个人关系,你可以做两件事情之一
在mysql客户端运行SHOW PROCESSLIST; (第三列Host的传入连接的来源)
在操作系统中运行
netstat | grep -i mysql netstat | grep 3306 为了强调, 每个实例只能看到一个mysqld进程 。
如果你想重复检查顶部的时间值,请询问mysqld
如果你有MySQL 5.1+,运行这个:
SELECT TRIM(REPLACE(CONCAT( IF(dy=0,'',IF(dy=1,'1 day ',CONCAT(dy,' days '))), IF(hr=0,'',IF(hr=1,'1 hr ', CONCAT(hr,' hrs '))), IF(mn=0,'',IF(mn=1,'1 min ',CONCAT(mn,' mins '))), IF(sc=0,'',IF(sc=1,'1 sec ',CONCAT(sc,' secs ')))),' ',' ')) TimeDisplay FROM (SELECT dy,hr,mn,MOD(sec_aaaa,60) sc FROM (SELECT dy,hr,FLOOR((sec_aaa - dy*86400 - hr*3600)/60) mn,sec_aaa sec_aaaa FROM (SELECT dy,FLOOR((sec_aa - (dy*86400))/3600) hr,sec_aa sec_aaa FROM (SELECT FLOOR(sec_a/86400) dy,sec_a sec_aa FROM ( SELECT variable_value sec_a FROM information_schema.global_status WHERE variable_name = 'Uptime' ) A) AA) AAA) AAAA) B;
如果你有MySQL 5.0,运行这个
MYSQL_CONN="-uroot -ppassword" UPTIME_SEC=`mysql ${MYSQL_CONN} -A -N -e"SHOW GLOBAL STATUS LIKE 'Uptime'" | awk '{print $2}'` SQLTIME="SELECT TRIM(REPLACE(CONCAT(" SQLTIME="${SQLTIME} IF(dy=0,'',IF(dy=1,'1 day ',CONCAT(dy,' days ')))," SQLTIME="${SQLTIME} IF(hr=0,'',IF(hr=1,'1 hr ', CONCAT(hr,' hrs ')))," SQLTIME="${SQLTIME} IF(mn=0,'',IF(mn=1,'1 min ',CONCAT(mn,' mins ')))," SQLTIME="${SQLTIME} IF(sc=0,'',IF(sc=1,'1 sec ',CONCAT(sc,' secs ')))),' ',' ')) TimeDisplay" SQLTIME="${SQLTIME} FROM (SELECT dy,hr,mn,MOD(sec_aaaa,60) sc" SQLTIME="${SQLTIME} FROM (SELECT dy,hr,FLOOR((sec_aaa - dy*86400 - hr*3600)/60) mn,sec_aaa sec_aaaa" SQLTIME="${SQLTIME} FROM (SELECT dy,FLOOR((sec_aa - (dy*86400))/3600) hr,sec_aa sec_aaa" SQLTIME="${SQLTIME} FROM (SELECT FLOOR(sec_a/86400) dy,sec_a sec_aa" SQLTIME="${SQLTIME} FROM (SELECT ${UPTIME_SEC} sec_a ) A) AA) AAA) AAAA) B" MYSQL_START_TIME=`mysql ${MYSQL_CONN} -A -N -e"${SQLTIME}"` echo ${MYSQL_START_TIME}
这会给你mysqld已经运行的秒数。
如果你想看到mysqld开始的date和时间
MySQL 5.1+
select (now() - interval variable_value second) MySQLStartTime from information_schema.global_status where variable_name='uptime';
MySQL 5.0
MYSQL_CONN="-uroot -ppassword" UPTIME_SEC=`mysql ${MYSQL_CONN} -A -N -e"SHOW GLOBAL STATUS LIKE 'Uptime'" | awk '{print $2}'` MYSQL_START_TIME=`mysql ${MYSQL_CONN} -A -N -e"SELECT (NOW() - INTERVAL ${UPTIME_SEC} SECOND) MySQLStartTime"` echo ${MYSQL_START_TIME}
试一试 !!!