MySQL - Nhập cơ sở dữ liệu - Phương pháp khôi phục
Có hai cách đơn giản trong MySQL để tải dữ liệu vào cơ sở dữ liệu MySQL từ một tệp đã sao lưu trước đó.
Nhập dữ liệu với TẢI DỮ LIỆU
MySQL cung cấp một câu lệnh LOAD DATA hoạt động như một trình tải dữ liệu hàng loạt. Đây là một câu lệnh ví dụ đọc một tệpdump.txt từ thư mục hiện tại của bạn và tải nó vào bảng mytbl trong cơ sở dữ liệu hiện tại.
mysql> LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl;
Nếu LOCAL từ khóa không có, MySQL tìm kiếm tệp dữ liệu trên máy chủ lưu trữ bằng cách sử dụng looking into absolute pathname, chỉ định đầy đủ vị trí của tệp, bắt đầu từ thư mục gốc của hệ thống tệp. MySQL đọc tệp từ vị trí đã cho.
Theo mặc định, LOAD DATA giả sử rằng các tệp dữ liệu chứa các dòng được kết thúc bởi dòng cấp dữ liệu (dòng mới) và các giá trị dữ liệu trong một dòng được phân tách bằng các tab.
Để chỉ định định dạng tệp một cách rõ ràng, hãy sử dụng FIELDS mệnh đề mô tả các đặc điểm của các trường trong một dòng và LINESmệnh đề để xác định trình tự kết thúc dòng. SauLOAD DATA câu lệnh chỉ định rằng tệp dữ liệu chứa các giá trị được phân tách bằng dấu hai chấm và các dòng kết thúc bằng ký tự xuống dòng và ký tự dòng mới.
mysql> LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl
-> FIELDS TERMINATED BY ':'
-> LINES TERMINATED BY '\r\n';
Lệnh LOAD DATA giả sử các cột trong tệp dữ liệu có cùng thứ tự với các cột trong bảng. Nếu điều đó không đúng, bạn có thể chỉ định một danh sách để chỉ ra các cột trong bảng mà các cột tệp dữ liệu sẽ được tải vào. Giả sử bảng của bạn có các cột a, b và c, nhưng các cột liên tiếp trong tệp dữ liệu tương ứng với các cột b, c và a.
Bạn có thể tải tệp như được hiển thị trong khối mã sau.
mysql> LOAD DATA LOCAL INFILE 'dump.txt'
-> INTO TABLE mytbl (b, c, a);
Nhập dữ liệu với mysqlimport
MySQL cũng bao gồm một chương trình tiện ích có tên mysqlimport hoạt động như một trình bao bọc xung quanh TẢI DỮ LIỆU, để bạn có thể tải các tệp đầu vào trực tiếp từ dòng lệnh.
Để tải dữ liệu từ dump.txt thành mytbl, sử dụng lệnh sau tại dấu nhắc UNIX.
$ mysqlimport -u root -p --local database_name dump.txt
password *****
Nếu bạn dùng mysqlimport, các tùy chọn dòng lệnh cung cấp các mã định dạng. Cácmysqlimport các lệnh tương ứng với hai lệnh trước LOAD DATA các câu lệnh trông như được hiển thị trong khối mã sau.
$ mysqlimport -u root -p --local --fields-terminated-by = ":" \
--lines-terminated-by = "\r\n" database_name dump.txt
password *****
Thứ tự mà bạn chỉ định các tùy chọn không quan trọng đối với mysqlimport, ngoại trừ việc tất cả chúng phải đứng trước tên cơ sở dữ liệu.
Các mysqlimport tuyên bố sử dụng --columns tùy chọn để chỉ định thứ tự cột -
$ mysqlimport -u root -p --local --columns=b,c,a \
database_name dump.txt
password *****
Xử lý trích dẫn và ký tự đặc biệt
Mệnh đề FIELDS có thể chỉ định các tùy chọn định dạng khác ngoài TERMINATED BY. Theo mặc định, LOAD DATA giả định rằng các giá trị không được trích dẫn và diễn giải dấu gạch chéo ngược (\) như một ký tự thoát cho các ký tự đặc biệt. Để chỉ rõ ký tự trích dẫn giá trị, hãy sử dụngENCLOSED BYchỉ huy. MySQL sẽ tách ký tự đó khỏi phần cuối của các giá trị dữ liệu trong quá trình xử lý đầu vào. Để thay đổi ký tự thoát mặc định, hãy sử dụngESCAPED BY.
Khi bạn chỉ định ENCLOSED BY để chỉ ra rằng các ký tự trích dẫn phải được loại bỏ khỏi các giá trị dữ liệu, bạn có thể bao gồm ký tự trích dẫn theo đúng nghĩa đen trong các giá trị dữ liệu bằng cách nhân đôi nó hoặc đặt trước nó bằng ký tự thoát.
Ví dụ: nếu dấu ngoặc kép và ký tự thoát là "và \, giá trị đầu vào "a""b\"c" sẽ được hiểu là a"b"c.
Đối với mysqlimport, các tùy chọn dòng lệnh tương ứng để chỉ định giá trị trích dẫn và thoát là --fields-enclosed-by và --fields-escaped-by.