Sao chép cơ sở dữ liệu MySQL từ xa sang MS SQL Server 2008


10

Tôi muốn sao chép nội dung của cơ sở dữ liệu MySQL sang cơ sở dữ liệu MS SQL Server 2008.

Điều này có thể không? Bất cứ ai cũng có thể phác thảo các bước cần thiết để đạt được điều này?

Cảm ơn.

Câu trả lời:


9

Cá nhân tôi muốn sử dụng phương pháp MS SQL so với phương pháp đẩy từ MySQL. Tại sao? Vâng, Windows có trình điều khiển MySQL ODBC 32 bit và 64 bit sẵn sàng hoạt động và thiết lập một máy chủ được liên kết là chuyện nhỏ. Tôi có rất nhiều máy chủ MySQL được liên kết từ MS SQL. Ngoài ra, kết nối với MS SQL từ linux / unix không phải lúc nào cũng tuyệt vời và bạn không thể sử dụng tất cả các tính năng. FreeTDS có những hạn chế; bạn có thể đánh chúng sớm hơn là muộn, vậy tại sao không bỏ qua nó. Tất cả điều này giả định rằng bạn đang chạy MySQL trên * nix. Nếu không, nó sẽ tiến gần hơn một chút đến 50/50 nhưng tôi vẫn chọn kéo từ MS SQL vì có vẻ như đó không phải là cơ sở dữ liệu "trực tiếp", do đó, việc tải nó cho bất kỳ ETL nào hoặc xử lý là lý tưởng hơn. Giải pháp GoldenGate nghe có vẻ thú vị, nhưng tôi chắc chắn rằng nó không miễn phí.

Xem xét tôi đã thiết lập loại kịch bản này với cả cơ sở dữ liệu MySQL và Oracle sao chép sang MS SQL, tôi sẽ cung cấp một số mẹo phù hợp nhất với tôi:

  1. Nếu bạn có thể, hãy cố gắng hết sức để xác định cách bạn có thể đảm bảo bạn chỉ mang đến những thay đổi đồng bằng. Các lệnh hợp nhất có thể giúp với điều này. Cắt bớt một bảng và sau đó chèn tất cả vào một lần nữa làm mờ nhật ký của bạn, sử dụng băng thông mạng và thường chỉ lãng phí thời gian.
  2. Nếu xử lý nhiều dữ liệu, hãy chắc chắn phá vỡ các giao dịch để không yêu cầu một tệp nhật ký lớn. Sử dụng các xác nhận hoặc điểm kiểm tra rõ ràng khi bạn đạt đến một bước mà bạn biết rằng bạn sẽ không cần quay lại từ đó.
  3. Nếu db MSSQL sẽ chỉ dành cho báo cáo, hãy thực hiện ETL để không ảnh hưởng đến máy chủ MySQL. Sử dụng cơ sở dữ liệu dàn hoặc lược đồ + filegroup để làm cho mọi thứ dễ dàng.
  4. Chia dữ liệu nhập thành các bước. Điều này giúp dễ dàng bắt đầu lại quá trình nhập khi không thành công và / hoặc khắc phục sự cố. Một cách tiếp cận tất cả hoặc không có gì trở nên khó chịu một cách nhanh chóng.
  5. Sử dụng các biến bất cứ nơi nào có thể để hỗ trợ db từ xa với kế hoạch truy vấn & sử dụng chỉ mục. Ngoài ra, hãy chú ý đến loại cô lập giao dịch mà bạn đang ở trong hộp máy chủ và những gì ảnh hưởng đến các truy vấn "sao chép" sẽ có. Bạn không muốn chặn người viết trên db trực tiếp nếu bạn chỉ lấy dữ liệu để báo cáo hoặc sử dụng hộp cát.

Mong các bạn giúp đỡ!


4

Câu hỏi tương tự đã được giải quyết trên StackOverflow tại đây: Sao chép từ MySQL sang MSSQL .

Có vẻ như có một số cách giải quyết, nhưng không phải là một giải pháp rất dễ dàng.

Tôi tin rằng bạn chắc chắn nên thử xây dựng gói SSIS để nhập dữ liệu cần thiết từ MySQL DB sang MSSQL DB. SSIS cho phép một người nhập dữ liệu từ nhiều nguồn khác nhau. Sau đó, bạn sẽ có thể lên lịch các gói bằng cách sử dụng công việc lập lịch trình hoặc công việc sql.


3

Nếu bằng cách sao chép, bạn có nghĩa là đăng nhập vận chuyển hoặc một cái gì đó như thế tôi tin rằng bạn đã hết may mắn. Tuy nhiên, bạn chắc chắn có thể thiết lập cơ sở dữ liệu MySQL như một máy chủ được liên kết và cuộn sơ đồ sao chép của riêng bạn. Đơn giản nhất là chỉ cần thực hiện các ảnh chụp nhanh định kỳ của tất cả các bảng bằng cách sử dụng các câu lệnh cắt và chèn. Thêm sự phức tạp khi yêu cầu của bạn ra lệnh.


Ý tôi là tôi muốn một tác vụ theo lịch trình để chạy và sao chép tất cả các nội dung từ msqldb sang máy chủ sql 2008 db mỗi tuần một lần hoặc lâu hơn - điều đó có thể không?
Jimmy Collins

1
Lưu ý rằng việc cắt và kéo tất cả dữ liệu mỗi lần có thể rất chậm tùy thuộc vào lượng dữ liệu có liên quan, độ trễ mạng, v.v ... Chắc chắn không phải là cách để đi nếu bạn có liên kết mạng nhỏ hoặc chậm giữa hai cơ sở dữ liệu. Tôi luôn cố gắng nghĩ ra một phương pháp cho phép tôi kéo deltas.
AndrewQuery

1
Tôi đồng ý, deltas là con đường để đi. Tôi không biết đủ MySQL để nói chuyện với các trình kích hoạt và các bit hàng bẩn nhưng tôi chắc chắn rằng một cái gì đó có thể được thiết lập. Về phía SQL Server, việc lên lịch cho một công việc rất đơn giản.
Larry Smithmier

3

Bạn có thể sử dụng GoldenGate cho MySQLMS SQL để làm điều này. Bạn chỉ cần cài đặt sản phẩm GoldenGate ở mỗi bên, sau đó tiến hành sao chép đồng nhất.

Ngoài ra, đối với một sao chép "bản chụp", bạn có thể sử dụng một Python (hoặc tương tự) kịch bản chỉ đơn giản là kết nối với cả hai nguồn dữ liệu (sử dụng UnixODBCfreetds để kết nối với MS SQL), vòng lặp thông qua các bảng làm SELECTở một bên, cho mỗi hàng INSERTmặt khác. Vì MSSQL có giao dịch và là mục tiêu của bạn, bạn có thể bắt đầu giao dịch, DELETEmọi thứ từ tất cả các bảng, thực hiện sao chép COMMITvà sau đó sẽ xuất hiện ngay khi có liên quan đến người dùng trên mục tiêu, sẽ không có sự mâu thuẫn (trừ khi chúng tồn tại về nguồn gốc của khóa học).


Tôi không biết đây là điều bạn có thể làm với GoldenDate. Tôi sẽ phải đọc thêm về điều này; cám ơn vì đã chia sẻ!
AndrewQuery

Bây giờ oracle cung cấp hỗ trợ cho sản phẩm này. Oracle đã mua lại GoldenGate. Bây giờ sản phẩm này là dưới sản phẩm oracle.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.