Php

導入大型 SQL 文件 phpmyadmin

  • September 18, 2014

我正在嘗試在 phpmyadmin 中導入此 SQL 文件並收到此消息

#1064 - You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version 
for the right syntax to use near 
'<br /> <b>Fatal error</b>: Allowed memory size of 134217728 bytes exhausted (tr' at line 1

我該怎麼做才能進行此導入?

假設您不能進一步增加記憶體大小,那麼有幾個選項。

  • 如果您不熟悉命令行並且您真的想堅持使用 GUI 樣式導入,那麼您可以使用 BigDump ( http://www.ozerov.de/bigdump/ )。我用過一次,但已經有一段時間了。根據我的記憶,您將下載一個名為 bigdump.php 的文件(帶有一些說明)並將其放在您的網路伺服器上的 MySQL DB 轉儲文件的目錄中,該文件太大而無法通過 PHPMYADMIN 導入。然後使用瀏覽器導航到它 - 例如http://your-website.com/bigdump.php
  • 如果您熟悉命令行並使用基於 Linux 的系統,那麼您可以使用如下程式碼:

mysql -u 使用者名 -p 數據庫名 < 文件名.sql

但是,在執行此命令之前,數據庫和使用者(具有數據庫權限)需要存在。注意我從另一個來源複製了上述命令。我總是像這樣進行轉儲和恢復: DUMP: mysqldump -u DB_USER -h DB_HOST -pDB_PASSWORD DB_NAME | gzip -9 &gt; DB_NAME.sql.gz RESTORE:gunzip &lt; PATH_TO_DUMP/DB_NAME.sql.gz | mysql -u DB_USER -pDB_PASSWORD DB_NAME

  • 最後,也是最痛苦的,您可以選擇將單個表或表組轉儲到足夠小的轉儲中。然後通過 PHPMYADMIN 一次一個地恢復這些單獨的轉儲。

FTP & RESTORE 說明:

在此處下載 FileZilla:http: //filezilla-project.org/download.php? type=client

通常,您可以使用與 SSH 相同的登錄名和密碼(命令行登錄名)通過 FTP 進入您的伺服器(尤其是共享主機)。只需確保在 FileZilla 中正確設置與伺服器的連接即可。

連接後,您的預設路徑可能是您的 $HOME 文件夾(在 nix 機器上)。如果您不打算進行大量 FTP 傳輸,只需在其中轉儲您想要的內容。您始終可以從命令行移動它。

如果您通過 FTP 將 MySQL 轉儲到您的 $ HOME folder then the RESTORE command for a DB named mydb and a db dump file named mydb.sql.gz (in the $ HOME 文件夾)將是:

gunzip &lt; $HOME/mydb.sql.gz | mysql -u DB_USER -pDB_PASSWORD mydb

您顯然需要將 DB_USER 和 DB_PASSWORD 值更改為您為數據庫設置的使用者和密碼。

記住:

  • 在執行 RESTORE 命令之前,數據庫必須已經存在(但為空)
  • 必須在 RESTORE 命令之前為 DB 設置 DB_USER 和 DB_PASSWORD(您可以從 PHPMYADMIN - Privileges 選項卡執行此操作)
  • 當您從 PHPMYADMIN 設置 DB_USER 時,它將預設只允許 DB_USER 從本地主機(數據庫所在的伺服器)訪問數據庫。我假設這對您的情況補助金很好。當您進入更高級的 DUMP 和 RESTORE 時,您可能希望完全從另一台機器上執行此操作,這並不難,但需要提供更多資訊並且 DB_USER 具有適當的權限。

FTP數據庫並恢復它……一步一步

  1. 在桌面上找到壓縮的 MySQL 轉儲文件(例如:C:\Web\DB\Dumps\mydb.sql.zip)
  2. 下載並安裝 FileZilla
  3. 在 FileZilla 中,轉到 File->Site Manager 並點擊 New Site 按鈕(GUI 的左下象限)。將主機設置為位於 DESTINATION 伺服器上的域(例如:dest.com)。將協議設置為 FTP 或 SFTP(這取決於您的主機,詢問他們)。設置使用者和密碼(例如:使用者 = 授權,密碼 = 授權的密碼) - 如果 FTP 協議是 SFTP,那麼任何一組有效的 SSH 登錄憑據都應該有效。
  4. (在 FileZilla 中)點擊連接(最左下角的按鈕)
  5. (在 FileZilla 中)一旦連接到遠端伺服器(應該是您的 DESTINATION 伺服器),使用 FileZilla 的左側導航到您在步驟 1 中找到的轉儲文件所在的目錄。(本地機器的路徑在最左邊,大約一半的位置,標記為 Local site:。在我們的範例中,Local site: 旁邊的文本框將顯示為 C:\Web\DB\Dumps。)
  6. (在 FileZilla 中)直接在 Local Site: 右側找到 Remote site: 標籤。
  7. (在 FileZilla 中)沒有技術原因不能將 DB DUMP 放在 FileZilla 打開的文件夾中。它可能會預設為您的 $HOME 目錄。如果您沒有任何理由將 DB Dump 放在特定目錄中(例如出於您自己的組織目的),則將路徑單獨保留在遠端站點上。記下該路徑(Linux 範例:/usr/grant)。
  8. (在 FileZilla 中)在 FileZilla 左半部分的本地電腦上找到文件,就在本地站點下方所示的樹下:您在步驟 5 中找到的標籤。點兩下該文件,FileZilla 會將其通過 FTP 傳輸到您的遠端站點。
  9. 在 DESTINATION 伺服器上的 PHPMYADMIN 中,創建一個新數據庫(在 Create new database 文本框中輸入 mydb 並點擊 Create 按鈕)。
  10. (在 PHPMYADMIN 中)從左側菜單中選擇 mydb。
  11. (在 PHPMYADMIN 中)點擊“權限”選項卡(右上角)。在該頁面上點擊添加新使用者。
  12. (在 PHPMYADMIN->Privileges->Add New User 中)提供使用者名(範例:mydb_grant)和密碼(範例:mydb_password)。在主機下拉列表中選擇本地。確保選中“授予數據庫的所有權限”旁邊的單選按鈕。然後點擊 Go(螢幕右下角)。
  13. SSH 到您的 DESTINATION 伺服器。
  14. (在您的 SSH 終端中)導航到您在步驟 7 中記下的目錄。使用 -cd $HOMEcd /usr/grant. (在 Linux 機器上,$HOME 是一個環境變數,類似於 /usr/grant。)
  15. (在您的 SSH 終端中)執行以下命令:gunzip &lt; /usr/grant/mydb.sql.gz | mysql -u mydb_grant -pmydb_password mydb(-p 和密碼之間沒有空格,因為這是它需要的方式,這不是錯字)。

一旦最後一個命令完成,您的數據庫就已恢復。我不建議使用我提供的數據庫使用者和密碼,只需將它們替換為您自己的更安全的選擇。

沒有 FTP 的不同伺服器上的 DUMP 和 RESTORE

如果您希望跳過 FTP 內容並且不介意重做 DUMP,那麼您可以這樣做:

  1. 登錄到 DESTINATION 伺服器(您希望數據庫駐留的位置 - 我們將其稱為destination.com)
  2. 如上所述在 DESTINATION 伺服器上創建數據庫、使用者和適當的權限
  3. 確保 SOURCE 伺服器上的權限允許 SOURCE_DB_USER 遠端訪問數據庫 - 允許從 dest.com 或從 % 訪問(% - 如果他們擁有正確的使用者名和密碼,則所有人和任何地方)
  4. 在 DESTINATION 伺服器上執行:mysqldump -u SOURCE_DB_USER -h source.com -pSOURCE_DB_PASSWORD mydb| gzip -9 &gt; $HOME/mydb.sql.gzsource.com 是 SOURCE 伺服器(數據庫目前所在的位置)
  5. 然後(在 DESTINATION 伺服器上)執行:gunzip &lt; $HOME/mydb.sql.gz | mysql -u DEST_DB_USER -pDEST_DB_PASSWORD mydb

這應該就是將數據庫從一台伺服器移動到另一台伺服器所需要做的全部工作。需要注意的是,我只在我自己的專用 Ubuntu(帶有標準 LAMP)和 Dreamhost 的 VPS 伺服器(我相信它執行 CentOS 但我可能是錯的)上做過這個。

引用自:https://dba.stackexchange.com/questions/7746