2012-01-18 39 views
5

Gần đây tôi đã quyết định chuyển sang công ty thông qua đó tôi nhận được lưu trữ của tôi, vì vậy để di chuyển db cũ của tôi vào db mới của tôi, tôi đã cố gắng để chạy này:mysqldump một phần cơ sở dữ liệu

mysqldump --host=ipaddress --user=username --password=password db_name table_name | mysql -u username -ppassword -h new_url new_db_name 

và điều này dường như được làm việc tốt .. nhưng bởi vì cơ sở dữ liệu của tôi là rất freaking lớn, tôi sẽ nhận được thời gian ra lỗi ở giữa các bảng của tôi. Vì vậy, tôi đã tự hỏi nếu có bất kỳ cách dễ dàng để làm một mysqldump trên chỉ là một phần của bảng của tôi.

tôi sẽ giả định các luồng công việc sẽ giống như thế này:

create temp_table 
move rows from old_table where id>2,500,000 into temp_table 
some how dump the temp table into the new db's table (which has the same name as old_table) 

nhưng tôi không chắc chắn chính xác làm thế nào để làm những bước.

+0

Không chắc chắn nếu nó sẽ giải quyết vấn đề của bạn, nhưng hãy kiểm tra các tùy chọn '--quick' tại http://dev.mysql.com/doc/refman/5.5/en/mysqldump.html. Nói nó hữu ích cho các bảng lớn. –

Trả lời

5

Thêm số này --where="id>2500000" vào cuối lệnh mysqldump. MySQL 5.1 Reference Manual

Trong trường hợp của bạn lệnh mysqldump sẽ trông như thế

mysqldump --host=ipaddress \ 
    --user=username \ 
    --password=password \ 
    db_name table_name \ 
    --where="id>2500000 

Nếu bạn đổ hai lần. Vùng thứ hai sẽ chứa thông tin tạo bảng. Nhưng lần tới bạn chỉ muốn thêm các hàng mới. Vì vậy, đối với bãi thứ hai thêm --no-create-info tùy chọn trong mysqldump dòng lệnh.

+0

khi nó quay ra, lệnh này thực sự thay thế bảng của tôi với những hàng có "id> 2500000". vì vậy những gì tôi đã kết thúc làm là di chuyển tất cả chúng sang một bảng mới, và hợp nhất hai bảng với [bài đăng này] (http://stackoverflow.com/questions/725556/how-can-i-merge-two-mysql- bảng) – BananaNeil

+0

@BananaNeil Nó có thể xảy ra nếu cả hai bãi chứa của bạn Để chỉ đổ dữ liệu lần thứ hai thêm tùy chọn '--no-create-info' vào dòng lệnh mysql. –

2

Tôi đã phát triển một công cụ cho công việc này. Nó được gọi là mysqlsuperdump và có thể được tìm thấy ở đây:

https://github.com/hgfischer/mysqlsuperdump

Với nó, bạn có thể speciffy đầy đủ "WHERE" khoản cho mỗi bảng, vì vậy nó có thể để xác định quy tắc khác nhau cho mỗi bảng.

Bạn cũng có thể thay thế giá trị của từng cột theo từng bảng trong bãi chứa. Điều này rất hữu ích, ví dụ, khi bạn muốn xuất một kết xuất cơ sở dữ liệu để sử dụng trong môi trường phát triển.

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