การนำเข้าไฟล์ SQL ขนาดใหญ่ phpmyadmin


12

ฉันพยายามนำเข้าไฟล์ SQL นี้ใน phpmyadmin และได้รับข้อความนี้

#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

ฉันต้องทำอย่างไรในการนำเข้านี้

คำตอบ:


12

สมมติว่าคุณไม่สามารถเพิ่มขนาดหน่วยความจำเพิ่มเติมจากนั้นมีสองตัวเลือก

  • หากคุณไม่คุ้นเคยกับบรรทัดคำสั่งและคุณต้องการใช้การนำเข้าสไตล์ GUI จริง ๆ คุณสามารถใช้ BigDump ( http://www.ozerov.de/bigdump/ ) ฉันใช้ครั้งเดียว แต่มันก็ไม่นาน จากสิ่งที่ฉันจำได้ว่าคุณจะดาวน์โหลดไฟล์ชื่อ bigdump.php (มีคำแนะนำ) และวางไว้บนเว็บเซิร์ฟเวอร์ของคุณในไดเรกทอรีด้วยไฟล์ดัมพ์ MySQL DB ที่มีขนาดใหญ่เกินกว่าที่จะนำเข้าผ่าน PHPMYADMIN จากนั้นไปโดยใช้เบราว์เซอร์ของคุณ - สิ่งที่ต้องการhttp://your-website.com/bigdump.php

  • หากคุณคุ้นเคยกับบรรทัดคำสั่งและใช้ระบบที่ใช้ Linux คุณสามารถใช้รหัสดังนี้:

    mysql -u USERNAME -p DATABASENAME <FILENAME.sql

ฐานข้อมูลและผู้ใช้ (ที่มีสิทธิ์ในฐานข้อมูล) จะต้องมีอยู่ก่อนที่จะเรียกใช้คำสั่งนี้ หมายเหตุฉันคัดลอกคำสั่งด้านบนจากแหล่งอื่น ฉันมักจะทิ้งและคืนค่าเช่นนี้: DUMP: mysqldump -u DB_USER -h DB_HOST -pDB_PASSWORD DB_NAME | gzip -9 > DB_NAME.sql.gz RESTORE:gunzip < PATH_TO_DUMP/DB_NAME.sql.gz | mysql -u DB_USER -pDB_PASSWORD DB_NAME

  • สุดท้ายและเจ็บปวดที่สุดคุณสามารถเลือกที่จะถ่ายโอนข้อมูลแต่ละตารางหรือกลุ่มของตารางลงในการถ่ายโอนข้อมูลขนาดเล็กพอ จากนั้นเรียกคืนแต่ละครั้งที่ทิ้งข้อมูลเหล่านี้ผ่าน PHPMYADMIN

คำแนะนำ FTP & การคืนค่า:

ดาวน์โหลด FileZilla ที่นี่: http://filezilla-project.org/download.php?type=client

โดยทั่วไปคุณสามารถ FTP ไปยังเซิร์ฟเวอร์ของคุณ (โดยเฉพาะโฮสต์ที่ใช้ร่วมกัน) โดยใช้การเข้าสู่ระบบและรหัสผ่านเดียวกับที่คุณทำกับ SSH (คุณเข้าสู่บรรทัดคำสั่ง) เพียงให้แน่ใจว่าตั้งค่าการเชื่อมต่อกับเซิร์ฟเวอร์ของคุณอย่างถูกต้องใน FileZilla

เมื่อเชื่อมต่อเส้นทางเริ่มต้นของคุณน่าจะเป็นโฟลเดอร์ $ HOME ของคุณ (บนเครื่อง nix) หากคุณไม่ได้วางแผนที่จะทำการ FTP มาก ๆ เพียงแค่ทิ้งสิ่งที่คุณต้องการในนั้น คุณสามารถย้ายได้จากบรรทัดคำสั่ง

หากคุณมีการถ่ายโอนข้อมูล MySQL ในโฟลเดอร์ $ HOME จากนั้นคำสั่ง RESTORE สำหรับฐานข้อมูลชื่อ mydb และไฟล์ db dump ชื่อ mydb.sql.gz (ในโฟลเดอร์ $ HOME) จะเป็น:

gunzip < $HOME/mydb.sql.gz | mysql -u DB_USER -pDB_PASSWORD mydb

แน่นอนว่าคุณต้องการเปลี่ยนค่า DB_USER และ DB_PASSWORD เป็นผู้ใช้และรหัสผ่านใดที่คุณตั้งค่าไว้สำหรับ DB

โปรดจำไว้ว่า:

  • DB ต้องมีอยู่แล้ว (แต่ว่างเปล่า) ก่อนที่คำสั่ง RESTORE จะถูกดำเนินการ
  • ต้องตั้งค่า DB_USER และ DB_PASSWORD สำหรับ DB ก่อนคำสั่ง RESTORE (คุณสามารถทำได้จากแท็บ PHPMYADMIN - สิทธิพิเศษ)
  • เมื่อคุณตั้งค่า DB_USER จาก PHPMYADMIN จะเป็นการอนุญาตให้ DB_USER เข้าถึงฐานข้อมูลจาก localhost เท่านั้น (เซิร์ฟเวอร์ที่ฐานข้อมูลโฮสต์อยู่) ฉันสมมติว่านี่เป็นเรื่องปกติสำหรับสถานการณ์ของคุณ เมื่อคุณเข้าสู่ DUMPs และ RESTORE ขั้นสูงคุณอาจต้องการทำจากเครื่องอื่นทั้งหมดซึ่งไม่ยาก แต่ต้องการข้อมูลเพิ่มเติมอีกสองสามชิ้นและ DB_USER พร้อมสิทธิ์ที่เหมาะสม

FTP ฐานข้อมูลและกู้คืน ... ทีละขั้นตอน

  1. ค้นหาไฟล์ดัมพ์ MySQL ซิปบนเดสก์ท็อปของคุณ (ตัวอย่าง: C: \ Web \ DB \ Dumps \ mydb.sql.zip)
  2. ดาวน์โหลดและติดตั้ง FileZilla
  3. ใน FileZilla ไปที่ File-> Site Manager และคลิกที่ปุ่ม New Site (Quadrant ซ้ายล่างของ GUI) ตั้งค่าโฮสต์เป็นโดเมน (ตัวอย่าง: dest.com) ที่อยู่ในเซิร์ฟเวอร์ DESTINATION ของคุณ ตั้งค่าโปรโตคอลเป็น FTP หรือ SFTP (ขึ้นอยู่กับโฮสติ้งของคุณถามพวกเขา) ตั้งค่าผู้ใช้และรหัสผ่าน (ตัวอย่าง: User = Grant, Password = Grant's password) - หากโปรโตคอล FTP เป็น SFTP ดังนั้นชุดข้อมูลรับรองการเข้าสู่ระบบ SSH ที่ถูกต้องควรจะทำงานได้
  4. (ใน FileZilla) คลิกเชื่อมต่อ (ปุ่มซ้ายล่างสุด)
  5. (ใน FileZilla) เมื่อเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกล (ควรเป็นเซิร์ฟเวอร์ DESTINATION ของคุณ) ใช้ด้านซ้ายของ FileZilla เพื่อนำทางไปยังไดเรกทอรีที่มีไฟล์ดัมพ์ที่คุณอยู่ในขั้นตอนที่ 1 (เส้นทางสำหรับเครื่องท้องถิ่นอยู่ทางด้านซ้ายสุดประมาณครึ่งทางและมีข้อความว่า Local site: ในตัวอย่างของเรากล่องข้อความถัดจาก Local site: จะอ่าน C: \ Web \ DB \ Dumps)
  6. (ใน FileZilla) ค้นหาไซต์ระยะไกล: ป้ายกำกับทางด้านขวาของ Local Site:
  7. (ใน FileZilla) ไม่มีเหตุผลทางเทคนิคที่คุณไม่สามารถใส่ DB DUMP ในโฟลเดอร์ที่ FileZilla เปิดขึ้นได้ เป็นไปได้ว่าไดเรกทอรีของคุณจะเป็นค่าเริ่มต้น หากคุณไม่มีเหตุผลใด ๆ ที่จะนำ DB Dump ไปไว้ในไดเรกทอรีเฉพาะเช่นเพื่อวัตถุประสงค์ในองค์กรของคุณ - จากนั้นทิ้งเส้นทางไว้บนไซต์ระยะไกลเพียงอย่างเดียว จดเส้นทางนั้นไว้ (ตัวอย่าง Linux: / usr / grant)
  8. (ใน FileZilla) ค้นหาไฟล์ในเครื่องท้องถิ่นของคุณที่ด้านซ้ายของ FileZilla ใต้ทรีที่แสดงใต้ Local site: เลเบลที่คุณพบในขั้นตอนที่ 5 ดับเบิลคลิกที่ไฟล์นั้น FileZilla จะ FTP ไปยังไซต์ระยะไกลของคุณ
  9. ภายใน PHPMYADMIN บนเซิร์ฟเวอร์ DESTINATION ของคุณสร้างฐานข้อมูลใหม่ (พิมพ์ mydb ลงในกล่องข้อความสร้างฐานข้อมูลใหม่และคลิกปุ่มสร้าง)
  10. (ใน PHPMYADMIN) เลือก mydb จากเมนูด้านซ้าย
  11. (ใน PHPMYADMIN) คลิกที่แท็บสิทธิ์ (ด้านบนขวา) เมื่ออยู่ในหน้านั้นให้คลิกที่เพิ่มผู้ใช้ใหม่
  12. (ใน PHPMYADMIN-> สิทธิ์ -> เพิ่มผู้ใช้ใหม่) ระบุชื่อผู้ใช้ (ตัวอย่าง: mydb_grant) และรหัสผ่าน (ตัวอย่าง: mydb_password) ในรายการดรอปดาวน์ Host ให้เลือก Local ตรวจสอบให้แน่ใจว่าได้เลือกปุ่มตัวเลือกถัดจาก "ให้สิทธิ์ทั้งหมดบนฐานข้อมูล" จากนั้นคลิกไป (ด้านล่างขวาของหน้าจอ)
  13. SSH ไปยังเซิร์ฟเวอร์ DESTINATION ของคุณ
  14. (ใน terminal SSH ของคุณ) นำทางไปยังไดเรกทอรีของคุณเขียนลงไปในขั้นตอนที่ 7. การใช้คำสั่งเช่น - หรือcd $HOME cd /usr/grant(บนเครื่อง Linux $ HOME เป็นตัวแปรสภาพแวดล้อมที่จะเท่ากับ / usr / grant)
  15. (ในเทอร์มินัล SSH ของคุณ) ดำเนินการคำสั่งต่อไปนี้: gunzip < /usr/grant/mydb.sql.gz | mysql -u mydb_grant -pmydb_password mydb(ไม่มีช่องว่างระหว่าง -p และรหัสผ่านเนื่องจากเป็นวิธีที่จำเป็นต้องมีนั่นคือไม่ใช่ตัวพิมพ์)

เมื่อคำสั่งสุดท้ายนั้นทำให้ DB ของคุณเสร็จสมบูรณ์แล้ว ฉันไม่แนะนำให้ใช้ผู้ใช้ DB และรหัสผ่านที่ฉันให้ไว้เพียงแทนที่พวกเขาด้วยตัวเลือกที่ปลอดภัยกว่าของคุณเอง

DUMP และ RESTORE บนเซิร์ฟเวอร์ต่าง ๆ โดยไม่มี FTP

หากคุณต้องการข้ามสิ่ง 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 > $HOME/mydb.sql.gzโดยที่ source.com คือเซิร์ฟเวอร์ SOURCE (ที่ฐานข้อมูลอยู่ในปัจจุบัน)
  5. จากนั้น (บนเซิร์ฟเวอร์ DESTINATION) จะทำงาน: gunzip < $HOME/mydb.sql.gz | mysql -u DEST_DB_USER -pDEST_DB_PASSWORD mydb

นั่นคือทั้งหมดที่คุณต้องทำเพื่อย้ายฐานข้อมูลจากเซิร์ฟเวอร์หนึ่งไปยังเซิร์ฟเวอร์อื่น Caveats คือฉันได้ทำสิ่งนี้ด้วยตัวเองโดยเฉพาะ Ubuntu (ด้วย LAMP มาตรฐาน) และเซิร์ฟเวอร์ VPS ของ Dreamhost (ซึ่งฉันเชื่อว่ารัน CentOS แต่ฉันอาจผิด)


3

คุณสามารถ:

  • เพิ่มขึ้น memory_limit
  • เพิ่มขึ้น post_max_size
  • เพิ่มขึ้น max_execution_time
  • ต้องรีสตาร์ท Apache หลังจากทำสิ่งนี้ทั้งหมด
  • หรือใช้Big Dump

1

บีบอัดไฟล์ SQL ของคุณหรือไม่ ฉันมีปัญหานี้ด้วยไฟล์ sql แบบซิปขนาด 6MB ฉันคลายมันลงในไฟล์ sql ที่ไม่มีการบีบอัด 53MB และใช้งานได้ การคลายซิปของไฟล์ดัมพ์ระหว่างดำเนินการจะทำให้หน่วยความจำหมด


0

หากคุณมี ssh เข้าถึงเซิร์ฟเวอร์ด้วย mysql, กว่าที่คุณสามารถวางไฟล์ด้วย mysql dump ได้ในบางที่, ให้ป้อน mysql console:

mysql -u myUser myDatabase

หรือถ้าเซิร์ฟเวอร์ mysql อยู่ในตำแหน่งอื่นนอกเหนือจาก localhost และอนุญาตให้เชื่อมต่อจาก localhost ไม่ได้เท่านั้น

mysql -u myUser -h mysql.example.com myDatabase

กว่าที่คุณจะถูกถามรหัสผ่านสำหรับผู้ใช้ mysql ของคุณ ตอนนี้คุณอยู่ในคอนโซล mysql ที่นี่คุณสามารถพิมพ์

source ~/mydump.sql;

คุณจะเห็นว่าคำสั่งจากการถ่ายโอนข้อมูลของคุณจะถูกดำเนินการอย่างไร

ในวิธีนี้คุณไม่สนใจเกี่ยวกับขีด จำกัด ของหน่วยความจำ php


0

หากขนาดฐานข้อมูลของคุณมากกว่า 128 MB ให้ทำการแยกฐานข้อมูลเป็นส่วน ๆ

ใช้ซอฟต์แวร์SQL Dump Splitter

SQL Dump Splitter เป็นแอพพลิเคชั่น 430 KB ที่ให้การควบคุมโดยรวมในการแยกฐานข้อมูลขนาดใหญ่เป็นไฟล์ SQL ขนาดเล็กได้อย่างง่ายดาย ด้วย SQL Dump Splitter คุณสามารถ:

  • เลือกขนาดของแต่ละอัน
  • เลือกที่จะข้ามความคิดเห็น (เพื่อลดขนาดของฐานข้อมูล)
  • ทำให้กิจกรรมเป็นไปโดยอัตโนมัติ

คุณทำกิจกรรมอัตโนมัติอย่างไร ฉันใช้ตัวแยกสัญญาณและฉันไม่รู้ว่ามันทำงานอย่างไร ... มันแยกกันโดยไม่บอกฉันว่ามันแบ่งไฟล์อะไรและตอนนี้ไม่มีวิธีใช้หรือคำถามที่พบบ่อยเพื่อช่วยในการใช้งาน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.