2011-11-21 30 views
6

Chúng tôi đang gặp sự cố khi chúng tôi cần khôi phục một số dữ liệu bị mất (sử dụng maatkit không đúng cách trên thiết lập sao chép chính), và tôi đang cố gắng nhập một kho dữ liệu cũ của cơ sở dữ liệu. Vấn đề là ở phía trên cùng của tệp, nó chỉ rõ cơ sở dữ liệu (mysqldump được chạy với tùy chọn --all-databases) và tôi cần phải thay đổi DB đó thành một thứ khác để tôi có thể lấy một cái khác trong đó cùng với nó so sánh. Điểm mấu đọc:Bash: cách dễ dàng chỉnh sửa một dòng trong vùng kết xuất SQL 5.4G

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `dms` /*40100 DEFAULT CHARACTER SET latin1 */ 

Tôi đã không thành công tại mở tập tin trong vi để chỉnh sửa do kích thước lớn của các bãi chứa, và là một chút do dự sử dụng sed vì thế nào nó sẽ đọc line- by-line cho bất kỳ mẫu phù hợp.

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `dms_old` /*40100 DEFAULT CHARACTER SET latin1 */ 

Hoặc đơn giản là sử dụng một số mysql ma thuật đen để nhập nó vào cơ sở dữ liệu dms_old: cách dễ nhất và hiệu quả nhất để thay đổi dòng trên trong bãi sql để đọc là gì?

+0

Hãy thử nhìn vào vấn đề này: http://stackoverflow.com/questions/1591723/linux-text-editor-for-working-with-huge-files – cjm2671

+0

thể trùng lặp của [Chỉnh sửa rất lớn sql bãi/tập tin văn bản (trên linux)] (http://stackoverflow.com/questions/699785/edit-very-large-sql-dump-text-file-on-linux) – ephemient

Trả lời

4

sed không có vấn đề gì với điều đó. Chỉ cần làm:

`sed '/CREATE DATABASE/s/dms/dms_old/'` 

với chuyển hướng thích hợp.

+0

Làm việc như một sự quyến rũ, cảm ơn bạn! – Scott

3

Tôi nghĩ điều này đúng.

sed '0,/dms/s/dms/dms_old/' dump.sql 

Điều đó sẽ chỉ chạy thay thế một lần và chỉ cho dòng đầu tiên.

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