MySQL - Xuất cơ sở dữ liệu
Cách đơn giản nhất để xuất dữ liệu bảng thành tệp văn bản là sử dụng SELECT...INTO OUTFILE câu lệnh xuất trực tiếp kết quả truy vấn thành tệp trên máy chủ lưu trữ.
Xuất dữ liệu với câu lệnh SELECT ... INTO OUTFILE
Cú pháp cho câu lệnh này kết hợp một SELECT lệnh với INTO OUTFILE filenamecuối cùng. Định dạng đầu ra mặc định giống như đối với lệnh LOAD DATA. Vì vậy, câu lệnh sau xuất khẩututorials_tbl bàn vào /tmp/tutorials.txt dưới dạng tệp được phân tách bằng tab, được kết thúc bằng nguồn cấp dữ liệu.
mysql> SELECT * FROM tutorials_tbl
-> INTO OUTFILE '/tmp/tutorials.txt';
Bạn có thể thay đổi định dạng đầu ra bằng cách sử dụng các tùy chọn khác nhau để chỉ ra cách trích dẫn và phân tách các cột và bản ghi. Để xuất bảng tutorial_tbl ở định dạng CSV với các dòng kết thúc bằng CRLF, hãy sử dụng mã sau.
mysql> SELECT * FROM passwd INTO OUTFILE '/tmp/tutorials.txt'
-> FIELDS TERMINATED BY ',' ENCLOSED BY '"'
-> LINES TERMINATED BY '\r\n';
Các SELECT ... INTO OUTFILE có các thuộc tính sau:
Tệp đầu ra được tạo trực tiếp bởi máy chủ MySQL, vì vậy tên tệp phải chỉ ra nơi bạn muốn tệp được ghi trên máy chủ lưu trữ máy chủ. Không có phiên bản LOCAL nào của câu lệnh tương tự nhưLOCAL phiên bản của LOAD DATA.
Bạn phải có MySQL FILE đặc quyền để thực hiện SELECT ... INTO tuyên bố.
Tệp đầu ra không được tồn tại. Điều này ngăn MySQL chặn các tệp có thể quan trọng.
Bạn phải có một tài khoản đăng nhập trên máy chủ lưu trữ hoặc một số cách để truy xuất tệp từ máy chủ đó. Nếu khôngSELECT ... INTO OUTFILE rất có thể lệnh sẽ không có giá trị đối với bạn.
Dưới UNIX, tệp được tạo world readablevà thuộc sở hữu của máy chủ MySQL. Điều này có nghĩa là mặc dù bạn có thể đọc tệp, nhưng bạn có thể không xóa được.
Xuất bảng dưới dạng dữ liệu thô
Các mysqldumpchương trình được sử dụng để sao chép hoặc sao lưu các bảng và cơ sở dữ liệu. Nó có thể ghi đầu ra bảng dưới dạngRaw Datafile hoặc như một tập hợp của INSERT câu lệnh tạo lại các bản ghi trong bảng.
Để kết xuất bảng dưới dạng tệp dữ liệu, bạn phải chỉ định --tab tùy chọn cho biết thư mục, nơi bạn muốn máy chủ MySQL ghi tệp.
Ví dụ, để kết xuất tutorials_tbl bảng từ TUTORIALS cơ sở dữ liệu vào một tệp trong /tmp thư mục, sử dụng một lệnh như hình dưới đây.
$ mysqldump -u root -p --no-create-info \
--tab=/tmp tutorials tutorials_tbl
password ******
Xuất nội dung bảng hoặc định nghĩa ở định dạng SQL
Để xuất một bảng ở định dạng SQL sang một tệp, hãy sử dụng lệnh được hiển thị bên dưới.
$ mysqldump -u root -p TUTORIALS tutorials_tbl > dump.txt
password ******
Thao tác này sẽ tạo ra một tệp có nội dung như hình dưới đây.
-- 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');
Để kết xuất nhiều bảng, hãy đặt tên tất cả chúng theo sau là đối số tên cơ sở dữ liệu. Để kết xuất toàn bộ cơ sở dữ liệu, không đặt tên bất kỳ bảng nào sau cơ sở dữ liệu như được hiển thị trong khối mã sau.
$ mysqldump -u root -p TUTORIALS > database_dump.txt
password ******
Để sao lưu tất cả cơ sở dữ liệu có sẵn trên máy chủ của bạn, hãy sử dụng mã sau.
$ mysqldump -u root -p --all-databases > database_dump.txt
password ******
Tùy chọn --all-database có sẵn trong phiên bản MySQL 3.23.12. Phương pháp này có thể được sử dụng để thực hiện chiến lược sao lưu cơ sở dữ liệu.
Sao chép Bảng hoặc Cơ sở dữ liệu sang Máy chủ khác
Nếu bạn muốn sao chép bảng hoặc cơ sở dữ liệu từ máy chủ MySQL này sang máy chủ MySQL khác, hãy sử dụng mysqldump với tên cơ sở dữ liệu và tên bảng.
Chạy lệnh sau tại máy chủ nguồn. Điều này sẽ kết xuất toàn bộ cơ sở dữ liệu vàodump.txt tập tin.
$ mysqldump -u root -p database_name table_name > dump.txt
password *****
Bạn có thể sao chép cơ sở dữ liệu hoàn chỉnh mà không cần sử dụng tên bảng cụ thể như đã giải thích ở trên.
Bây giờ, tập tin ftp dump.txt trên một máy chủ khác và sử dụng lệnh sau. Trước khi chạy lệnh này, hãy đảm bảo rằng bạn đã tạo database_name trên máy chủ đích.
$ mysql -u root -p database_name < dump.txt
password *****
Một cách khác để thực hiện điều này mà không cần sử dụng tệp trung gian là gửi đầu ra của mysqldump trực tiếp qua mạng đến máy chủ MySQL từ xa. Nếu bạn có thể kết nối với cả hai máy chủ từ máy chủ lưu trữ cơ sở dữ liệu nguồn, hãy sử dụng lệnh sau (Đảm bảo rằng bạn có quyền truy cập trên cả hai máy chủ).
$ mysqldump -u root -p database_name \
| mysql -h other-host.com database_name
Trong mysqldump, một nửa lệnh kết nối với máy chủ cục bộ và ghi kết xuất kết xuất vào đường ống. Phần còn lại của lệnh kết nối với máy chủ MySQL từ xa trên other-host.com. Nó đọc đường dẫn để nhập và gửi từng câu lệnh đến máy chủ other-host.com.