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.