'extra_where' => 'having',
'localFile' => array (getenv('HOME').'/.my.cnf','^(?:user(?:name)?=(?P<user>\\S+)|password=(?P<password>\\S+))'),
-'databases' => 'SELECT SCHEMA_NAME as `name`,DEFAULT_CHARACTER_SET_NAME as `encoding`,DEFAULT_COLLATION_NAME as `collate` FROM INFORMATION_SCHEMA.SCHEMATA',
+'databases' => "SELECT SCHEMA_NAME as `name`,DEFAULT_CHARACTER_SET_NAME as `encoding`,DEFAULT_COLLATION_NAME as `collate` FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME NOT IN ('performance_schema','information_schema')",
'table.sql' => 'SHOW CREATE TABLE `<NAME>`',
'table.sql.index' => "SELECT ".(Db::p('db.type') ? "CONCAT(s.TABLE_NAME,'_',s.INDEX_NAME,'_idx')" : 's.INDEX_NAME')." as name,(CASE NON_UNIQUE WHEN 1 THEN 0 ELSE 1 END) as uniqe,GROUP_CONCAT(COLUMN_NAME) as field FROM INFORMATION_SCHEMA.STATISTICS s LEFT OUTER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS t ON t.TABLE_SCHEMA=s.TABLE_SCHEMA AND t.TABLE_NAME=s.TABLE_NAME AND s.INDEX_NAME=t.CONSTRAINT_NAME WHERE 0=0 AND t.CONSTRAINT_NAME IS NULL AND s.TABLE_SCHEMA = '<DB>' AND s.TABLE_NAME='<NAME>' GROUP BY name ORDER BY SEQ_IN_INDEX",
) as $k) { if (isset($r[$k])) $row["SLAVE.$k"] = $r[$k]; } return $row;
},
'SHOW STATUS' => create_function('&$r',join('',array(
- 'if (preg_match("/(Threads.*|Conn.*|Max_used_connections|Table_.*|Open.*_tables)/",$r["Variable_name"]))'
- .'return array("STATUS.".$r[0]=>$r[1]);'
- #'if (preg_match("/(Threads_connected|Max_used_connections|Table_locks_immediate|Table_locks_waited|Open.*_tables)/",$r[0])) return $r;',
+ 'return array("STATUS.".$r[0]=>$r[1]);'
))),
'SHOW GLOBAL STATUS' => create_function('&$r',join('',array(
- 'if (preg_match("/(Threads.*|Conn.*|Max_used_connections|Table_.*|Open.*_tables)/",$r["Variable_name"]))'
- .'return array("GLOBAL.".$r[0]=>$r[1]);'
- #'if (preg_match("/(Threads_connected|Max_used_connections|Table_locks_immediate|Table_locks_waited|Open.*_tables)/",$r[0])) return $r;',
+ 'return array("GLOBAL.".$r[0]=>$r[1]);'
))),
'SHOW VARIABLES' => create_function('&$r',join('',array(
- 'if (preg_match("/^(Table|.*[Cc]onn|Open|Com|hostname).*/",$r["Variable_name"]))'
- .'return array("VARIABLES.".$r[0]=>$r[1]);'
+ 'return array("VARIABLES.".$r[0]=>$r[1]);'
))),
),
'status_callback' => function(&$status) {
- #debug($status['GLOBAL.Open_tables']);
- #debug($status['VAR.max_connections']);
- $status['connections_pcent'] = ( ($status['STATUS.Max_used_connections']*100) / $status['VARIABLES.max_connections'] ).'%';
- return;
- foreach($status as $k=>$v) {
- if (!preg_match('/^[A-Z]{3,}/',$k)) continue;
- unset($status[$k]);
- $status[$k] = $v;
+/*
+*/
+ // Conns
+ $status['max_connections'] = $status['VARIABLES.max_connections'];
+ $status['Max_used_connections'] = $status['STATUS.Max_used_connections'];
+ $status['connections_pcent'] = ( ($status['STATUS.Max_used_connections']*100) / $status['VARIABLES.max_connections'] );
+
+ // Innodb
+ $status['innodb_log_size_pcent'] = ( ($status['VARIABLES.innodb_log_file_size']*100) / $status['VARIABLES.innodb_buffer_pool_size'] );
+
+ // Cache
+ $status['query_cache_efficiency'] = sprintf("%.1f",($status['STATUS.Qcache_hits'] / ($status['STATUS.Com_select'] + $status['STATUS.Qcache_hits'])) * 100);
+ if ($status['VARIABLES.query_cache_size']) {
+ $status['query_cache_pcent'] = sprintf("%.1f",100 - ($status['STATUS.Qcache_free_memory'] / $status['VARIABLES.query_cache_size']) * 100);
+ }
+ if ($status['STATUS.Qcache_lowmem_prunes'] == 0) {
+ $status['query_cache_prunes_per_day'] = 0;
+ } else {
+ $status['query_cache_prunes_per_day'] = (int)($status['STATUS.Qcache_lowmem_prunes'] / ($status['STATUS.Uptime']/86400));
+ }
+
+ // Delete olters
+ foreach ($status as $k=>$v) {
+ if (preg_match('/^[A-Z]+\./',$k)) unset ($status[$k]);
}
},