2012-02-18 40 views
6

Tôi có một kịch bản php mà phân tích các file XML và tạo ra một tập tin SQL lớn mà trông giống như sau:Làm thế nào để nhập khẩu file LỚN sql vào bảng mysql

INSERT IGNORE INTO table(field1,field2,field3...) 
VALUES ("value1","value2",int1...), 
("value1","value2",int1)...etc 

Tệp này thêm lên là hơn 20GB (I đã thử nghiệm trên một tệp 2.5GB nhưng nó cũng không thành công).

Tôi đã thử lệnh như: root

mysql -u -p tên_bảng < /var/www/bigfile.sql

này làm việc trên các tập tin nhỏ hơn, nói khoảng 50MB. nhưng nó không hoạt động với một tệp lớn hơn.

tôi đã cố gắng:

mysql> source /var/www/bigfile.sql 

Tôi cũng đã cố gắng mysqlimport nhưng điều đó sẽ không xử lý đúng cách, ngay cả tập tin của tôi.

tôi tiếp tục nhận được một lỗi mà nói

ERROR 2006 (HY000): MySQL server has gone away 

xảy ra xấp xỉ. 30 giây sau khi tôi bắt đầu thực hiện.

Tôi đặt allow_max_packet thành 4GB nhưng khi xác minh nó bằng SHOW VARIABLES, nó chỉ hiển thị 1GB.

Có cách nào để thực hiện việc này mà không lãng phí thêm 10 giờ nữa không?

Trả lời

2

Thử tách tệp thành nhiều truy vấn INSERT.

+0

tại sao tôi không nghĩ về điều đó ... – nick

+0

chỉ cần nhập 2,5 GB trong khoảng 5 phút. cám ơn vì sự gợi ý! – nick

+0

Ngoài ra hãy xem cài đặt 'max_allowed_packet = 16M' trong my.cnf - đặt nó thành thứ gì đó rất lớn như 16M sẽ cho phép chèn lớn hơn –

Các vấn đề liên quan