public function testDatabaseBackupAndRestore()
 {
     // Create new database (zurmo_wacky).
     if (RedBeanDatabase::getDatabaseType() == 'mysql') {
         $this->assertTrue(DatabaseCompatibilityUtil::createDatabase('mysql', $this->hostname, $this->rootUsername, $this->rootPassword, $this->databasePort, $this->temporaryDatabaseName));
         $connection = @mysql_connect($this->hostname . ':' . $this->databasePort, $this->rootUsername, $this->rootPassword);
         $this->assertTrue(is_resource($connection));
         @mysql_select_db($this->temporaryDatabaseName);
         @mysql_query("create table temptable (temptable_id int(11) unsigned not null)", $connection);
         @mysql_query("insert into temptable values ('5')", $connection);
         @mysql_query("insert into temptable values ('10')", $connection);
         $result = @mysql_query("SELECT count(*) from temptable");
         $totalRows = mysql_fetch_row($result);
         @mysql_close($connection);
         $this->assertEquals(2, $totalRows[0]);
         $this->assertTrue(DatabaseCompatibilityUtil::backupDatabase('mysql', $this->hostname, $this->rootUsername, $this->rootPassword, $this->temporaryDatabaseName, $this->databaseBackupTestFile));
         //Drop database, and restore it from backup.
         $this->assertTrue(DatabaseCompatibilityUtil::createDatabase('mysql', $this->hostname, $this->rootUsername, $this->rootPassword, $this->databasePort, $this->temporaryDatabaseName));
         $this->assertTrue(DatabaseCompatibilityUtil::restoreDatabase('mysql', $this->hostname, $this->rootUsername, $this->rootPassword, $this->temporaryDatabaseName, $this->databaseBackupTestFile));
         $connection = @mysql_connect($this->hostname . ':' . $this->databasePort, $this->rootUsername, $this->rootPassword);
         $this->assertTrue(is_resource($connection));
         @mysql_select_db($this->temporaryDatabaseName);
         $result = @mysql_query("SELECT count(*) from temptable");
         $totalRows = mysql_fetch_row($result);
         $result = @mysql_query("SELECT * from temptable");
         $rows1 = mysql_fetch_row($result);
         $rows2 = mysql_fetch_row($result);
         @mysql_close($connection);
         $this->assertEquals(2, $totalRows[0]);
         $this->assertEquals(5, $rows1[0]);
         $this->assertEquals(10, $rows2[0]);
     }
 }
예제 #2
0
 /**
  * Backup database
  * @param string $filePath
  * @param MessageStreamer $messageStreamer
  * @param $databaseType
  * @param $databaseHost
  * @param $databaseName
  * @param $databasePort
  * @param $databaseUsername
  * @param $databasePassword
  */
 protected function backupDatabase($filePath, $messageStreamer, $databaseType, $databaseHost, $databaseName, $databasePort, $databaseUsername, $databasePassword)
 {
     // If file already exist, ask user to confirm that want to overwrite it.
     if (file_exists($filePath)) {
         $message = Zurmo::t('Commands', 'Backup file already exists. Are you sure you want to overwrite the existing file?.');
         if (!$this->confirm($message)) {
             $messageStreamer->add(Zurmo::t('Commands', 'Backup not completed.'));
             $messageStreamer->add(Zurmo::t('Commands', 'Please delete existing file or enter new one, and start backup process again.'));
             Yii::app()->end();
         }
     }
     $messageStreamer->add(Zurmo::t('Commands', 'Starting database backup process.'));
     $result = DatabaseCompatibilityUtil::backupDatabase($databaseType, $databaseHost, $databaseUsername, $databasePassword, $databasePort, $databaseName, $filePath);
     if ($result) {
         $messageStreamer->add(Zurmo::t('Commands', 'Database backup completed.'));
     } else {
         $messageStreamer->add(Zurmo::t('Commands', 'There was an error during backup.'));
         // It is possible that empty file is created, so delete it.
         if (file_exists($filePath)) {
             $messageStreamer->add(Zurmo::t('Commands', 'Deleting backup file.'));
             unlink($filePath);
         }
         $messageStreamer->add(Zurmo::t('Commands', 'Please backup database manually.'));
     }
 }