2012-01-26 36 views
8

tôi cần xuất dữ liệu từ bảng sang csv. tôi có cấu trúc sau (không thực sự là bảng của tôi nhưng cho mục đích demo)sau khi xuất khẩu mysql

CREATE TABLE `mytable` (
    `id` int(11) DEFAULT NULL, 
    `mycolumn` varchar(25) DEFAULT NULL 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 

với dữ liệu (khoảng 3000 hồ sơ). bây giờ tôi muốn xuất khẩu một số những hồ sơ này (từ một kịch bản tôi chạy qua cronjob)

SELECT * INTO OUTFILE '/tmp/mytable.sql' 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
FROM mytable; 

nó cho thấy:

Query OK, 3 rows affected (0.00 sec) 

sau đó tôi làm:

ls: cannot access /tmp/mytable.sql: No such file or directory 

đâu là tập tin của tôi ?

+1

Có kịch bản khác chạy mà làm mờ nhạt những thư mục/tmp? –

+0

@CornelGhiban no –

Trả lời

8

Khi bạn sử dụng lệnh INTO OUTFILE, nó xuất dữ liệu vào thư mục cục bộ của máy chủ không phải là thư mục bạn đang thực hiện truy vấn.

Ví dụ: bạn đang sử dụng máy tính (ip: 192.168.0.100) và bạn kết nối với mysqlserver (ip: 192.168.0.101) bằng lệnh mysql: mysql -uuser -h192.168.0.101 -A database. Bằng cách thực hiện SELECT * INTO OUTFILE tệp được lưu trên máy chủ mysqlserver (ip: 192.168.0.101) và KHÔNG trên máy tính của bạn (ip: 192.168.0.100).

Bây giờ, bạn có thể sử dụng tập lệnh tạo tệp CSV (trong cronjob của bạn - bạn chọn tất cả dữ liệu, tạo tệp và gửi qua scp tới máy chủ khác).

Hoặc - Bạn cũng có thể có NFS được gắn trên /shared/ và khi bạn tạo tệp tự động máy chủ khác có tệp đó.

Hoặc - bạn có thể chỉ cần chạy lệnh mysql trong tập lệnh bash như thế này từ máy chủ đầu tiên của bạn.

mysql -uroot test -B -e "select * from test.mytable;" | sed 's/\t/","/g;s/^/"/;s/$/"/;s/\n//g' > /tmp/filename.csv 

nguồn: http://tlug.dnho.net/node/209

+0

bất kỳ giải pháp ưu tiên nào? –

+1

NFS là một giải pháp tốt nếu bạn phải tạo nhiều dữ liệu (như nhiều tệp). "tạo ra một tập tin csv" có thể rất dễ xây dựng và có thể tùy chỉnh nó (như params ...) dòng lệnh, cũng rất dễ dàng và nhanh chóng nhưng bạn phải cẩn thận với các ký tự như dấu ngoặc kép, có thể có một chút khó khăn để gỡ lỗi (với lệnh SED). –

+0

tôi thấy tập tin trên máy chủ mysql bây giờ, tôi sẽ không bao giờ đoán nhờ sự giúp đỡ của bạn, tôi nghĩ rằng bệnh đi với các tập tin tạo ra để csv. –

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