MySQL - การนำเข้าฐานข้อมูล - วิธีการกู้คืน

มีสองวิธีง่ายๆใน MySQL ในการโหลดข้อมูลลงในฐานข้อมูล MySQL จากไฟล์ที่สำรองไว้ก่อนหน้านี้

การนำเข้าข้อมูลด้วย LOAD DATA

MySQL มีคำสั่ง LOAD DATA ที่ทำหน้าที่เป็นตัวโหลดข้อมูลจำนวนมาก นี่คือตัวอย่างคำสั่งที่อ่านไฟล์dump.txt จากไดเร็กทอรีปัจจุบันของคุณและโหลดลงในตาราง mytbl ในฐานข้อมูลปัจจุบัน

mysql> LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl;
  • ถ้า LOCAL ไม่มีคีย์เวิร์ด MySQL จะค้นหา datafile บนโฮสต์เซิร์ฟเวอร์โดยใช้ไฟล์ looking into absolute pathnameซึ่งระบุตำแหน่งของไฟล์อย่างสมบูรณ์โดยเริ่มจากรูทของระบบไฟล์ MySQL อ่านไฟล์จากตำแหน่งที่กำหนด

  • โดยค่าเริ่มต้น, LOAD DATA สมมติว่า datafiles มีบรรทัดที่สิ้นสุดโดย linefeeds (newlines) และค่าข้อมูลภายในบรรทัดจะถูกคั่นด้วยแท็บ

  • ในการระบุรูปแบบไฟล์อย่างชัดเจนให้ใช้ไฟล์ FIELDS อนุประโยคเพื่ออธิบายลักษณะของเขตข้อมูลภายในบรรทัดและก LINESอนุประโยคเพื่อระบุลำดับการสิ้นสุดบรรทัด ดังต่อไปนี้LOAD DATA คำสั่งระบุว่า datafile มีค่าที่คั่นด้วยเครื่องหมายจุดคู่และบรรทัดที่สิ้นสุดโดยการส่งคืนค่าขนส่งและอักขระขึ้นบรรทัดใหม่

mysql> LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl
   -> FIELDS TERMINATED BY ':'
   -> LINES TERMINATED BY '\r\n';
  • คำสั่ง LOAD DATA ถือว่าคอลัมน์ใน datafile มีลำดับเดียวกันกับคอลัมน์ในตาราง หากไม่เป็นความจริงคุณสามารถระบุรายการเพื่อระบุว่าคอลัมน์ของตารางใดที่ควรโหลดคอลัมน์ datafile สมมติว่าตารางของคุณมีคอลัมน์ a, b และ c แต่คอลัมน์ที่ต่อเนื่องกันในดาต้าไฟล์ตรงกับคอลัมน์ b, c และ a

คุณสามารถโหลดไฟล์ดังที่แสดงในบล็อกโค้ดต่อไปนี้

mysql> LOAD DATA LOCAL INFILE 'dump.txt' 
   -> INTO TABLE mytbl (b, c, a);

การนำเข้าข้อมูลด้วย mysqlimport

MySQL ยังมีโปรแกรมยูทิลิตี้ชื่อ mysqlimport ที่ทำหน้าที่ห่อหุ้มรอบ ๆ LOAD DATA เพื่อให้คุณสามารถโหลดไฟล์อินพุตได้โดยตรงจากบรรทัดคำสั่ง

ในการโหลดข้อมูลจากไฟล์ dump.txt เป็น mytblใช้คำสั่งต่อไปนี้ที่พร้อมต์ UNIX

$ mysqlimport -u root -p --local database_name dump.txt
password *****

ถ้าคุณใช้ mysqlimportตัวเลือกบรรทัดคำสั่งให้ตัวระบุรูปแบบ mysqlimport คำสั่งที่สอดคล้องกับสองคำสั่งก่อนหน้านี้ LOAD DATA คำสั่งมีลักษณะดังที่แสดงในบล็อกรหัสต่อไปนี้

$ mysqlimport -u root -p --local --fields-terminated-by = ":" \
   --lines-terminated-by = "\r\n"  database_name dump.txt
password *****

ลำดับที่คุณระบุอ็อพชันไม่สำคัญสำหรับ mysqlimport ยกเว้นว่าควรนำหน้าชื่อฐานข้อมูลทั้งหมด

mysqlimport คำสั่งใช้ --columns ตัวเลือกในการระบุลำดับคอลัมน์ -

$ mysqlimport -u root -p --local --columns=b,c,a \
   database_name dump.txt
password *****

การจัดการคำพูดและตัวละครพิเศษ

คำสั่ง FIELDS สามารถระบุตัวเลือกรูปแบบอื่น ๆ นอกจากนี้ TERMINATED BY. ตามค่าเริ่มต้น LOAD DATA จะถือว่าค่าไม่ได้ใส่เครื่องหมายคำพูดและตีความเครื่องหมายแบ็กสแลช (\) เป็นอักขระหลีกสำหรับอักขระพิเศษ ในการระบุค่าที่อ้างถึงอักขระอย่างชัดเจนให้ใช้ENCLOSED BYคำสั่ง MySQL จะดึงอักขระนั้นออกจากส่วนท้ายของค่าข้อมูลในระหว่างการประมวลผลอินพุต หากต้องการเปลี่ยนอักขระหลีกเริ่มต้นให้ใช้ESCAPED BY.

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

ตัวอย่างเช่นถ้าเครื่องหมายคำพูดและอักขระหลีกเป็น "และ \, ค่าที่ป้อน "a""b\"c" จะถูกตีความว่า a"b"c.

สำหรับ mysqlimportอ็อพชันบรรทัดคำสั่งที่เกี่ยวข้องสำหรับการระบุใบเสนอราคาและค่า Escape คือ --fields-enclosed-by และ --fields-escaped-by.