MySQL - การส่งออกฐานข้อมูล
วิธีที่ง่ายที่สุดในการส่งออกข้อมูลตารางไปยังไฟล์ข้อความคือการใช้ไฟล์ SELECT...INTO OUTFILE คำสั่งที่ส่งออกผลลัพธ์แบบสอบถามไปยังไฟล์บนเซิร์ฟเวอร์โฮสต์โดยตรง
การส่งออกข้อมูลด้วยคำสั่ง SELECT ... INTO OUTFILE
ไวยากรณ์สำหรับคำสั่งนี้รวมแบบปกติ SELECT คำสั่งด้วย INTO OUTFILE filenameในตอนท้าย รูปแบบเอาต์พุตเริ่มต้นจะเหมือนกับคำสั่ง LOAD DATA ดังนั้นคำสั่งต่อไปนี้จะส่งออกไฟล์tutorials_tbl ตารางเป็น /tmp/tutorials.txt เป็นไฟล์ที่คั่นด้วยแท็บบรรทัดสิ้นสุดการฟีด
mysql> SELECT * FROM tutorials_tbl
-> INTO OUTFILE '/tmp/tutorials.txt';
คุณสามารถเปลี่ยนรูปแบบผลลัพธ์โดยใช้ตัวเลือกต่างๆเพื่อระบุวิธีการอ้างอิงและคั่นคอลัมน์และเรกคอร์ด ในการส่งออกตาราง tutorial_tbl ในรูปแบบ CSV ด้วยบรรทัดที่สิ้นสุด CRLF ให้ใช้รหัสต่อไปนี้
mysql> SELECT * FROM passwd INTO OUTFILE '/tmp/tutorials.txt'
-> FIELDS TERMINATED BY ',' ENCLOSED BY '"'
-> LINES TERMINATED BY '\r\n';
SELECT ... INTO OUTFILE มีคุณสมบัติดังต่อไปนี้ -
ไฟล์เอาต์พุตถูกสร้างขึ้นโดยตรงโดยเซิร์ฟเวอร์ MySQL ดังนั้นชื่อไฟล์ควรระบุตำแหน่งที่คุณต้องการให้เขียนไฟล์บนโฮสต์เซิร์ฟเวอร์ ไม่มีคำสั่งเวอร์ชัน LOCAL ที่คล้ายคลึงกับLOCAL เวอร์ชันของ LOAD DATA.
คุณต้องมีไฟล์ MySQL FILE สิทธิ์ในการเรียกใช้ไฟล์ SELECT ... INTO คำให้การ.
ไฟล์เอาต์พุตต้องไม่มีอยู่แล้ว ซึ่งจะป้องกันไม่ให้ MySQL คัดลอกไฟล์ที่อาจมีความสำคัญ
คุณควรมีบัญชีล็อกอินบนโฮสต์เซิร์ฟเวอร์หรือวิธีการบางอย่างในการดึงไฟล์จากโฮสต์นั้น มิฉะนั้นไฟล์SELECT ... INTO OUTFILE คำสั่งมักจะไม่มีค่าสำหรับคุณ
ภายใต้ UNIX ไฟล์จะถูกสร้างขึ้น world readableและเป็นเจ้าของโดยเซิร์ฟเวอร์ MySQL ซึ่งหมายความว่าแม้ว่าคุณจะสามารถอ่านไฟล์ได้ แต่คุณอาจไม่สามารถลบไฟล์ได้
การส่งออกตารางเป็นข้อมูลดิบ
mysqldumpโปรแกรมใช้ในการคัดลอกหรือสำรองตารางและฐานข้อมูล มันสามารถเขียนผลลัพธ์ของตารางเป็นไฟล์Raw Datafile หรือเป็นชุดของ INSERT คำสั่งที่สร้างระเบียนใหม่ในตาราง
ในการถ่ายโอนข้อมูลตารางเป็นดาต้าไฟล์คุณต้องระบุไฟล์ --tab ตัวเลือกที่ระบุไดเร็กทอรีที่คุณต้องการให้เซิร์ฟเวอร์ MySQL เขียนไฟล์
ตัวอย่างเช่นในการถ่ายโอนไฟล์ tutorials_tbl ตารางจาก TUTORIALS ฐานข้อมูลไปยังไฟล์ในรูปแบบ /tmp ไดเร็กทอรีให้ใช้คำสั่งดังที่แสดงด้านล่าง
$ mysqldump -u root -p --no-create-info \
--tab=/tmp tutorials tutorials_tbl
password ******
การส่งออกสารบัญตารางหรือคำจำกัดความในรูปแบบ SQL
ในการส่งออกตารางในรูปแบบ SQL ไปยังไฟล์ให้ใช้คำสั่งที่แสดงด้านล่าง
$ mysqldump -u root -p TUTORIALS tutorials_tbl > dump.txt
password ******
นี่จะเป็นการสร้างไฟล์ที่มีเนื้อหาดังที่แสดงด้านล่าง
-- MySQL dump 8.23
--
-- Host: localhost Database: TUTORIALS
---------------------------------------------------------
-- Server version 3.23.58
--
-- Table structure for table `tutorials_tbl`
--
CREATE TABLE tutorials_tbl (
tutorial_id int(11) NOT NULL auto_increment,
tutorial_title varchar(100) NOT NULL default '',
tutorial_author varchar(40) NOT NULL default '',
submission_date date default NULL,
PRIMARY KEY (tutorial_id),
UNIQUE KEY AUTHOR_INDEX (tutorial_author)
) TYPE = MyISAM;
--
-- Dumping data for table `tutorials_tbl`
--
INSERT INTO tutorials_tbl
VALUES (1,'Learn PHP','John Poul','2007-05-24');
INSERT INTO tutorials_tbl
VALUES (2,'Learn MySQL','Abdul S','2007-05-24');
INSERT INTO tutorials_tbl
VALUES (3,'JAVA Tutorial','Sanjay','2007-05-06');
ในการถ่ายโอนข้อมูลหลายตารางให้ตั้งชื่อตารางทั้งหมดตามด้วยอาร์กิวเมนต์ชื่อฐานข้อมูล ในการถ่ายโอนฐานข้อมูลทั้งหมดอย่าตั้งชื่อตารางใด ๆ หลังฐานข้อมูลดังที่แสดงในบล็อกโค้ดต่อไปนี้
$ mysqldump -u root -p TUTORIALS > database_dump.txt
password ******
ในการสำรองฐานข้อมูลทั้งหมดที่มีอยู่บนโฮสต์ของคุณให้ใช้รหัสต่อไปนี้
$ mysqldump -u root -p --all-databases > database_dump.txt
password ******
ตัวเลือก - all-databases พร้อมใช้งานในเวอร์ชัน MySQL 3.23.12 วิธีนี้สามารถใช้เพื่อใช้กลยุทธ์การสำรองฐานข้อมูล
การคัดลอกตารางหรือฐานข้อมูลไปยังโฮสต์อื่น
หากคุณต้องการคัดลอกตารางหรือฐานข้อมูลจากเซิร์ฟเวอร์ MySQL หนึ่งไปยังอีกเซิร์ฟเวอร์หนึ่งให้ใช้ไฟล์ mysqldump ด้วยชื่อฐานข้อมูลและชื่อตาราง
รันคำสั่งต่อไปนี้ที่โฮสต์ต้นทาง การดำเนินการนี้จะถ่ายโอนฐานข้อมูลทั้งหมดลงในdump.txt ไฟล์.
$ mysqldump -u root -p database_name table_name > dump.txt
password *****
คุณสามารถคัดลอกฐานข้อมูลทั้งหมดโดยไม่ต้องใช้ชื่อตารางเฉพาะตามที่อธิบายไว้ข้างต้น
ตอนนี้ไฟล์ ftp dump.txt บนโฮสต์อื่นและใช้คำสั่งต่อไปนี้ ก่อนรันคำสั่งนี้ตรวจสอบให้แน่ใจว่าคุณได้สร้าง database_name บนเซิร์ฟเวอร์ปลายทาง
$ mysql -u root -p database_name < dump.txt
password *****
อีกวิธีหนึ่งในการดำเนินการนี้โดยไม่ใช้ไฟล์ตัวกลางคือการส่งเอาต์พุตของ mysqldump โดยตรงผ่านเครือข่ายไปยังเซิร์ฟเวอร์ MySQL ระยะไกล หากคุณสามารถเชื่อมต่อกับเซิร์ฟเวอร์ทั้งสองจากโฮสต์ที่ฐานข้อมูลต้นทางอยู่ให้ใช้คำสั่งต่อไปนี้ (ตรวจสอบให้แน่ใจว่าคุณมีการเข้าถึงบนเซิร์ฟเวอร์ทั้งสองเครื่อง)
$ mysqldump -u root -p database_name \
| mysql -h other-host.com database_name
ใน mysqldump ครึ่งหนึ่งของคำสั่งจะเชื่อมต่อกับโลคัลเซิร์ฟเวอร์และเขียนเอาต์พุตการถ่ายโอนข้อมูลไปยังไพพ์ อีกครึ่งหนึ่งของคำสั่งจะเชื่อมต่อกับเซิร์ฟเวอร์ MySQL ระยะไกลบน other-host.com มันอ่านไปป์สำหรับอินพุตและส่งแต่ละคำสั่งไปยังเซิร์ฟเวอร์ other-host.com