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]); } }
/** * 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.')); } }