Anoter question: Каков наилучший способ скопировать всю таблицу из одной базы данных, не используя что-то вроде этого:
CREATE TABLE DB2.USER SELECT * FROM DB1.USER;
Это не работает, потому что я не могу использовать данные из двух баз данных одновременно. Поэтому я решил сделать это с помощью php. Там мне нужно было кэшировать все данные, а затем создать таблицу в другой БД.
Но теперь – каков был бы самый быстрый способ кэширования данных? Я думаю, что каждый раз было меньше 1000 записей за стол.
Спасибо за ваш вклад
Экспортируйте его в файл .sql и импортируйте в новую базу данных.
В phpMyAdmin щелкните базу данных, которую хотите экспортировать, нажмите « Экспорт» , выберите « Сохранить как файл» , затем откройте .
Затем загрузите его в новую базу данных, в которую вы хотите дублировать данные.
В строгом смысле PHP единственный способ, которым я мог бы подумать, это использовать SHOW TABLES
и describe {$table}
чтобы вернуть все имена полей и структуры записей, проанализировать их, создать свои инструкции create table
, затем прокрутите каждую таблицу и создайте insert
.
Я боюсь, что лучшее, что я могу сделать для вас, это своего рода прототип кода, который, как я мог бы предположить, был бы невероятно насыщен сервером, поэтому я рекомендую вам пойти по альтернативному маршруту.
Что-то вроде:
<?php // connect to first DB $tables = mysql_query("SHOW TABLES") or die(mysql_error()); while ($row = mysql_fetch_assoc($tables)) { foreach($row as $value) { $aTables[] = $value; } } $i = 0; foreach ($aTables as $table) { $desc = mysql_query("describe " . $table); while ($row = mysql_fetch_assoc($desc)) { $aFields[$i][] = array($row["Field"],$row["Type"],$row["Null"],$row["Key"],$row["Default"],$row["Extra"]); } $i++; } // connect to second DB for ($i = 0; $i < count($aTables); $i++) { // Loop through tables, fields, and rows for create table/insert statements $query = 'CREATE TABLE IF NOT EXISTS {$aTables[$i]} ( //loop through fields { {$aFields[$i][$j][0]} {$aFields[$i][$j][1]} {$aFields[$i][$j][2]} {$aFields[$i][$j][3]} {$aFields[$i][$j][4]} {$aFields[$i][$j][5]}, {$aFields[$i][$j][0]} {$aFields[$i][$j][1]} {$aFields[$i][$j][2]} {$aFields[$i][$j][3]} {$aFields[$i][$j][4]} {$aFields[$i][$j][5]}, {$aFields[$i][$j][0]} {$aFields[$i][$j][1]} {$aFields[$i][$j][2]} {$aFields[$i][$j][3]} {$aFields[$i][$j][4]} {$aFields[$i][$j][5]}, {$aFields[$i][$j][0]} {$aFields[$i][$j][1]} {$aFields[$i][$j][2]} {$aFields[$i][$j][3]} {$aFields[$i][$j][4]} {$aFields[$i][$j][5]}, etc... } )'; //loop through data $query .= 'INSERT INTO {$aTables[$i]} VALUES'; $result = mysql_query("SELECT * FROM " . $aTables[$i]); while ($row = mysql_fetch_assoc($result)) { $query .= '('; foreach ($aFields[$i][0] as $field) { $query .= '"{$row[$field]}",'; } $query .= '),'; } mysql_query($query); } ?>
Это основано на этом скрипте, который может пригодиться для справки.
Надеюсь, это поможет вам начать, но я предлагаю вам искать альтернативу, отличную от PHP.
Так я это делаю, не оригинал со мной:
http://homepage.mac.com/kelleherk/iblog/C711669388/E2080464668/index.html
$servername = "localhost"; $username = "root"; $password = "*******"; $dbname = "dbname"; $sqlfile = "/path/backupsqlfile.sql"; $command='mysql -h' .$servername .' -u' .$username .' -p' .$password .' ' .$dbname .' < ' .$sqlfile; exec($command);