好的,這是情況。我通過進入phpMyAdmin備份了我的數據庫,然後在沒有選擇任何數據庫的情況下單擊導出。現在,當我嘗試導入導出的SQL文件到一個新的MySQL安裝,我越來越喜歡 http://pastebin.com/vDHdG2T6錯誤(使用引擎收錄,因爲它是很長)無法導入從phpMyAdmin導出的sql文件
我知道我應該使用mysqldump的,而不是因爲它會跳過INFORMATION_SCHEMA表。 你有沒有建議如何解決這個問題或導入該文件,而不必編輯百萬行文件?
我也嘗試導入的文件,如: 的mysql -u根-p -f -h本地主機<文件/ localhost.sql 這並導入數據庫,但他們中許多人損壞,丟失表和這樣的...我使用了-f,所以無論錯誤如何,它都會繼續運行。
在此先感謝!
編輯:
謝謝你們的建議,我敢肯定,你在正確的軌道上。然而,在此期間,我最終搞亂了我的備份文件,所以我不得不寫一點點的php代碼來提取我需要的代碼。 這萬一有人有同樣的問題:
$data = file_get_contents('import.sql');
if (! isset($_GET['db'])) {
//list databases
echo '<ul>';
preg_match_all("/Database: `(.*?)`/", $data, $dbs);
foreach ($dbs[1] as $database){
echo "<li><a href=\"index.php?db=$database\">$database</a></li>";
}
echo '</ul>';
} else {
$database = $_GET['db'];
//only get the queries for that db
$data = explode(PHP_EOL, $data);
$buffer = array();
$buffer_started = false;
foreach ($data as $key => $row){
if (preg_match("/Database: `.*?`/", $row) && $buffer_started) {
array_pop($buffer);
break;
}
if (preg_match("/Database: `$database`/", $row)) {
$buffer_started = true;
continue;
}
if ($buffer_started) {
array_push($buffer, $row);
}
unset($data[$key]);
}
echo '<textarea cols="128" rows="20">'.implode("\n", $buffer).'</textarea>';
}
另存爲的index.php,把你的SQL到import.sql在同一目錄下,它會列出在文件中找到的數據庫,只需點擊無論你想要什麼,它都會在textarea中顯示查詢。
祝你好運。
您是否嘗試過'-D databasename'參數? – arnep 2012-03-09 13:51:59
創建導出時,如果要刪除現有結構,請確保選中刪除表,這將在導入時從數據庫中清除現有結構/數據。如果您不想丟失現有結構,則可能需要在每個表上運行截斷表以防止出現重複條目。 – RumpRanger 2012-03-09 15:01:03
如果這是您爲之工作的路線,您可以回答自己的問題並接受您的答案。 – 2012-03-22 15:09:11