示例#1
0
 private function testMysqlServer()
 {
     $good = false;
     do {
         echo "Name of connection into configuration/db.config.ini.php : [pmacontrol]\n";
         $hostname = trim($this->prompt('Hostname/IP of MySQL [default : 127.0.0.1] : '));
         $port = trim($this->prompt('Port of MySQL        [default : 3306]      : '));
         if (empty($port)) {
             $port = 3306;
         }
         if (empty($hostname)) {
             $hostname = "127.0.0.1";
         }
         $fp = @fsockopen($hostname, $port, $errno, $errstr, 30);
         if (!$fp) {
             echo Color::getColoredString("{$errstr} ({$errno})", "grey", "red") . "\n";
             echo "MySQL server : " . $hostname . ":" . $port . " -> " . Color::getColoredString("KO", "grey", "red") . "\n";
             echo str_repeat("-", 80) . "\n";
         } else {
             $this->cmd("echo 1", "MySQL server : " . $hostname . ":" . $port . " available");
             fclose($fp);
             $good = true;
         }
     } while ($good === false);
     //login & password mysql
     $good = false;
     do {
         echo "MySQL account on (" . $hostname . ":" . $port . ")\n";
         $rl = new Hoa\Console\Readline\Readline();
         $user = $rl->readLine('User     [default : root]    : ');
         $rl = new Hoa\Console\Readline\Password();
         $password = $rl->readLine('Password [default : (empty)] : ');
         if (empty($user)) {
             $user = "******";
         }
         $link = mysqli_connect($hostname . ":" . $port, $user, trim($password));
         if ($link) {
             $good = true;
             $this->cmd("echo 1", "Login/password for MySQL's server");
         } else {
             echo Color::getColoredString('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error(), "grey", "red") . "\n";
             //echo "credential (".$user." // ".$password.")\n";
             echo str_repeat("-", 80) . "\n";
         }
         sleep(1);
     } while ($good === false);
     //check TokuDB
     //
     $sql = "select count(1) as cpt from information_schema.engines where engine = 'TokuDB' and (SUPPORT = 'YES' OR SUPPORT = 'DEFAULT');";
     $res = mysqli_query($link, $sql);
     while ($ob = mysqli_fetch_object($res)) {
         if ($ob->cpt !== "1") {
             echo Color::getColoredString('Engine "TokuDB" is not installed yet', "grey", "red") . "\n";
             echo "To install TokuDB :\n";
             echo "\t- Add : \"plugin-load-add=ha_tokudb.so\" in your my.cnf\n";
             echo "\t- Disable transparent_hugepage : \"echo never > /sys/kernel/mm/transparent_hugepage/enabled\" \n";
             echo "\t- Disable transparent_hugepage : \"echo never > /sys/kernel/mm/transparent_hugepage/defrag\" \n";
             echo "\t- Restart MySQL server\n";
             exit(2);
         }
     }
     //check Spider
     //
     $sql = "select count(1) as cpt from information_schema.engines where engine = 'SPIDER' and (SUPPORT = 'YES' OR SUPPORT = 'DEFAULT');";
     $res = mysqli_query($link, $sql);
     while ($ob = mysqli_fetch_object($res)) {
         if ($ob->cpt !== "1") {
             echo Color::getColoredString('Engine "SPIDER" is not installed yet', "grey", "red") . "\n";
             echo "To install Spider, run the install_spider.sql script, located in the share directory, for example, from the command line:\n\n";
             echo "\tmysql -uroot -p < /usr/share/mysql/install_spider.sql\n";
             echo "\n";
             echo "or, from within mysql\n\n";
             echo "\tsource /usr/share/mysql/install_spider.sql\n\n";
             exit(2);
         }
     }
     wrong_db:
     $good = false;
     do {
         echo "Name of database who will be used by PmaConrol\n";
         $rl = new Hoa\Console\Readline\Readline();
         $database = $rl->readLine('Database     [default : pmacontrol]    : ');
         if (empty($database)) {
             $database = "pmacontrol";
         }
         $sql = "SELECT count(1) as cpt FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '" . mysqli_real_escape_string($link, $database) . "'";
         $result = mysqli_query($link, $sql);
         $ob = mysqli_fetch_object($result);
         if ($ob->cpt == "1") {
             echo Color::getColoredString('Database -> KO (this database already exist)', "grey", "red") . "\n";
             echo str_repeat("-", 80) . "\n";
         } else {
             $good = true;
             $this->cmd("echo 1", "Database's name");
         }
     } while ($good === false);
     //create database
     $sql = "CREATE DATABASE " . mysqli_real_escape_string($link, $database) . "";
     $res = mysqli_query($link, $sql);
     if ($res) {
         $this->cmd("echo 1", 'The database "' . mysqli_real_escape_string($link, $database) . '" has been created');
     } else {
         echo Color::getColoredString('The database "' . mysqli_real_escape_string($link, $database) . '" couldn\'t be created', "black", "red") . "\n";
         goto wrong_db;
         echo str_repeat("-", 80) . "\n";
     }
     Crypt::$key = CRYPT_KEY;
     $passwd = Crypt::encrypt($password);
     $mysql['hostname'] = $hostname;
     $mysql['port'] = $port;
     $mysql['user'] = $user;
     $mysql['password'] = $passwd;
     $mysql['database'] = $database;
     return $mysql;
 }
示例#2
0
 public function after_edit_db()
 {
     $this->view = false;
     $db = $this->di['db']->sql(DB_DEFAULT);
     Crypt::$key = CRYPT_KEY;
     foreach ($this->di['db']->getAll() as $server) {
         $info_server = $this->di['db']->getParam($server);
         $data['mysql_server']['name'] = $server;
         $data['mysql_server']['ip'] = $info_server['hostname'];
         $data['mysql_server']['login'] = $info_server['user'];
         $data['mysql_server']['passwd'] = Crypt::encrypt($info_server['password']);
         $data['mysql_server']['port'] = empty($info_server['port']) ? 3306 : $info_server['port'];
         if (!$db->sql_save($data)) {
             debug($data);
             debug($db->sql_error());
             exit;
         } else {
             echo $data['mysql_server']['name'] . PHP_EOL;
         }
     }
 }
示例#3
0
 public function updateServerList()
 {
     $this->view = false;
     $db = $this->di['db']->sql(DB_DEFAULT);
     $sql = "SELECT * FROM `mysql_server`";
     $servers_mysql = $db->sql_fetch_yield($sql);
     $all_server = array();
     foreach ($servers_mysql as $mysql) {
         $all_server[$mysql['name']] = $mysql;
     }
     Crypt::$key = CRYPT_KEY;
     $all = array();
     foreach ($this->di['db']->getAll() as $server) {
         $all[] = $server;
         $info_server = $this->di['db']->getParam($server);
         $data = array();
         if (!empty($all_server[$server])) {
             $data['mysql_server']['id'] = $all_server[$server]['id'];
             unset($all_server[$server]);
         } else {
             echo "Add : " . $server . " to monitoring\n";
             //to update
             $data['mysql_server']['id_client'] = 1;
             $data['mysql_server']['id_environment'] = 1;
         }
         $data['mysql_server']['name'] = $server;
         $data['mysql_server']['ip'] = $info_server['hostname'];
         $data['mysql_server']['login'] = $info_server['user'];
         $data['mysql_server']['passwd'] = Crypt::encrypt($info_server['password']);
         $data['mysql_server']['port'] = empty($info_server['port']) ? 3306 : $info_server['port'];
         $data['mysql_server']['date_refresh'] = date('Y-m-d H:i:s');
         $data['mysql_server']['is_monitored'] = 1;
         if (!empty($info_server['ssh_login'])) {
             $data['mysql_server']['ssh_login'] = Crypt::encrypt($info_server['ssh_login']);
         }
         if (!empty($info_server['ssh_password'])) {
             $data['mysql_server']['ssh_password'] = Crypt::encrypt($info_server['ssh_password']);
         }
         if (!$db->sql_save($data)) {
             debug($data);
             debug($db->sql_error());
             exit;
         } else {
             //echo $data['mysql_server']['name'] . PHP_EOL;
         }
     }
     foreach ($all_server as $to_delete) {
         $sql = "DELETE FROM `mysql_server` WHERE id=" . $to_delete['id'] . "";
         $db->sql_query($sql);
         echo "[Warning] Removed : " . $to_delete['name'] . " from monitoring\n";
     }
 }
示例#4
0
 public function setPasswdPmaControl()
 {
     $this->view = false;
     do {
         fwrite(STDOUT, "Choose password for remote user pmacontrol\n");
         $passwdpma = self::promptSilent("Enter new UNIX password:"******"Retype new UNIX password:"******"Sorry, passwords do not match\n\n", "red");
         }
     } while ($passwdpma != $passwdpma2);
     Crypt::$key = CRYPT_KEY;
     $password_crypted = Crypt::encrypt($passwdpma);
     $file = "<?php\r\nif (! defined('PMACONTROL_PASSWD'))\r\n{\r\n    define('PMACONTROL_PASSWD', '" . $password_crypted . "');\r\n}\r\n";
     file_put_contents(CONFIG . "pmacontrol.config.php", $file);
     return $passwdpma;
 }