2011-08-10 8 views
5

Próba skopiowania bazy danych do nowej bazy danych za pomocą skryptu PHP, który uruchamia zapytania SQL na serwerze MySQL. Kod mam dalece jest:Kopiowanie bazy danych w MySQL, jak kopiować widoki?

$dbh->exec("CREATE DATABASE IF NOT EXISTS $new_news CHARACTER SET UTF8;"); 
$results = $dbh->query("SHOW TABLES FROM $old_news"); 
$table_list = $results->fetchAll(PDO::FETCH_NUM); 

foreach($table_list as $table_row){ 
    foreach($table_row as $table){ 
     $results = $dbh->query("SELECT table_type FROM information_schema.tables where table_schema = '$old_news' and table_name = '$table'"); 
     $table_type = $results->fetch(PDO::FETCH_ASSOC); 
     $table_type = $table_type['table_type']; 
     if($table_type == 'BASE TABLE'){ 
      echo "Creating table $table and populating...\n"; 
      $dbh->exec("CREATE TABLE $new_news.$table LIKE $old_news.$table"); 
      $dbh->exec("INSERT INTO $new_news.$table SELECT * FROM $old_news.$table"); 
     }else if($table_type == 'VIEW'){ 
      //echo "Creating view $table...\n"; 
      //$dbh->exec("CREATE VIEW $new_news.$table LIKE $old_news.$table"); 
      echo "$table is a view, which cannot be copied atm\n"; 
     }else{ 
      echo "Skipping $table_type $table, unsupported type\n"; 
     } 
    } 
} 

to obecnie wygląda na wszystkich stołach w $ old_news odnajduje typ tabeli w information_schema i tworzy identyczną tablicę w $ new_news w zależności od rodzaju. W przypadku tabel tworzy strukturę tabeli tak samo, a następnie "INSERT INTO SELECT", aby je wypełnić.

Jak skopiować widok bez mysqldump całej bazy danych?

Odpowiedz

2

Jedną opcją byłoby przejście z SHOW CREATE VIEW dla każdego widoku, który zwraca składnię tworzenia widoku.

Aby uzyskać szczegółowe informacje, patrz 12.4.5.10. SHOW CREATE VIEW Syntax.