function optimize_tables($database) { $q = new mysql(); $unix = new unix(); mysql_admin_events("Starting optimize tables in database {$database}", __FUNCTION__, __FILE__, __LINE__, "defrag"); $sql = "SHOW TABLE STATUS FROM `{$database}`"; $q = new mysql(); $results = $q->QUERY_SQL($sql, $database); while ($ligne = @mysql_fetch_array($results, MYSQL_ASSOC)) { $TableName = $ligne["Name"]; $Data_free = $ligne["Data_free"]; if (!is_numeric($Data_free)) { continue; } if ($Data_free == 0) { continue; } $t1 = time(); $Data_free = FormatBytes($Data_free / 1024); $Data_free = str_replace(" ", " ", $Data_free); mysql_admin_events("Table {$database}/`{$TableName}` need to be optimized ({$Data_free} Free)", __FUNCTION__, __FILE__, __LINE__, "defrag"); $q->QUERY_SQL("OPTIMIZE TABLE `{$TableName}`", $database); if (!$q->ok) { $unix->mysql_admin_events("{$database}/{$TableName} Error {$q->mysql_error}", __FUNCTION__, __FILE__, __LINE__, "defrag"); continue; } $time = $unix->distanceOfTimeInWords($t1, time(), true); mysql_admin_events("Table {$database}/`{$TableName}` optimized {$time}", __FUNCTION__, __FILE__, __LINE__, "defrag"); } }
function repair_all() { $unix = new unix(); $pidfile = "/etc/artica-postfix/pids/" . basename(__FILE__) . "." . __FUNCTION__ . ".pid"; $timefile = "/etc/artica-postfix/pids/" . basename(__FILE__) . "." . __FUNCTION__ . ".time"; if ($GLOBALS["VERBOSE"]) { echo "repair_all Loading done...\nTimeFile:{$timefile}\n"; } $unix = new unix(); if (system_is_overloaded()) { mysql_admin_events("Overloaded system, aborting task", __FILE__, __LINE__); return; } $pid = @file_get_contents($pidfile); if (!$GLOBALS["FORCE"]) { if ($pid < 100) { $pid = null; } if ($unix->process_exists($pid, basename(__FILE__))) { if ($GLOBALS["VERBOSE"]) { echo "Already executed pid {$pid}\n"; } return; } $timeexec = $unix->file_time_min($timefile); if ($timeexec < 120) { if ($GLOBALS["VERBOSE"]) { echo "{$timeexec} <> 120...\n"; } return; } } $q = new mysql(); $myisamchk = $unix->find_program("myisamchk"); $sql = "SHOW TABLE STATUS FROM `artica_backup`"; $q = new mysql(); $MYSQL_DATA_DIR = $unix->MYSQL_DATA_DIR(); $results = $q->QUERY_SQL($sql, "artica_backup"); while ($ligne = @mysql_fetch_array($results, MYSQL_ASSOC)) { $TableName = $ligne["Name"]; $ligne2 = mysql_fetch_array($q->QUERY_SQL("ANALYZE TABLE {$TableName}", "artica_backup")); $comment = $ligne["Comment"]; echo "{$TableName}: {$ligne2["Msg_type"]} - {$ligne2["Msg_text"]} ({$comment})\n{$myisamchk} --safe-recover {$MYSQL_DATA_DIR}/artica_backup/{$TableName}.MYI\n"; if ($TableName == "squid_caches_center") { $ligne2["Msg_type"] = "error"; } if ($ligne2["Msg_type"] == "error") { if (is_file("{$MYSQL_DATA_DIR}/artica_backup/{$TableName}.MYI")) { mysql_admin_events("Repair: {$MYSQL_DATA_DIR}/artica_backup/{$TableName}.MYI", __FUNCTION__, __FILE__, __LINE__); shell_exec("{$myisamchk} --safe-recover {$MYSQL_DATA_DIR}/artica_backup/{$TableName}.MYI"); } continue; } echo "{$TableName} -> {$comment}\n"; if (trim($comment) == null) { continue; } } $sql = "SHOW TABLE STATUS FROM `artica_events`"; $results = $q->QUERY_SQL($sql, "artica_events"); while ($ligne = @mysql_fetch_array($results, MYSQL_ASSOC)) { $TableName = $ligne["Name"]; $comment = $ligne["Comment"]; $ligne2 = mysql_fetch_array($q->QUERY_SQL("ANALYZE TABLE {$TableName}", "artica_events")); $comment = $ligne["Comment"]; echo "{$TableName}: {$ligne2["Msg_type"]} - {$ligne2["Msg_text"]} ({$comment})\n"; if ($ligne2["Msg_type"] == "error") { if (is_file("{$MYSQL_DATA_DIR}/artica_events/{$TableName}.MYI")) { mysql_admin_events("Repair: {$MYSQL_DATA_DIR}/artica_events/{$TableName}.MYI", __FUNCTION__, __FILE__, __LINE__); shell_exec("{$myisamchk} --safe-recover {$MYSQL_DATA_DIR}/artica_events/{$TableName}.MYI"); } continue; } if (trim($comment) == null) { continue; } if (preg_match("#Incorrect key file for table#", $comment)) { if (is_file("{$MYSQL_DATA_DIR}/artica_events/{$TableName}.MYI")) { mysql_admin_events("Repair: {$MYSQL_DATA_DIR}/artica_events/{$TableName}.MYI", __FUNCTION__, __FILE__, __LINE__); shell_exec("{$myisamchk} --safe-recover {$MYSQL_DATA_DIR}/artica_events/{$TableName}.MYI"); } } } $sock = new sockets(); $WORKDIR = $sock->GET_INFO("SquidStatsDatabasePath"); if ($WORKDIR == null) { $WORKDIR = "/opt/squidsql"; } if (is_dir($WORKDIR)) { $q = new mysql_squid_builder(); $sql = "SHOW TABLE STATUS FROM `squidlogs`"; $results = $q->QUERY_SQL($sql); while ($ligne = @mysql_fetch_array($results, MYSQL_ASSOC)) { $TableName = trim($ligne["Name"]); if ($TableName == null) { continue; } $comment = $ligne["Comment"]; $ligne2 = mysql_fetch_array($q->QUERY_SQL("ANALYZE TABLE {$TableName}", "squidlogs")); if ($ligne2["Msg_type"] == "error") { if (is_file("{$MYSQL_DATA_DIR}/squidsql/{$TableName}.MYI")) { mysql_admin_events("Repair: {$MYSQL_DATA_DIR}/squidsql/{$TableName}.MYI", __FUNCTION__, __FILE__, __LINE__); shell_exec("{$myisamchk} --safe-recover {$MYSQL_DATA_DIR}/squidsql/{$TableName}.MYI"); } } if (preg_match("#Incorrect key file for table#", $comment)) { if (is_file("{$MYSQL_DATA_DIR}/squidsql/{$TableName}.MYI")) { mysql_admin_events("Repair: {$MYSQL_DATA_DIR}/squidsql/{$TableName}.MYI", __FUNCTION__, __FILE__, __LINE__); shell_exec("{$myisamchk} --safe-recover {$MYSQL_DATA_DIR}/squidsql/{$TableName}.MYI"); } } } } else { echo "{$WORKDIR} no such dir\n"; } optimize(true); }