function ChangeRoot($instance_id) { echo "Loading instance {$instance_id}\n"; $mysqld = new mysqlserver_multi($instance_id); $username = $mysqld->mysql_admin; $password = $mysqld->mysql_password; if ($password == null) { echo "Password is null, aborting\n"; return; } $unix = new unix(); $mysqld_safe = $unix->find_program("mysqld_safe"); $nohup = $unix->find_program("nohup"); $killbin = $unix->find_program("kill"); echo "mysqld_safe:{$mysqld_safe}\n"; $ini = new Bs_IniHandler(); $ini->loadFile("/etc/mysql-multi.cnf"); $array = $ini->_params["mysqld{$instance_id}"]; $datadir = $ini->get("mysqld{$instance_id}", "datadir"); while (list($key, $value) = each($array)) { $tt[] = "{$key} = {$value}"; } $newconfig = "[mysqld]\n" . @implode("\n", $tt) . "\n"; @file_put_contents("/etc/mysql-temp-{$instance_id}.cf", $newconfig); for ($i = 0; $i < 5; $i++) { $pid = multi_get_pid($instance_id); if ($pid > 0) { echo "Stopping mysqld safe pid:{$pid}\n"; unix_system_kill_force($pid); sleep(1); } else { break; } } echo "Stopping instance {$instance_id}\n"; //shell_exec($unix->LOCATE_PHP5_BIN()." /usr/share/artica-postfix/exec.mysql.build.php --multi-stop $instance_id >/dev/null 2>&1"); for ($i = 0; $i < 5; $i++) { $pid = multi_get_pidNormal($instance_id); if ($pid > 0) { echo "Stopping mysqld pid:{$pid}\n"; unix_system_kill_force($pid); sleep(1); } else { break; } } $pid = @file_get_contents("/var/run/mysqld/mysqld{$instance_id}.pid"); if ($unix->process_exists($pid)) { echo "Stopping instance {$instance_id} failed...\n"; return; } echo "Running instance {$instance_id} in safe mode...\n"; if (file_exists("{$datadir}/error.log")) { @unlink("{$datadir}/error.log"); } $cmd = "{$nohup} {$mysqld_safe} --defaults-file=/etc/mysql-temp-{$instance_id}.cf --datadir=\"{$datadir}\" --skip-grant-tables --skip-networking --skip-external-locking --log-error=\"{$datadir}/error.log\" --pid-file=/var/run/mysqld/mysqld{$instance_id}.pid >/dev/null 2>&1 &"; if ($GLOBALS["VERBOSE"]) { echo "{$cmd}\n"; } shell_exec($cmd); for ($i = 0; $i < 4; $i++) { sleep(1); $pid = @file_get_contents("/var/run/mysqld/mysqld{$instance_id}.pid"); if ($unix->process_exists($pid)) { sleep(1); break; } } $pid = @file_get_contents("/var/run/mysqld/mysqld{$instance_id}.pid"); if (!$unix->process_exists($pid)) { echo "Failed to run mysqld safe\n"; if (file_exists("{$datadir}/error.log")) { echo @file_get_contents("{$datadir}/error.log"); } shell_exec($nohup . " " . $unix->LOCATE_PHP5_BIN() . " /usr/share/artica-postfix/exec.mysql.build.php --multi-start {$instance_id} >/dev/null 2>&1 &"); return; } $q = new mysql_multi($instance_id); $ligne = mysql_fetch_array($q->QUERY_SQL("SELECT User from user WHERE User='******' LIMIT 0,1", "mysql")); if (!$q->ok) { echo $q->mysql_error . "\n"; } echo "User:{$username} = {$ligne["User"]}\n"; if ($ligne["User"] != null) { echo "User: Already exists, update password\n"; $sqlstring = "UPDATE user SET password=PASSWORD(\"{$password}\") WHERE user=\"{$username}\""; $q->QUERY_SQL($sqlstring, "mysql"); if (!$q->ok) { echo $q->mysql_error . "\n"; } $q->QUERY_SQL_NO_BASE("FLUSH PRIVILEGES"); if (!$q->ok) { echo $q->mysql_error . "\n"; } } else { echo "Root: did not exists, Create a new one...\n"; $q->QUERY_SQL_NO_BASE("create user root@localhost"); $q->QUERY_SQL_NO_BASE("GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' with grant option"); $q->QUERY_SQL_NO_BASE("FLUSH PRIVILEGES"); } echo "Stopping mysqld safe....\n"; for ($i = 0; $i < 5; $i++) { $pid = multi_get_pid($instance_id); if ($pid > 0) { echo "Stopping mysqld safe pid:{$pid}\n"; unix_system_kill_force($pid); sleep(1); } else { break; } } exec($unix->LOCATE_PHP5_BIN() . " /usr/share/artica-postfix/exec.mysql.build.php --multi-stop {$instance_id} 2>&1", $results); while (list($key, $value) = each($results)) { echo "{$value}\n"; } $results = array(); echo "Start mysqld in normal mode\n"; exec($unix->LOCATE_PHP5_BIN() . " /usr/share/artica-postfix/exec.mysql.build.php --multi-start {$instance_id} 2>&1", $results); while (list($key, $value) = each($results)) { echo "{$value}\n"; } }
function multi_start($ID) { $q = new mysqlserver(); $GLOBALS["MULTI"] = true; $GLOBALS["SHOWLOGONLYFOR"] = $ID; multi_monit($ID); multi_create_cache(); $q->mysql_multi(); echo "Starting......: " . date("H:i:s") . " Mysql instance id:{$ID}..\n"; $pidfile = "/var/run/mysqld/mysqld{$ID}.pid"; echo "Starting......: " . date("H:i:s") . " Mysql instance id:{$ID} PID:{$pidfile}..\n"; $unix = new unix(); if ($unix->process_exists($unix->get_pid_from_file($pidfile))) { echo "Starting......: " . date("H:i:s") . " Mysql instance id:{$ID} already running...\n"; return; } $chmod = $unix->find_program("chmod"); $ini = new iniFrameWork("/etc/mysql-multi.cnf"); $database_path = $ini->get("mysqld{$ID}", "datadir"); if (is_file("{$database_path}/error.log")) { @unlink("{$database_path}/error.log"); } echo "Starting......: " . date("H:i:s") . " Mysql instance id:{$ID} database={$database_path}\n"; $cmd = "{$chmod} 755 {$database_path}"; exec($cmd, $results); $mysqld_multi = $unix->find_program("mysqld_multi"); $cmd = "{$mysqld_multi} --defaults-file=/etc/mysql-multi.cnf start {$ID} --verbose --no-log 2>&1"; if (is_file("{$database_path}/maria_log_control")) { @unlink("{$database_path}/maria_log_control"); } if ($GLOBALS["VERBOSE"]) { echo "{$cmd}\n"; } exec($cmd, $results); while (list($index, $ligne) = each($results)) { echo "Starting......: " . date("H:i:s") . " Mysql instance id:{$ID} {$ligne}\n"; } for ($i = 0; $i < 4; $i++) { sleep(1); if ($unix->process_exists(multi_get_pid($ID))) { sleep(1); break; } } if (!$unix->process_exists(multi_get_pid($ID))) { echo "Starting......: " . date("H:i:s") . " Mysql instance id:{$ID} failed..\n"; } else { $q = new mysql_multi($ID); $q->QUERY_SQL_NO_BASE("create user 'mysqld_multi'@'127.0.0.1' identified by 'mysqld_multi'"); $q->QUERY_SQL_NO_BASE("create user 'mysqld_multi'@'localhost' identified by 'mysqld_multi'"); $q->QUERY_SQL_NO_BASE("create user 'grant shutdown on *.* to mysqld_multi'"); $q = new mysqlserver_multi($ID); $q->setssl(); } if (is_file("{$database_path}/error.log")) { echo "Starting......: " . date("H:i:s") . " Mysql instance id:{$ID} {$database_path}/error.log\n"; $f = explode("\n", @file_get_contents("{$database_path}/error.log")); while (list($index, $ligne) = each($f)) { if (trim($ligne) == null) { continue; } if (preg_match("#^[0-9]+\\s+[0-9\\:]+\\s+(.+)#", $ligne, $re)) { $ligne = $re[1]; } echo "Starting......: " . date("H:i:s") . " {$ligne}\n"; } } else { echo "Starting......: " . date("H:i:s") . " Mysql instance id:{$ID} {$database_path}/error.log no such file\n"; } }
function multi_delete($ID) { $unix = new unix(); $rm = $unix->find_program("rm"); echo "Deleting......: zarafa-server instance id:{$ID}..\n"; echo "Deleting......: zarafa-server disable instance\n"; $q = new mysql(); $q->QUERY_SQL("UPDATE zarafamulti SET enabled=0 WHERE ID='{$ID}'", "artica_backup"); echo "Deleting......: zarafa-server stopping instance\n"; multi_stop($ID); $zarafa = new zarafamulti($ID); echo "Deleting......: zarafa-server removing directory {$zarafa->attachment_path}\n"; if (is_dir($zarafa->attachment_path)) { recursive_remove_directory($zarafa->attachment_path); } echo "Deleting......: zarafa-server removing directory /etc/zarafa-{$ID}\n"; if (is_dir("/etc/zarafa-{$ID}")) { recursive_remove_directory("/etc/zarafa-{$ID}"); } $database = "zarafa{$ID}"; echo "Deleting......: zarafa-server removing database {$database}\n"; if ($zarafa->mysql_instance_id > 0) { $q = new mysql_multi($zarafa->mysql_instance_id); $q->QUERY_SQL_NO_BASE("DROP DATABASE `{$database}`"); } else { $q = new mysql(); $q->DELETE_DATABASE($database); } echo "Deleting......: zarafa-server removing entry\n"; $q = new mysql(); $q->QUERY_SQL("DELETE FROM zarafamulti WHERE ID={$ID}", "artica_backup"); if ($zarafa->PostfixInstance != null) { echo "Deleting......: zarafa-server reconfigure {$zarafa->PostfixInstance} postfix instance \n"; $sock = new sockets(); $sock->getFrameWork("postfix.php?reconfigure-single-instance={$zarafa->PostfixInstance}"); } echo "Deleting......: zarafa-server done...\n"; }