Tôi muốn làm điều đó bằng cách sử dụng mã và không sử dụng công cụ như "Bộ công cụ di chuyển MySQL". Cách dễ nhất tôi biết là mở một kết nối (sử dụng các kết nối MySQL) tới DB1 và đọc dữ liệu của nó. Mở kết nối tới DB2 và ghi dữ liệu vào nó. Có cách nào tốt hơn/dễ nhất không?Làm cách nào để chuyển dữ liệu giữa 2 cơ sở dữ liệu MySQL?
Trả lời
Đầu tiên tôi sẽ cho rằng bạn đang không ở trong một vị trí để chỉ cần sao chép dữ liệu/thư mục, bởi vì nếu bạn sau đó sử dụng ảnh chụp/sao lưu/khôi phục hiện có của bạn có thể sẽ đủ (và kiểm tra các thủ tục sao lưu/khôi phục của bạn vào món hời).
Trong trường hợp đó, nếu hai bảng có cùng cấu trúc nói chung là nhanh nhất và trớ trêu thay, cách tiếp cận dễ nhất sẽ là sử dụng SELECT ... INTO OUTFILE ... ở một đầu và LOAD DATA INFILE ... trên cai khac.
Xem http://dev.mysql.com/doc/refman/5.1/en/load-data.html và .../select.html để biết chi tiết dứt khoát.
Đối với các bảng nhỏ sau đây sẽ làm việc:
SELECT * FROM mytable INTO OUTFILE '/tmp/mytable.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '\\\\'
LINES TERMINATED BY '\\n' ;
LOAD DATA INFILE '/tmp/mytable.csv' INTO TABLE mytable
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '\\\\'
LINES TERMINATED BY '\\n' ;
Chúng tôi cũng sử dụng FIFO của để có hiệu lực tuyệt vời để tránh việc thực sự viết vào đĩa, hoặc nếu chúng tôi cần phải ghi vào đĩa đối với một số lý do nào, để chuyển nó qua gzip.
tức là.
mkfifo /tmp/myfifo
gzip -c /tmp/myfifo > /tmp/mytable.csv.gz &
... SEL
ECT... INTO OUTFILE '/tmp/myfifo' .....
wait
gunzip -c /tmp/mytable.csv.gz > /tmp/myfifo &
... LOAD DATA INFILE /tmp/myfifo .....
wait
Về cơ bản, bạn có thể nén dữ liệu đó vào một FIFO, bạn có thể nén dữ liệu đó vào một nội dung trái tim.
Cảm ơn, mặc dù nó nằm trong hướng dẫn sử dụng dev.mysql nhưng nó không hoạt động một cách proberly. Nó cho tôi lỗi này: Bạn có lỗi trong cú pháp SQL của mình; kiểm tra hướng dẫn tương ứng với phiên bản máy chủ MySQL của bạn cho đúng cú pháp để sử dụng gần '\ n' 'tại dòng 1) Nó không chấp nhận' \ n '.. tại sao? – Morano88
Stack Overflow bị hỏng truy vấn mẫu. Trong nguồn, dấu gạch chéo trong mệnh đề ESCAPED BY đã được thoát, nhưng lối thoát bị mất khi chuyển đổi thành html. Xin lỗi về điều đó, tôi đã không nhận thấy sự tham nhũng - tôi đã sửa nó ở trên. – Recurse
Đây chính xác là những gì tôi cần để sử dụng để tăng tốc độ sao lưu cơ sở dữ liệu khá lớn, nhưng tôi không thể lấy ví dụ của bạn để làm việc. Tôi có thể tạo FIFO, và nếu tôi đổ ra đường ống bằng mysqldump nó hoạt động tốt. Tuy nhiên, nếu tôi cố gắng đổ ra đường ống bằng cách sử dụng SELECT ... INTO OUTFILE tôi nhận được một lỗi "myfifo đã tồn tại". –
Công cụ lưu trữ FEDERATED? Không phải là nhanh nhất trong nhóm, nhưng trong một thời gian, ngẫu nhiên, hoặc một lượng nhỏ dữ liệu nó sẽ làm. Đó là giả sử bạn đang nói về 2 SERVERS. Với 2 cơ sở dữ liệu trên một và cùng một máy chủ nó sẽ chỉ đơn giản là:
INSERT INTO databasename1.tablename SELECT * FROM databasename2.tablename;
Cảm ơn rất nhiều, tôi không chắc chắn Nếu 2 cơ sở dữ liệu trên cùng một máy chủ hay không. – Morano88
Điều này thật tuyệt vời cho hoàn cảnh của tôi. Chúc mừng :) – Nick
Làm việc tuyệt vời với Amazon RDS nơi bạn không có quyền truy cập vào máy cơ bản đang chạy MySQL instance, loại trừ các giải pháp liên quan đến INFILE/OUTFILE. – Andz
Bạn có thể sử dụng mysqldump
và mysql
(dòng lệnh khách hàng). Đây là những công cụ dòng lệnh và trong câu hỏi bạn viết bạn không muốn sử dụng chúng, nhưng vẫn sử dụng chúng (thậm chí bằng cách chạy chúng từ mã của bạn) là cách dễ nhất; mysqldump
giải quyết rất nhiều vấn đề.
Bạn có thể tạo select
s từ một cơ sở dữ liệu và insert
sang một cơ sở dữ liệu khác, điều này khá dễ dàng. Nhưng nếu bạn cũng cần phải chuyển lược đồ cơ sở dữ liệu (create table
s, vv), nó sẽ phức tạp hơn một chút, đó là lý do tôi khuyên bạn nên mysqldump
. Nhưng nhiều công cụ PHP-MySQL-admin cũng thực hiện điều này, vì vậy bạn có thể sử dụng chúng hoặc xem mã của chúng.
Hoặc có thể bạn có thể sử dụng bản sao MySQL.
Thao tác này (chọn, chèn) có hoạt động nếu hai cơ sở dữ liệu nằm trên 2 máy chủ khác nhau không? Không, tôi chỉ muốn di chuyển dữ liệu, không phải bảng dữ liệu, vv .. – Morano88
Có, bạn sẽ có kết nối tvo - cho mỗi máy chủ - trong một kết nối bạn chạy SELECT, sau đó trong INSERT khác với dữ liệu trả về từ SELECT đó . – Messa
Nếu bạn bật ghi nhật ký nhị phân trên máy chủ hiện tại của bạn (và có tất cả các bản ghi bin), bạn có thể thiết lập sao chép cho máy chủ thứ hai
từ http://dev.mysql.com/doc/refman/5.0/en/rename-table.html:
Chừng nào hai cơ sở dữ liệu đang ở trên hệ thống tập tin tương tự, bạn có thể sử dụng RENAME TABLE để di chuyển một bảng từ một cơ sở dữ liệu khác:
RENAME TABLE current_db.tbl_name TO other_db.tbl_name;
- 1. Làm cách nào để xóa cơ sở dữ liệu MySQL?
- 2. Làm thế nào để chuyển đổi tệp cơ sở dữ liệu H2Database thành tệp cơ sở dữ liệu MySQL .sql?
- 3. Di chuyển cơ sở dữ liệu MySQL phát triển sang cơ sở dữ liệu sản xuất
- 4. Cách tốt nhất để chuyển đổi cơ sở dữ liệu mysql thành cơ sở dữ liệu sqlite là gì?
- 5. Lỗi khi kéo cơ sở dữ liệu mysql trong cơ sở dữ liệu mysql cục bộ
- 6. Chuyển dữ liệu từ cơ sở dữ liệu này sang cơ sở dữ liệu khác
- 7. MySQL kiểu dữ liệu cơ sở dữ liệu
- 8. Sao lưu cơ sở dữ liệu MySQL
- 9. Cách di chuyển dữ liệu giữa 2 bảng/với các cột khác nhau trong cơ sở dữ liệu khác nhau
- 10. Làm cách nào để nhập dữ liệu vào cơ sở dữ liệu mysql qua bàn làm việc mysql?
- 11. Làm thế nào để chèn dữ liệu mẫu vào bảng cơ sở dữ liệu MySQL
- 12. Làm cách nào để di chuyển Sơ đồ cơ sở dữ liệu SQL Server sang cơ sở dữ liệu khác?
- 13. MySQL - chọn dữ liệu từ cơ sở dữ liệu giữa hai ngày
- 14. Cách chuyển đổi cơ sở dữ liệu Visual Foxpro sang cơ sở dữ liệu SQL Server
- 15. Cách di chuyển dữ liệu và cài đặt từ cơ sở dữ liệu này sang cơ sở dữ liệu khác?
- 16. Java, cách thay đổi cơ sở dữ liệu hiện tại sang cơ sở dữ liệu khác?
- 17. Cách sao chép bảng từ một cơ sở dữ liệu mysql sang cơ sở dữ liệu mysql khác
- 18. Làm cách nào để khôi phục một cơ sở dữ liệu từ mysqldump chứa nhiều cơ sở dữ liệu?
- 19. Làm cách nào để xóa khỏi cơ sở dữ liệu?
- 20. Chuẩn hóa cơ sở dữ liệu MySQL
- 21. Bảng xóa MySQL - Cơ sở dữ liệu hiện tại hoặc mọi cơ sở dữ liệu?
- 22. Làm cách nào để tham gia 2 bảng trên 2 cơ sở dữ liệu khác nhau?
- 23. Chuyển dữ liệu giữa các cơ sở dữ liệu với PostgreSQL
- 24. Làm thế nào để chuyển dữ liệu được mã hóa sql giữa các cơ sở dữ liệu SQL Server 2005?
- 25. Thêm dữ liệu vào trường cơ sở dữ liệu MySQL đã có dữ liệu trong đó
- 26. Di chuyển bảng từ cơ sở dữ liệu này sang cơ sở dữ liệu khác trong MySQL
- 27. Cách lấy dữ liệu từ cơ sở dữ liệu Parse.com
- 28. Làm cách nào để sao chép bản ghi dữ liệu giữa hai bản sao của cơ sở dữ liệu SQLServer
- 29. Có cách nào để sao chép tất cả dữ liệu trong cơ sở dữ liệu mysql sang cơ sở dữ liệu khác không? (phpmyadmin)
- 30. Làm cách nào để mở cơ sở dữ liệu lõi?
hai cơ sở dữ liệu trên cùng một máy chủ hoặc hai cơ sở dữ liệu trên các máy chủ khác nhau? –
@Itay: Tôi không chắc chắn thời tiết họ đang ở trên cùng một máy chủ hay không? Tôi biết rằng điều này tạo ra sự khác biệt nhưng không đến với tâm trí của tôi để hỏi họ.Tôi sẽ làm vào ngày mai. – Morano88