## - http://linuxchannel.net/ ## ## [changes] ## - 2013.05.27 : line join ## - 2012.04.04 : support MySQL 5.5 ## - 2004.12.30 : add some stat, vars ## - 2004.10.09 : add usage ## - 2004.09.17 : support multi-resource link ## - 2004.06.17 : support FreeBSD and MySQL4.0.20 ## - 2003.08.28 : associative array tunning ## - 2003.08.11 : fixed, CRITICAL_LIFE_TIME ## - 2003.08.07 : fixed, div zero ## - 2003.08.05 : add each get mode, see ex9) ## - 2003.07.06 : add more server status and variables(extended comments) ## - 2003.07.03 : add others database status(if available) ## - 2003.01.26 : bug fixed, and upgraded comments, support MySQL 4.0.x ## - 2003.01.24 : add status of [Threads_cached] ## - 2003.01.23 : fixed errata ## - 2003.01.20 : add parsing to HTML ## - 2003.01.19 : add comments ## - 2003.01.10 : get mydb, status, vars ## ## [references] ## - http://www.mysql.com/doc/en/SHOW_TABLE_STATUS.html ## - http://www.mysql.com/doc/en/SHOW_STATUS.html ## - http://www.mysql.com/doc/en/SHOW_VARIABLES.html ## - http://www.mysql.com/information/presentations/presentation-oscon2000-20000719/ ## - http://www.mysql.com/doc/en/MySQL_Optimisation.html ## ## [download] ## - http://ftp.linuxchannel.net/devel/php_mysql_status/ ## - download 'class.mysql.status.php.txt' file and rename to class.mysql.status.php ## ## [special] example ## a special user 'status' addition ## - MySQL 3.23.x ## mysql> GRANT SELECT ON *.* TO status@yourhost IDENTIFIED BY 'yourepassword'; ## - MySQL 4.0.3 over ## mysql> GRANT SELECT, SHOW DATABASES ON *.* TO status@yourhost IDENTIFIED BY 'yourepassword'; ## - or ## mysql> UPDATE mysql.db SET Db = '%' WHERE User = 'status'; ## ## [usage] ## usage : object mysql_status[( [int what [, mixed db [, bool detail [, resource link]]]] )] ## object->tohtml(); ## ## ex1) all status view(exclude all databases and detail view) ## $status = new mysql_status; // default $what 7 ## $status->tohtml(); ## ## ex2) only my database status view ## $status = new mysql_status(1); // or mysql_status(1,'mydb_name') ## $status->tohtml(); ## ## ex3) only my database and others databases summary status view ## $status = new mysql_status(1,array('foo','bar')); ## $status->tohtml(); ## ## ex4) only my database and all databases detail status view ## $status = new mysql_status(1,-1,1); ## $status->tohtml(); ## ## ex5) only server status view ## $status = new mysql_status(2); ## $status->tohtml(); ## ## ex6) my database and server status view ## $status = new mysql_status(3); ## $status->tohtml(); ## ## ex7) only server variables view ## $status = new mysql_status(4); ## $status->tohtml(); ## ## ex8) HTML handle : see arguments of tohtml() function ## $status = new mysql_status; ## // '#000000' default, is line color of HTML table ## // '#CCCCCC' default, is head color of HTML table ## // '#FFFFFF' default, is TD color of HTML table ## $color = array('line'=>'#000000','th'=>'#CCCCCC','td'=>'#FFFFFF'); ## $status->tohtml($color); // is defaults ## or ## $status->color = array(...); ## $status->tohtml(); ## ## ex9) each print by $this->color ## $status = & new mysql_status; ## ## $status->what = 1; for databases ## $status->db = -1; // all databases ## $status->detail = TRUE; // detail view ## $status->color = array(...); ## $status->tohtml(); // print all databases ## ## $status->what = 6; // 2 + 4 ## $status->color = array(...); // or $status->color[td] = '#XXXXXX'; ## $status->tohtml(); ## ## ex10) constants type of $what ## $status->what = _MYDB_; // same as $what = 1 ## or ## $status->what = _STAT_; // same as $what = 2 ## or ## $status->what = _VARS_; // same as $what = 4 ## or ## $status->what = _STAT_ + _VARS_; // same as $what = 6 ## ## ex11) use resource link ## $link = mysql_connect(...); ## $status = new mysql_status(0,0,0,$link); ## or ## $status->link = $link; ## ## ex12) user api ## $status = new mysql_status; ## $status->_get(); ## print_r($status); ## ## and, more see $this->what argument of mysql_status() function, ## also see $this->color arguments of tohtml() function ## class mysql_status { var $version = 20120404; // this version ## arguments, for detail print option ## var $what = 0; // integer, get mode(1 <= $what <= 7) var $db = ''; // mixed, target database(s) var $detail = FALSE; // boolean, show detail others databases var $link = ''; // resource link ## html color setting and check _get() ## var $color = array ( 'line' => '#000000', // line color of HTML table 'th' => '#CCCCCC', // head color of HTML table 'td' => '#FFFFFF', // TD color of HTML table ); var $_get = FALSE; // check _get(), don't this change var $bits = '0'; // string, bits of print mode(000 ~ 111) ## basic, for table status from databases ## var $host = ''; // string, MySQL server name or ip-addr var $via = ''; // string, C/S connection method(SOCKET or TCP/IP) var $cdb = ''; // string, current connected database name var $dbs = ''; // string, number of databases var $databases= array(); // array, lists of databases name ## databases infomation ## var $mydb = array(); // array, mydb(current database) information var $odb = array(); // array, others database information var $dbsum = array(); // array, simple database summary ## server status or variables infomation ## var $stat = array(); // array, MySQL server status var $vars = array(); // array, MySQL server variables var $comments = array(); // array, MySQL server status comments ## get mysql mydb status and server variables and status ## ## usage : ## object mysql_status[( [int what [, mixed db [, bool detail]]] )] ## ## arguments : ## $what integer(0 <= $what <= 7), bits of get mode ## - default : $what 7 ## - $what 0 : all, same as $what 7 ## - $what 1 : _MYDB_, only my database(include $db) infomation ## - $what 2 : _STAT_, only server status ## - $what 3 : $what 1 + $what 2 ## - $what 4 : _VARS_, only server variables ## - $what 5 : $what 1 + $what 4 ## - $what 6 : $what 2 + $what 4 ## - $what 7 : all, $what 1 + $waht 2 + $what 4 ## ## $db mixed, if bit($what) 1 exists, table status of $db ## - $db false : boolean, default current connected database ## - $db array() : array, same as above ## - $db 0 : integer|string, same as above ## - $db '' : string, same as above ## - $db 'foo' : string, only 'foo' database ## - $db 'foo,bar,some' : string, three databases(foo and bar and some) ## - $db array('foo') : array, same as above ## - $db array('foo','bar') : array, 'foo' and 'bar' databases ## - $db -1 : integer, all databases(if available) ## ## $detail boolean, if bit($what) 1 and $db exists, $db detail view, default false ## function mysql_status($what=0, $db='', $detail=FALSE, $link='') { $this->what = (int)$what; $this->db = $db; $this->detail = (boolean)$detail; // boolean if(is_resource($link)) $this->link = $link; $this->get_host_info(); // host and connection method define('_MYDB_',1); define('_STAT_',2); define('_VARS_',4); } ## get mydb, status, vars ## function _get() { ## set to TRUE this _get() ## $this->_get = TRUE; ## check $what ## $what = (int)$this->what; if($what<1 || $what>7) $this->what = 7; $bits = $this->bits = $this->get_bits($this->what); ## get mydb or others databases status ## if($bits[0]) { ## $sql = 'SELECT DATABASE()' ## $this->get_cdb(); ## $sql = 'SHOW DATABASES', same as 'mysqlshow [OPTIONS]' or mysql_list_dbs() ## $this->get_dbs(); ## $sql = 'SHOW TABLE STATUS', same as 'mysqlshow [OPTIONS] --status mydb' ## $this->get_mydb(); ## others database information ## $this->get_odb($this->db); } ## $sql = 'SHOW STATUS', same as 'mysqladmin [OPTIONS] extended-status' ## if($bits[1]) $stat = $this->get_array('SHOW STATUS'); ## $sql = 'SHOW VARIABLES', same as 'mysqladmin [OPTIONS] variables' ## if($bits[2]) $vars = $this->get_array('SHOW VARIABLES'); ## then, get main server status ## if($bits[1]) { if(!$bits[0]) $this->get_dbs(); // number of databases ## get comments from $vars, $stat ## $stat = $this->get_comments($vars,$stat); ## then, get main server status ## $this->get_stat($stat); } ## and then, get main server variables ## if($bits[2]) $this->get_vars($vars); ## force to flush buffer ## unset($vars); unset($stat); } ## decimal to binary ## function get_bits($dec) { if(!is_int($dec)) return 0; $dec = abs($dec); $bits = strrev(decbin($dec)); return $bits; // is not integer, is string } ## get host and via information ## function get_host_info($link='') { $info = mysql_get_host_info(); list($this->host,$this->via) = preg_split(';\s+via\s+;',$info); unset($info); } ## get current connected database name(if available) ## function get_cdb() { $sql = 'SELECT DATABASE()'; if(!$result = @mysql_query($sql)) return; $this->cdb = mysql_result($result,0,0); mysql_free_result($result); } ## get databases list ## function get_dbs() { $result = @mysql_list_dbs(); // 'SHOW DATABASES' same as 'mysqlshow [OPTIONS]' $nums = @mysql_num_rows($result) + 0; if($nums < 2) { $this->dbs = 'hidden'; $databases = array(); // this false } else { $this->dbs = $nums .' or more'; while($list = @mysql_fetch_row($result)) { $databases[] = $list[0]; } } @mysql_free_result($result); if($databases && $this->cdb) { $databases = array_diff($databases,array($this->cdb)); $this->databases = array_values($databases); // resort by numberic } } ## get my database infomation ## function get_mydb() { $this->mydb = $this->get_db_array($this->cdb); } ## get others database infomation ## function get_odb($db) { if($db) { if(is_array($db)) { $odb = array_values($db); } // sort by numberic else if($db == '-1') // all databases, if available { $odb = &$this->databases; } // array, use reference else { $odb = preg_split('/\s*,\s*/',preg_replace('/[,]+$/','',trim($db))); } } $size = sizeof($odb); for($i=0; $i<$size; $i++) { $this->odb[$odb[$i]] = $this->get_db_array($odb[$i]); } if(!$this->detail) unset($this->odb); } ## get array of table status from $db ## ## http://www.mysql.com/doc/en/SHOW_TABLE_STATUS.html ## function get_db_array($db='') { if($db) $sql = ' FROM '.$db; if(!$result = @mysql_query('SHOW TABLE STATUS'.$sql)) return; $i = 0; while($lists = mysql_fetch_assoc($result)) // associative array { $array[] = array ( 'name' => $lists['Name'], 'type' => ($lists['Type'] ? $lists['Type'] : $lists['Engine']), 'rows' => number_format($lists['Rows']), 'srow' => $this->hsize($lists['Avg_row_length']), // size of avg row 'size' => $this->hsize($lists['Data_length']), // size of this table 'sidx' => $this->hsize($lists['Index_length']) ); $sum['rows'] += $lists['Rows']; $sum['size'] += $lists['Data_length']; $sum['sidx'] += $lists['Index_length']; $i++; } mysql_free_result($result); $this->dbsum[] = $array[] = array ( 'name' => ''.$db.'', 'type' => $i.' tables', 'rows' => number_format($sum['rows']), 'srow' => $this->hsize(@round($sum['size']/$sum['rows'])), 'size' => ''.$this->hsize($sum['size']).'', 'sidx' => ''.$this->hsize($sum['sidx']).'' ); return $array; } ## get MySQL server status and variables ## ## http://www.mysql.com/doc/en/SHOW_STATUS.html ## http://www.mysql.com/doc/en/SHOW_VARIABLES.html ## http://www.mysql.com/information/presentations/presentation-oscon2000-20000719/ ## function get_array($sql) { if(!$result = mysql_query($sql)) return; ## get array to $vars ## while($lists = mysql_fetch_row($result)) { $array[$lists[0]] = $lists[1]; } mysql_free_result($result); return $array; } ## get comments and return $stat(added) ## ## 1) MySQL caches(all threads shared) [***] ## - key_buffer_size : 8MB < INDEX key ## - table_cache : 64 < number of open tables for all threads ## - thread_cache_size : 0 < number of keep in a cache for reuse ## ## 2) MySQL buffers(not shared) [***] ## - join_buffer_size : 1MB < FULL-JOIN ## - myisam_sort_buffer_size : 8MB < REPAIR, ALTER, LOAD ## - record_buffer : 2MB < sequential scan allocates ## - record_rnd_buffer : 2MB < ORDER BY(to avoid a disk seeks) ## - sort_buffer : 2MB < ORDER BY, GROUP BY ## - tmp_table_size : 32MB < advanced GROUP BY(to avoid a disk seeks) ## ## 3) MySQL memory size of INDEX(key)/JOIN/RECORD(read)/SORT/TABLE ## - INDEX(key) : 8MB < [***] key_buffer_size (shared) ## - JOIN : 1MB < [***] join_buffer_size (not shared) ## - RECORD(read) : 2MB < [***] record_buffer (not shared) ## : 2MB < [***] record_rnd_buffer (not shared) ## - SORT : 8MB < [ ] myisam_sort_buffer_size (not shared) ## : 2MB < [***] sort_buffer (not shared) ## - TABLE(tmp) : 32MB< [***] tmp_table_size(not shared) ## ## 4) MySQL timeout ## - connect_timeout : 5 > bad handshake timeout ## - interactive_timeout : 28800 > active to re-active timeout ## - wait_timeout : 28000 > not active to active timeout ## ## 5) MySQL connections ## - max_connections : 100 < 'to many connections' error ## - max_user_connections : 0(no limit) or upto [Max_used_connect] status ## function get_comments($vars, $stat) { global $_SERVER; // for PHP/4.0.x $stat['Questions'] = $stat['Queries'] ? $stat['Queries'] : $stat['Questions']; // patch san2@2012.04.04 $stat['ab_clients'] = sprintf('%.2f',$stat['Aborted_clients']*100/$stat['Connections']); $stat['ab_connects'] = sprintf('%.2f',$stat['Aborted_connects']*100/$stat['Connections']); $stat['per_qs'] = sprintf('%.2f',$stat['Questions']/$stat['Uptime']); $stat['per_qc'] = sprintf('%.2f',$stat['Questions']/$stat['Connections']); $stat['per_cs'] = sprintf('%.2f',$stat['Connections']/$stat['Uptime']); $stat['per_kr'] = sprintf('%.2f',@($stat['Key_reads']/$stat['Key_read_requests'])); $stat['per_kw'] = sprintf('%.2f',@($stat['Key_writes']/$stat['Key_write_requests'])); $stat['per_tc'] = sprintf('%.2f',$stat['Threads_created']/$stat['Connections']); $stat['per_oc'] = sprintf('%.2f',$stat['Opened_tables']/$stat['Connections']); $stat['per_ic'] = sprintf('%.3f',$stat['Uptime']/$stat['Connections']); $stat['per_iq'] = sprintf('%.3f',$stat['Uptime']/$stat['Questions']); $stat['per_pd'] = sprintf('%.2f',$stat['Com_delete']*100/$stat['Questions']); $stat['per_pi'] = sprintf('%.2f',$stat['Com_insert']*100/$stat['Questions']); $stat['per_ps'] = sprintf('%.2f',$stat['Com_select']*100/$stat['Questions']); $stat['per_pu'] = sprintf('%.2f',$stat['Com_update']*100/$stat['Questions']); $stat['per_pr'] = sprintf('%.2f',$stat['Com_replace']*100/$stat['Questions']); $stat['per_pl'] = sprintf('%.2f',$stat['Com_lock_tables']*100/$stat['Questions']); $stat['per_td'] = sprintf('%.2f',@($stat['Created_tmp_disk_tables']*100/$stat['Created_tmp_tables'])); $stat['per_rs'] = sprintf('%.2f',$stat['Bytes_sent']/$stat['Bytes_received']); $stat['tcs'] = ceil($stat['per_cs']); $stat['per_de'] = @sprintf('%.2f',$stat['Delayed_errors']/$stat['Delayed_writes']); if($stat['Max_used_connections'] > 0) { $stat['life_time'] = ceil((@($stat['Max_used_connections']*$stat['per_ic'])+1)/2); $stat['wto'] = ceil($stat['life_time']-@($stat['life_time']/$stat['per_qc'])); $stat['life_time_str'] = number_format($stat['life_time']); $stat['wto_str'] = number_format($stat['wto']); } else { $stat['life_time_str'] = $stat['wto_str'] = 'NA'; } ## share refer vars ## if($vars) { $vars['table_cache'] = $vars['table_open_cache'] ? $vars['table_open_cache'] : $vars['table_cache']; // patch san2@2012.04.04 $stat['life_time_max'] = ceil((@($vars['max_connections']*$stat['per_ic'])+1)/2); $stat['wto_max'] = ceil($stat['life_time_max'] - @($stat['life_time_max']/$stat['per_qc'])); $stat['life_time_max_str'] = number_format($stat['life_time_max']); $stat['wto_max_str'] = number_format($stat['wto_max']); $stat['refer_vars_wait_timeout'] = number_format($vars['wait_timeout']).'('.$this->runtime($vars['wait_timeout']).')'; $stat['refer_vars_interactive_timeout'] = number_format($vars['interactive_timeout']).'('.$this->runtime($vars['interactive_timeout']).')'; $stat['refer_vars_connect_timeout'] = number_format($vars['connect_timeout']).'('.$this->runtime($vars['connect_timeout']).')'; $stat['refer_vars_key_buffer_size'] = number_format($vars['key_buffer_size']).'('.$this->hsize($vars['key_buffer_size']).')'; $stat['refer_vars_max_connections'] = number_format($vars['max_connections']); $stat['refer_vars_query_cache_size'] = number_format($vars['query_cache_size']).'('.$this->hsize($vars['query_cache_size']).')'; $stat['refer_vars_table_cache'] = number_format($vars['table_cache']); $stat['refer_vars_thread_cache_size'] = number_format($vars['thread_cache_size']); $stat['refer_vars_tmp_table_size'] = number_format($vars['tmp_table_size']).'('.$this->hsize($vars['tmp_table_size']).')'; $stat['refer_vars_long_query_time'] = number_format($vars['long_query_time']).'('.$this->runtime($vars['long_query_time']).')'; } $B['b'] = ''; // blue color, for ok $B['r'] = ''; // red color, for warning $B['n'] = ''; // brown, form notice $B['e'] = ''; $busy = array('normal','some busy','very busy','hot busy'); $ok = $B['b'].', Á¤»ó'.$B['e']; $rep = $B['n'].',
Replication(¹Ì·¯¸µ)±â¹ýÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù¸é ÀÌ ±â´ÉÀ» OFF Çϼ¼¿ä.'.$B['e']; $tc = '[Âü°í]'; $wt = '[Âü°í]'; if($stat['per_qs'] < 1) $bkey = 0; else if($stat['per_qs'] < 10) $bkey = 1; else if($stat['per_qs'] < 20) $bkey = 2; else $bkey = 3; $this->comments['busy'] = &$busy[$bkey]; $this->comments['wto'] = '°è»êµÈ ÃßÁ¤°ª(Ãß¼¼:'.$stat['wto_str'].'ÃÊ, ÀÓ°è:'.$stat['wto_max_str'].'ÃÊ)'; $this->comments['tcs'] = '°è»êµÈ ÃßÁ¤°ª(ÃÖ¼Ò:'.$stat['tcs'].', ±ÇÀå:'.($stat['tcs']*2+1).', ÃÖ´ë:'.($stat['tcs']*3+2).')'; if($stat['Uptime'] < 86400) { $this->comments['notice'] = $B['n'].', ¿¹»ó¼öÄ¡'.$B['e']; $this->comments['poor'] = $B['n'].', ´©ÀûµÈ Åë°èÀÚ·á°¡ ³Ê¹« Àû½À´Ï´Ù.'.$B['e']; } if($stat['ab_clients'] > 1) { $this->comments['wait_timeout'] = $B['r'].',
¿¬°á Ãë¼Ò°¡ ¸¹½À´Ï´Ù(±âÁØ 1%). '. $stat['refer_vars_wait_timeout'].'(wait_timeout)Ãʳª '.$stat['refer_vars_interactive_timeout']. '(interactive_timeout)Ãʺ¸´Ù ´Ê°Ô close Çϰųª ¿¬°áÀ» ²÷Áö ¾Ê´Â °æ¿ì°¡ ¸¹½À´Ï´Ù.'.$wt.$B['e']; } else $this->comments['wait_timeout'] = $ok.$wt; $this->comments['interactive_timeout'] = &$this->comments['wait_timeout']; if($stat['ab_connects'] > 1) { $this->comments['connect_timeout'] = $B['r'].',
À߸øµÈ(fail) Á¢¼Ó ¿äûÀÌ ¸¹½À´Ï´Ù(¿¬°á ½ÇÆÐ)'. '(±âÁØ 1 %). '.$stat['refer_vars_connect_timeout']. '(connect_timeout)º¸´Ù ±ä ¿¬°á ¿äû, Ʋ¸° ¾ÏÈ£, Á¢±Ù ±ÇÇÑ ¹®Á¦.'.$B['e']; } else $this->comments['connect_timeout'] = &$ok; if($stat['Key_read_requests'] > 100 && $stat['per_kr'] > 0.05) { $this->comments['key_buffer_size'] = $B['r'].',
DISK¿¡¼­ Key¸¦ Àд ¿äûÀÌ ¸¹½À´Ï´Ù'. '(±âÁØ 0.05%). '.$stat['refer_vars_key_buffer_size'].'(key_buffer_size)°ªÀ» ¿Ã¸®¼¼¿ä.'.$B['e']; } else $this->comments['key_buffer_size'] = &$ok; if($vars['log_update'] == 'ON') $this->comments['log_update'] = &$rep; if($vars['log_bin'] == 'ON') $this->comments['log_bin'] = &$rep; if($vars['max_connections']) { $max['vars'] = max($stat['Max_used_connections'],$vars['max_connections']); $max['stat'] = $stat['Max_used_connections'] / $vars['max_connections']; if($max['stat'] > 0.95 ) { if($stat['wto']>5 && $vars['wait_timeout']>$stat['wto']) { $checkwto = ' ¶ÇÇÑ '.$this->stat['refer_vars_wait_timeout'].'[wait_timeout]À» '. $this->comments['wto'].'À¸·Î Æ©´×ÇØ º¸¼¼¿ä'; } $max['to'] = $max['vars'] + (int)($max['vars']*0.2); $this->comments['max_connections'] = $B['r'].',
ÃÖ´ë Á¢¼Ó¼ö¿¡ ±ÙÁ¢Çϰųª ÃÊ°úÇß½À´Ï´Ù. '. $stat['refer_vars_max_connections'].'[max_connections]°ªÀ» '.$max['to'].' Á¤µµ·Î ¿Ã¸®¼¼¿ä.'. $checkwto.$B['e']; } else $this->comments['max_connections'] = &$ok; $max['table'] = $max['vars'] * 2; if($stat['Opened_tables']>$vars['table_cache'] && $max['table']>$vars['table_cache']) { $this->comments['table_cache'] = $B['r'].',
'.$stat['refer_vars_table_cache'].'[table_cache]°ªÀ» '. $max['table'].' Á¤µµ·Î ¿Ã¸®¼¼¿ä.'.$B['e']; } else { $this->comments['table_cache'] = $B['b'].', '.$stat['per_oc'].'/Connection'.$B['e']; } } $this->comments['query_cache_size'] = ($vars['query_cache_size']>0) ? 'ON' : 'OFF'; if($vars['safe_show_database'] == 'OFF') { $this->comments['safe_show_database'] = $B['r'].',
º¸¾È»ó ÁÁÁö ¾Ê´Â ¼³Á¤ÀÔ´Ï´Ù. ÀÌ ¼³Á¤À» ON Çϼ¼¿ä'.$B['e']; } else if($vars['safe_show_database'] == 'ON') { $this->comments['safe_show_database'] = &$ok; } else { $this->comments['safe_show_database'] = ', 4.0.xx ¿¡¼­´Â ÀÛµ¿Àº ÇÏÁö¸¸ ÀÌ Ç׸ñÀº Ãâ·ÂµÇÁö ¾Ê½À´Ï´Ù.'; } if($vars['skip_external_locking']) $slm = 'external_'; if($vars['skip_'.$slm.'locking'] == 'OFF') { $this->comments['skip_'.$slm.'locking'] = $B['n'].',
ÇöÀç ÀÌ MySQL ¼­¹ö´Â ¿ÜºÎ LockÀ» »ç¿ëÇÏ´Â °ÍÀ¸·Î '. '¼³Á¤µÇ¾î ÀÖ½À´Ï´Ù. Àß ¸ð¸£°ÚÀ¸¸é ONÀ¸·Î ¼³Á¤Çϼ¼¿ä.'.$B['e']; } if($vars['skip_networking'] == 'OFF') { if(preg_match('/TCP/',$this->via) && $_SERVER['SERVER_ADDR'] == @gethostbyname($this->host)) { $this->comments['skip_networking'] = $B['r'].',
'.'MySQL ¼­¹ö¿Í Ŭ¶óÀ̾ðÆ®°¡ ¼­·Î µ¿ÀÏÇÑ IP ÁÖ¼ÒÀÓ¿¡µµ ºÒ±¸ÇÏ°í '. 'TCP/IP ¿¬°áÀ» »ç¿ëÇÏ°í ÀÖ½À´Ï´Ù(¼º´ÉÀúÇÏ). µ¶¸³µÈ ´Ù¸¥ È£½ºÆ®¿¡¼­ ¿¬°áÇÏ´Â °æ¿ì°¡ ¾ø´Ù¸é, ÀÌ ¿É¼ÇÀ» ON '. 'À¸·Î ¼³Á¤ÇÏ°í UNIX domain socket(localhost:'.$vars['socket'].')À» »ç¿ëÇϼ¼¿ä.'.$B['e']; } else if(preg_match('/socket/',$this->via)) { $this->comments['skip_networking'] = $B['n'].',
ÇöÀç UNIX domain socket(:'.$vars['socket'].')À» »ç¿ëÇÏ°í '. 'ÀÖ½À´Ï´Ù. µ¶¸³µÈ ´Ù¸¥ È£½ºÆ®¿¡¼­ ¿¬°áÇÏ´Â °æ¿ì°¡ ¾ø´Ù¸é ÀÌ ¿É¼ÇÀ» ON À¸·Î ¼³Á¤Çϼ¼¿ä'.$B['e']; } else $this->comments['skip_networking'] = &$ok; } else { $this->comments['skip_networking'] = $B['n'].',
´Ù¸¥ µ¶¸³µÈ È£½ºÆ®¿¡¼­ Á¢¼ÓÇÏÁö ¸øÇϵµ·Ï ¿øõºÀ¼âµÇ¾î ÀÖ½À´Ï´Ù.'.$B['e']; } if($vars['skip_show_database'] == 'ON') { $this->comments['skip_show_database'] = $B['n'].',
only access root and SHOW DATABASES privileges.'.$B['e']; } if($stat['per_tc'] > 0.01) { if($stat['per_cs'] > 1) { $this->comments['thread_cache_size'] = $B['r'].',
'.$stat['refer_vars_thread_cache_size']. '[thread_cache_size]°ªÀ» ¿Ã¸®¼¼¿ä.'.$tc.$B['e']; } else if($vars['thread_cache_size'] < 2) { $this->comments['thread_cache_size'] = $B['r'].',
ÇöÀç ¼­¹ö°¡ ¸Å¿ì ¹Ù»ÚÁö ¾ÊÀ¸¹Ç·Î '. $stat['refer_vars_thread_cache_size'].'[thread_cache_size]°ªÀ» Æ©´× º¸¼¼¿ä.'.$tc.$B['e']; } /*** else { $this->comments['thread_cache_size'] = $B['r'].',
ÇöÀç ¼­¹ö°¡ ¸Å¿ì ¹Ù»ÚÁö ¾ÊÀ¸¹Ç·Î, '. '½Ã°£ÀÌ Á»´õ Áö³ª¸é ÀÌ ¸Þ½ÃÁö°¡ º¸ÀÌÁú ¾Ê¾Æ¾ß Á¤»óÀÔ´Ï´Ù.'.$tc.$B['e']; } ***/ } else $this->comments['thread_cache_size'] = $ok.$tc; return $stat; } ## get main status ## function get_stat($stat) { $this->stat = array ( 'TOTAL_STATUS' => array($stat['per_qs'],''.$this->comments['busy'].' (1ÃÊ´ç Æò±Õ Äõ¸® ¿äû¼ö)'), 'CRITICAL_LIFE_TIME' => array($stat['life_time_str'].'ÃÊ','Ä¿³Ø¼Ç´ç Æò±ÕÀûÀÎ(Ãß¼¼) ÀÓ°è life time(CUR)'), 'CRITICAL_LIFE_TIME_MAX'=> array($stat['life_time_max_str'].'ÃÊ','Ä¿³Ø¼Ç´ç Æò±ÕÀûÀÎ(ÃÖ´ë) ÀÓ°è life time(EXP)'), 'All_databases' => array($this->dbs,'µ¥ÀÌÅͺ£À̽º ¼ö'), 'Aborted_clients' => array(number_format($stat['Aborted_clients']),'¿¬°á Ãë¼Ò Clients ¼ö, refer '. $stat['refer_vars_wait_timeout'].'[wait_timeout] and '. $stat['refer_vars_interactive_timeout'].'[interactive_timeout]'), 'Aborted_connects' => array(number_format($stat['Aborted_connects']), '¿¬°á ½ÇÆмö, refer '.$stat['refer_vars_connect_timeout'].'[connect_timeout]'), 'Aborted_clients_percent' => array($stat['ab_clients'].'%','¿¬°á Ãë¼ÒÀ²'.$this->comments['wait_timeout']), 'Aborted_connects_percent' => array($stat['ab_connects'].'%','¿¬°á ½ÇÆÐÀ²'.$this->comments['connect_timeout']), 'Bytes_received' => array($this->hsize($stat['Bytes_received']),'¼ö½Å·®(ÃÑ)'), 'Bytes_sent' => array($this->hsize($stat['Bytes_sent']),'Àü¼Û·®(ÃÑ)'), 'Bytes_per_rs' => array($stat['per_rs'],'¹Þ°í(1) º¸³»´Â(x) ºñÀ², 1:x'), 'Bytes_sent_per_sec' => array($this->hsize($stat['Bytes_sent']/$stat['Uptime']),'Àü¼Û·®(ÃÊ´ç)'), 'Bytes_sent_per_min' => array($this->hsize($stat['Bytes_sent']*60/$stat['Uptime']),'Àü¼Û·®(ºÐ´ç)'), 'Bytes_sent_per_hour' => array($this->hsize($stat['Bytes_sent']*3600/$stat['Uptime']),'Àü¼Û·®(½Ã°£´ç)'), 'Bytes_sent_per_day' => array($this->hsize($stat['Bytes_sent']*86400/$stat['Uptime']),'Àü¼Û·®(ÇÏ·çÆò±Õ)'.$this->comments['notice']), 'Com_delete' => array($stat['per_pd'].'%','DELETE Äõ¸® »ç¿ëÀ²(Àüü DB Åë°è)'), 'Com_insert' => array($stat['per_pi'].'%','INSERT Äõ¸® »ç¿ëÀ²(Àüü DB Åë°è)'), 'Com_select' => array($stat['per_ps'].'%','SELECT Äõ¸® »ç¿ëÀ²(Àüü DB Åë°è)'), 'Com_update' => array($stat['per_pu'].'%','UPDATE Äõ¸® »ç¿ëÀ²(Àüü DB Åë°è)'), 'Com_replace' => array($stat['per_pr'].'%','REPLACE Äõ¸® »ç¿ëÀ²(Àüü DB Åë°è)'), 'Com_lock_tables' => array($stat['per_pl'].'%','LOCK TABLES Äõ¸® »ç¿ëÀ²(Àüü DB Åë°è)'), 'Connections' => array(number_format($stat['Connections']),'ÃÑ connections ¼ö'), 'Connections_per_sec' => array($stat['per_cs'],'ÃÊ´ç connections ¼ö'), 'Created_tmp_tables' => array(number_format($stat['Created_tmp_tables']),'¸Þ¸ð¸®¿¡ »ý¼ºµÈ Àӽà Å×ÀÌºí ¼ö'), 'Created_tmp_disk_tables' => array(number_format($stat['Created_tmp_disk_tables']),'DISK¿¡ »ý¼ºµÈ Àӽà Å×ÀÌºí ¼ö, '. $stat['refer_vars_tmp_table_size'].'[tmp_table_size]º¸´Ù ¸¹Àº ¸Þ¸ð¸®¸¦ ¿ä±¸ÇÏ´Â SQL ±¸¹®À» ½ÇÇà½Ã ´©°èµÊ'), 'Create_tmp_disk_tables_per' => array($stat['per_td'].'%','DISK¿¡ »ý¼ºµÈ Àӽà Å×ÀÌºí »ç¿ë ºñÀ²'), 'Created_tmp_files' => array(number_format($stat['Created_tmp_files']),'mysqld °¡ »ý¼ºÇÑ Àӽà ÆÄÀÏ ¼ö'), 'Delayed_writes' => array(number_format($stat['Delayed_writes']),'INSERT DELAYED ±¸¹®À¸·Î ±â·ÏµÈ rows ¼ö'), 'Delayed_errors' => array(number_format($stat['Delayed_errors']),'INSERT DELAYED ±¸¹®À¸·Î ±â·Ï½Ã ¿¡·¯(duplicate key Æ÷ÇÔ)³­ rows ¼ö'. '(¾ø¾î¾ß ÀÛ¾Æ¾ß Á¤»ó)'), 'Delayed_errors_per' => array($stat['per_de'].'%','INSERT DELAYED ¿¡·¯ ºñÀ²(0À̰ųª ÀÛ¾Æ¾ß Á¤»ó)'), 'Intervals_of_connection' => array($stat['per_ic'],'Ä¿³Ø¼Ç ÁÖ±â(ÃÊ)'), 'Intervals_of_question' => array($stat['per_iq'],'Äõ¸® ÁÖ±â(ÃÊ)'), 'Key_reads' => array(number_format($stat['Key_reads']),'DISK¿¡¼­ Key ÀÐÀº ¼ö'), 'Key_read_requests' => array(number_format($stat['Key_read_requests']),'ij½Ã¿¡¼­ Key Àб⠿äû¼ö'), 'Key_writes' => array(number_format($stat['Key_writes']),'DISK¿¡ Key¸¦ ¾´ ¼ö'), 'Key_write_requests' => array(number_format($stat['Key_write_requests']),'ij½Ã¿¡ Key ¾²±â ¿äû¼ö'), 'Key_reads_per_request' => // to < 0.05 array($stat['per_kr'].'%','DISK¿¡¼­ Key¸¦ Àд ºñÀ²'.$this->comments['key_buffer_size']), 'Key_writes_per_request' => array($stat['per_kw'].'%','DISK¿¡ Key¸¦ ¾²´Â ºñÀ², º¸Åë 1¿¡ °¡±î¿ö¾ß Á¤»ó'), 'Max_used_connections' => array(number_format($stat['Max_used_connections']),'µ¿½Ã¿¡ ¿¬°áµÈ ÃÖ´ë°ª'.$this->comments['max_connections']), 'Open_tables' => array(number_format($stat['Open_tables']),'ÇöÀç ¿­·ÁÀÖ´Â Tables ¼ö'), 'Opened_tables' => array(number_format($stat['Opened_tables']),'¿­·È´ø Tables ¼ö, refer '.$stat['refer_vars_table_cache']. '[table_cache]'.$this->comments['table_cache']), 'Qcache_queries_in_cache' => array(number_format($stat['Qcache_queries_in_cache']),'query cache: µî·ÏµÈ Äõ¸® ¼ö'), 'Qcache_inserts' => array(number_format($stat['Qcache_inserts']),'query cache: Ãß°¡µÈ Äõ¸® ¼ö'), 'Qcache_hits' => array(number_format($stat['Qcache_hits']),'query cache: hit ¼ö'), 'Qcache_lowmem_prunes' => array(number_format($stat['Qcache_lowmem_prunes']),'query cache: ÀÛÀº ¸Þ¸ð¸®(refer '.$stat['refer_vars_query_cache_size']. '[query_cache_size]) ¶§¹®¿¡ Áö¿öÁø Äõ¸® ¼ö, ÀÌ °ªÀÌ ÀÛ¾Æ¾ß Á¤»ó'), 'Qcache_not_cached' => array(number_format($stat['Qcache_not_cached']),'query cache: non-cached Äõ¸® ¼ö, not cachable, refer [query_cache_type]'), 'Qcache_free_memory' => array(number_format($stat['Qcache_free_memory']).'('.$this->hsize($stat['Qcache_free_memory']).')', 'query cache: ³²¾Æ ÀÖ´Â query cache ¸Þ¸ð¸® ¾ç, refer '.$stat['refer_vars_query_cache_size'].'[query_cache_size]'), 'Qcache_free_blocks' => array(number_format($stat['Qcache_free_blocks']),'query cache: ³²¾Æ ÀÖ´Â query cache blocks ¼ö'), 'Qcache_total_blocks' => array(number_format($stat['Qcache_total_blocks']),'query cache: ÃÑ query cache blocks ¼ö'), 'Questions' => array(number_format($stat['Questions']),'ÇöÀç±îÁö Äõ¸® ¿äû¼ö'), 'Questions_per_connect' => array($stat['per_qc'],'Ä¿³Ø¼Ç´ç Æò±Õ Äõ¸® ¿äû¼ö'), 'Select_full_join' => array(number_format($stat['Select_full_join']),'Key ¾øÀÌ FULL-JOIN Ƚ¼ö'), 'Slow_queries' => array(number_format($stat['Slow_queries']),$stat['refer_vars_long_query_time'].'[long_query_time]ÃÊ º¸´Ù Å« Äõ¸® ¿äû¼ö'), 'Table_locks_waited' => array($this->runtime($stat['Table_locks_waited']),'Lock wait Ãѽð£'), 'Threads_cached' => array(number_format($stat['Threads_cached']),'ij½ÃµÈ ¾²·¹µå¼ö, '.$stat['refer_vars_thread_cache_size']. '[thread_cache_size]º¸´Ù Ç×»ó ÀÛÀ½'), 'Threads_connected' => array(number_format($stat['Threads_connected']),'ÇöÀç ¿­·ÁÀÖ´Â Ä¿³Ø¼Ç ¼ö'), 'Threads_created' => array(number_format($stat['Threads_created']),'ÇöÀç±îÁö handle Ä¿³Ø¼Ç¿¡ »ý¼ºµÈ ¾²·¹µå ¼ö'), 'Threads_running' => array(number_format($stat['Threads_running']),'ÇöÀç ±¸µ¿ÁßÀÎ ¾²·¹µå ¼ö(not sleeping)'), 'Threads_created_per' => array($stat['per_tc'].'%','Ä¿³Ø¼Ç´ç »ý¼ºµÈ Æò±Õ ¾²·¹µå ¼ö(±âÁØ 0.01%)'.$this->comments['thread_cache_size']), 'Uptime' => array($this->runtime($stat['Uptime']),'ÃÖ±Ù MySQL ¼­¹ö ±¸µ¿ ½Ã°£'), ); } ## get main variables ## function get_vars($vars) { $ver = explode('.',preg_replace('/-.+$/','',$vars['version'])); $ver[1] = sprintf('%02d',$ver[1]); $ver[2] = sprintf('%02d',$ver[2]); $ver = $ver[0].$ver[1].$ver[2]; ## http://www.mysql.com/doc/en/Upgrading-from-3.23.html ## myisam_max_extra_sort_file_size, myisam_max_sort_file_size ## if($ver < 40003) { $upg = array( 'ast' => 1048576, // 1024*1024 //'bulk' => 'myisam_bulk_insert_tree_size', //'qtype' => 'query_cache_startup_type', 'rbuffer' => 'record_buffer', 'rndbuffer' => 'record_rnd_buffer', 'sbuffer' => 'sort_buffer', //'warn' => 'warnings', 'skiplocking' => 'skip_locking', ); } else { $upg = array( 'ast' => 1, //'bulk' => 'bulk_insert_buffer_size', //'qtype' => 'query_cache_type', 'rbuffer' => 'read_buffer_size', 'rndbuffer' => 'read_rnd_buffer_size', 'sbuffer' => 'sort_buffer_size', //'warn' => 'log-warnings', 'skiplocking' => 'skip_external_locking', ); } $this->vars = array ( 'back_log' => array(number_format($vars['back_log']),'listen(2), net.ipv4.tcp_max_syn_backlog'), 'connect_timeout' => array(number_format($vars['connect_timeout']).'('.$this->runtime($vars['connect_timeout']).')', 'bad handshake timeout(ÃÊ)'.$this->comments['connect_timeout']), //'delayed_insert_limit', //'delayed_insert_timeout', 'have_query_cache' => array($vars['have_query_cache']?'YES':NA,'query cache Áö¿ø ¿©ºÎ'), 'query_cache_size' => array(number_format($vars['query_cache_size']).'('.$this->hsize($vars['query_cache_size']).')', 'query cache Å©±â ¼³Á¤, 0Àº OFF(ÇöÀç:'.$this->comments['query_cache_size'].') refer [Qcache_xxx]'), 'join_buffer_size' => array(number_format($vars['join_buffer_size']).'('.$this->hsize($vars['join_buffer_size']).')', '[***] FULL-JOIN¿¡ »ç¿ëµÇ´Â ¸Þ¸ð¸®'), 'key_buffer_size' => array(number_format($vars['key_buffer_size']).'('.$this->hsize($vars['key_buffer_size']).')', '[***] INDEX key buffer¿¡ »ç¿ëµÇ´Â ¸Þ¸ð¸®, refer [Key_xxx]'.$this->comments['key_buffer_size']), 'log' => array($vars['log'],'·Î±× ±â·Ï ¿©ºÎ'), 'log_update' => array($vars['log_update'],'UPDATE ·Î±× ±â·Ï ¿©ºÎ'.$this->comments['log_update']), 'log_bin' => array($vars['log_bin'],'binary ·Î±× ±â·Ï ¿©ºÎ'.$this->comments['log_bin']), 'long_query_time' => // status(--log-slow-queries=file) array(number_format($vars['long_query_time']).'('.$this->runtime($vars['long_query_time']).')', 'refer '.$this->stat['Slow_queries'][0].'[Slow_queries]'), 'lower_case_table_names' => array($vars['lower_case_table_names'],'Å×ÀÌºí ´ë¼Ò¹®ÀÚ ±¸º°À¯¹«(0 ±¸º°)'), 'max_allowed_packet' => array(number_format($vars['max_allowed_packet']).'('.$this->hsize($vars['max_allowed_packet']).')','ÃÖ´ë Çã¿ëÇÒ ÆÐŶ'), 'max_connections' => array(number_format($vars['max_connections']),'[***] ÃÖ´ë µ¿½Ã Á¢¼Ó Ä¿³Ø¼Ç ¼ö, refer '. $this->stat['Max_used_connections'][0].'[Max_used_connections]'.$this->comments['max_connections']), 'max_delayed_threads' => array($vars['max_delayed_threads'],'ÃÖ´ë delayed ¾²·¹µå ¼ö, INSERT DELAYED ±¸¹®°ú °ü·ÃµÊ'), 'max_join_size' => array(number_format($vars['max_join_size']).'('.$this->hsize($vars['max_join_size']).')', 'JOIN¿¡ »ç¿ëµÉ ÃÖ´ë Å©±â(¸Þ¸ð¸® ¾Æ´Ô)'), 'max_sort_length' => array(number_format($vars['max_sort_length']).'('.$this->hsize($vars['max_sort_length']).')', 'TEXT, BLOBÀÇ Á¤·Ä¿¡ »ç¿ëµÇ´Â ÃÖ´ë Å©±â'), 'max_user_connections' => array(number_format($vars['max_user_connections']),'ÃÖ´ë µ¿½Ã user ¼ö(0Àº Á¦ÇѾøÀ½)'), /*** 'max_tmp_tables' => // doesn't yet do anything array(number_format($vars['max_tmp_tables']),'ÃÖ´ë Àӽà Å×ÀÌºí ¼ö'), ***/ 'myisam_max_extra_sort_file_size' => // MBytes(4.0.3 use bytes) array(number_format($vars['myisam_max_extra_sort_file_size']).'('.$this->hsize($vars['myisam_max_extra_sort_file_size']*$upg['ast']). ')','ºü¸¥ INDEX¸¦ »ý¼º½Ã »ç¿ëµÇ´Â ÃÖ´ë Àӽà ÆÄÀÏ Å©±â'), 'myisam_max_sort_file_size' => // MBytes(4.0.3 use bytes) array(number_format($vars['myisam_max_sort_file_size']).'('.$this->hsize($vars['myisam_max_sort_file_size']*$upg['ast']).')', 'REPAIR, ALTER, LOAD...µî INDEX¸¦ Àç»ý¼º½Ã »ç¿ëµÇ´Â Àӽà ÆÄÀÏ Å©±â'), 'myisam_sort_buffer_size' => // [***] use REPAIR, INDEX sort array(number_format($vars['myisam_sort_buffer_size']).'('.$this->hsize($vars['myisam_sort_buffer_size']).')', '[***] REPAIR, INDEX, ALTER Á¤·Ä¿¡ »ç¿ëÇÏ´Â ¸Þ¸ð¸®'), 'open_files_limit' => // error 'Too many open file files', default '0' array(number_format($vars['open_files_limit']),'ÆÄÀÏ open Á¦ÇÑ ¼ö(0Àº Á¦ÇѾøÀ½)'), /*** 'query_buffer_size' => // only 3.23.x, start(init) query buffer, default '0' array(number_format($vars['query_buffer_size']).'('.$this->hsize($vars['query_buffer_size']).')', 'Ãʱâ Äõ¸® ¹öÆÛ¿ë ¸Þ¸ð¸®(±âº»°ªÀº 0)'), ***/ $upg['rbuffer'] => array(number_format($vars[$upg['rbuffer']]).'('.$this->hsize($vars[$upg['rbuffer']]).')', '[***] ¼øÂ÷ÀûÀÎ °Ë»ö¿¡ »ç¿ëµÇ´Â ¸Þ¸ð¸®(read_buffer_size)'), $upg['rndbuffer'] => // [***] use improve ORDER BY(to avoid a disk seeks) array(number_format($vars[$upg['rndbuffer']]).'('.$this->hsize($vars[$upg['rndbuffer']]).')', '[***] ORDER BY Á¤·Ä¿¡ »ç¿ëµÇ´Â ¸Þ¸ð¸®(to avoid a disk seeks)'), 'safe_show_database' => // only Ver < 4.0.3 array($vars['safe_show_database']?$vars['safe_show_database']:'NA', 'Á¦ÇÑÀûÀÎ SHOW DATABASE ±¸¹® »ç¿ë ¿©ºÎ'.$this->comments['safe_show_database']), $upg['skiplocking'] => array($vars[$upg['skiplocking']],'¿ÜºÎ lock À» »ç¿ëÇÑ´Ù¸é OFF·Î ¼³Á¤.'.$this->comments[$upg['skiplocking']]), 'skip_networking' => array($vars['skip_networking'],'TCP/IP ¿¬°á ¿©ºÎ(ONÀº UNIX domain socket, OFF´Â TCP/IP ¿¬°á)'.$this->comments['skip_networking']), 'skip_show_database' => array($vars['skip_show_database'],'SHOW DATABASES ±¸¹® »ç¿ë ¿©ºÎ(ONÀº ¿øõºÀ¼â, OFF´Â »ç¿ë°¡´É)'.$this->comments['skip_show_database']), $upg['sbuffer'] => // [***] use ORDER BY, GROUP BY array(number_format($vars[$upg['sbuffer']]).'('.$this->hsize($vars[$upg['sbuffer']]).')','[***] ORDER BY, GROUP BY Á¤·Ä¿¡ »ç¿ëµÇ´Â ¸Þ¸ð¸®'), 'table_cache' => // [***] refer to [Opened_tables] status array(number_format($vars['table_cache']),'[***] Çѹø¿¡(all thread) ¿­ ¼ö ÀÖ´Â Å×ÀÌºí ¼ö, refer '. $this->stat['Opened_tables'][0].'[Opened_tables]'), 'thread_cache_size' => // [***] refer to [Connections] and [Threads_created] status array(number_format($vars['thread_cache_size']),'[***] ¾²·¹µå ij½Ã Àç»ç¿ë ¼ö, refer '. $this->stat['Connections'][0].'[Connections], '.$this->stat['Threads_created'][0].'[Threads_created], '. $this->comments['tcs'].$this->comments['thread_cache_size']), 'tmp_table_size' => // [***] use in-memory(to disk), GROUP BY array(number_format($vars['tmp_table_size']).'('.$this->hsize($vars['tmp_table_size']).')', '[***] º¹ÀâÇÑ GROUP BY Á¤·Ä¿¡ »ç¿ëµÇ´Â ¸Þ¸ð¸®(to avoid a disk seeks), '. 'refer '.$this->stat['Created_tmp_disk_tables'][0].'[Created_tmp_disk_tables]'), 'interactive_timeout' => array(number_format($vars['interactive_timeout']).'('.$this->runtime($vars['interactive_timeout']).')', 'interactive -> re-active¿¡ ±â´Ù¸®´Â ½Ã°£(ÀÌÈÄ closed)'.$this->comments['interactive_timeout']), 'wait_timeout' => array(number_format($vars['wait_timeout']).'('.$this->runtime($vars['wait_timeout']).')', 'none interactive -> re-active¿¡ ±â´Ù¸®´Â ½Ã°£(ÀÌÈÄ closed), '.$this->comments['wto'].$this->comments['wait_timeout']), 'timezone' => array($vars['timezone'],'ÇöÀç MySQL ¼­¹öÀÇ TIME-ZONE'), 'version' => array($vars['version'],'ÇöÀç MySQL ¼­¹ö ¹öÀü') ); } ## parsing to html ## ## arguments : ## $color array, parsing to TABLE cloor ## $color['line'] string, line color of HTML table, default '#000000' ## $color['th'] string, head color of HTML table, default '#CCCCCC' ## $color['td'] string, TD color of HTML table, default '#FFFFFF' ## ## $return boolean, 1 return, 0 print ## function tohtml($color=array(), $return=0) { static $version = FALSE; if(!$this->_get) $this->_get(); $this->_get = FALSE; // reset to false if(!$color) $color = $this->color; if(!$color['line']) $color['line'] = '#000000'; if(!$color['th']) $color['th'] = '#CCCCCC'; if(!$color['td']) $color['td'] = '#FFFFFF'; if(!$version) $html = 'mysql status Ver. '.$this->version."
\n"; $version = TRUE; $t = array(array('Å×À̺í','ŸÀÔ'),array('µ¥ÀÌÅͺ£À̽º','°³¼ö','(°è)')); if($this->bits[0]) { $html .= $this->db2html($this->mydb,$color,'MY',$t[0]); if($this->odb) { $tmp = array_keys($this->odb); foreach($tmp AS $key) { $html .= $this->db2html($this->odb[$key],$color,$key,$t[0]); } unset($tmp); } else if(sizeof($this->dbsum) > 1) { $html .= $this->db2html($this->dbsum,$color,'SUMMARY OF',$t[1]); } } //unset($t); if($this->bits[1]) $html .= $this->array2html($this->stat,$color,'STATUS'); if($this->bits[2]) $html .= $this->array2html($this->vars,$color,'VARIABLES'); if($return) return $html; else echo $html; } function db2html($array, $color, $name, $t) { $r = ''.$name.' DATABASE STATUS (connected by '.$this->via.')'."\n". ''."\n". ''."\n". '
'."\n". ''."\n". ''."\n". ''."\n". ''."\n". ''."\n". ''."\n". ''."\n". ''."\n". ''."\n"; $nums = sizeof($array); for($i=0; $i<$nums; $i++) { $r .= ''."\n". ''."\n". ''."\n". ''."\n". ''."\n". ''."\n". ''."\n". ''."\n"; } $r .= '
'.$t[0].' À̸§Å×À̺í '.$t[1].'·¹ÄÚµå ¼ö'.$t[2].'·¹ÄÚµå Æò±Õ Å©±â»ç¿ë·®'.$t[2].'Index Å©±â'.$t[2].'
'.$array[$i]['name'].''.$array[$i]['type'].''.$array[$i]['rows'].''.$array[$i]['srow'].''.$array[$i]['size'].''.$array[$i]['sidx'].'
'."\n". '
'."\n
\n"; return $r; } function array2html($array, $color, $name) { $r = 'MYSQL SERVER '.$name.' (connected by '.$this->via. ')'.$this->comments['poor']."\n". ''."\n". ''."\n". '
'."\n". ''."\n". ''."\n". ''."\n". ''."\n". ''."\n". ''."\n"; $tmp = array_keys($array); foreach($tmp AS $key) { $r .= ''."\n". ''."\n". ''."\n". ''."\n". ''."\n"; } unset($tmp); $r .= '
Ç׸ñ'.$name.'commnets, [***] Ç¥½Ã´Â ¼º´É Çâ»ó°ú °ü·ÃµÊ
'.$key.''.$array[$key][0].''.$array[$key][1].'
'."\n". '
'."\n
\n"; return $r; } function hsize($bfsize, $sub=0) { $BYTES = number_format($bfsize).' Bytes'; if($bfsize < 1024) return $BYTES; else if($bfsize < 1048576) $bfsize = number_format(round($bfsize/1024)).' KB'; else if($bfsize < 1073741827) $bfsize = number_format(round($bfsize/1048576)).' MB'; else $bfsize = number_format($bfsize/1073741827,1).' GB'; if($sub) $bfsize .= '('.$BYTES.')'; return $bfsize; } function runtime($term, $lang='kr') { $l['kr'] = $l['ko'] = array('ÃÊ','ºÐ','½Ã°£','ÀÏ','´Þ'); $l['en'] = array('seconds','minutes','hours','days','months'); $months = (int)($term / 2592000); $term = (int)($term % 2592000); $days = (int)($term / 86400); $term = (int)($term % 86400); $hours = (int)($term / 3600); $term = (int)($term % 3600); $mins = (int)($term / 60); $secs = (int)($term % 60); $months = $months ? $months.$l[$lang][4].' ' : ''; $days = $days ? $days.$l[$lang][3].' ' : ''; $hours = $hours ? $hours.$l[$lang][2].' ' : ''; $mins = $mins ? $mins.$l[$lang][1].' ' : ''; $secs .= $l[$lang][0]; return $months.$days.$hours.$mins.$secs; } } // end of class //*** example //require_once 'class.mysql.status.php'; /*** mysql_connect('localhost','user','password'); mysql_select_db('dbname'); $status = new mysql_status; $status->tohtml(); mysql_close(); ***/ ?>