Mereplikasi database MySQL jarak jauh ke MS SQL Server 2008

10

Saya ingin mereplikasi konten database MySQL ke database MS SQL Server 2008.

Apakah ini mungkin? Adakah yang bisa menguraikan langkah-langkah yang diperlukan untuk mencapai ini?

Terima kasih.

Jimmy Collins
sumber

Jawaban:

9

Secara pribadi saya akan menarik ke metode MS SQL vs dorongan dari metode MySQL. Mengapa? Yah Windows memiliki driver 32bit dan 64bit MySQL ODBC siap untuk pergi dan menyiapkan server yang terhubung adalah sepele. Saya punya banyak server MySQL yang ditautkan dari MS SQL. Juga, menghubungkan ke MS SQL dari linux / unix tidak selalu bagus dan Anda biasanya tidak dapat menggunakan semua fitur. FreeTDS memiliki keterbatasan; Anda mungkin memukul mereka lebih cepat daripada nanti jadi mengapa tidak lewati saja. Ini semua menganggap Anda menjalankan MySQL di * nix. Jika tidak, itu akan menjadi sedikit lebih dekat ke 50/50 tapi saya masih memilih menarik dari MS SQL karena kedengarannya itu bukan database "hidup" sehingga menempatkan beban di atasnya untuk ETL atau pemrosesan lebih ideal. Solusi GoldenGate terdengar menarik, tapi saya yakin itu tidak gratis.

Mengingat saya telah menyiapkan skenario semacam ini dengan database MySQL dan Oracle yang direplikasi ke MS SQL, saya akan memberikan beberapa tips yang paling berhasil bagi saya:

  1. Jika Anda bisa, lakukan yang terbaik untuk menentukan bagaimana Anda dapat memastikan Anda hanya membawa perubahan delta. Menggabungkan perintah dapat membantu dengan ini. Memotong tabel dan kemudian memasukkan semuanya lagi menggembungkan log Anda, menggunakan bandwidth jaringan, dan umumnya hanya membuang waktu.
  2. Jika berhadapan dengan banyak data, pastikan untuk memecah transaksi sehingga tidak memerlukan file log besar. Gunakan komit atau pos pemeriksaan eksplisit ketika Anda telah mencapai langkah yang Anda tahu Anda tidak perlu mundur.
  3. Jika MSSQL db hanya untuk pelaporan, lakukan ETL di sana agar tidak berdampak pada server MySQL. Gunakan database pementasan atau skema + filegroup untuk mempermudah.
  4. Hancurkan impor data menjadi beberapa langkah. Ini membuatnya mudah untuk memulai kembali impor ketika gagal dan / atau memecahkan masalah. Pendekatan semua atau tidak sama sekali menjadi menjengkelkan dengan cepat.
  5. Gunakan variabel sedapat mungkin untuk membantu remote db dengan rencana kueri & penggunaan indeks. Juga perhatikan isolasi transaksi seperti apa yang Anda lakukan di kotak host dan apa dampak yang akan dimiliki oleh pertanyaan "replikasi". Anda tidak ingin memblokir penulis di live db jika Anda hanya menarik data untuk pelaporan atau penggunaan kotak pasir.

Semoga tipsnya membantu!

AndrewSQL
sumber
4

Pertanyaan yang sama ditujukan pada StackOverflow di sini: Replikasi dari MySQL ke MSSQL .

Tampaknya ada beberapa solusi, tetapi bukan solusi yang sangat mudah.

Saya percaya bahwa Anda harus mencoba membangun paket SSIS untuk mengimpor data yang diperlukan dari MySQL DB ke MSSQL DB. SSIS memungkinkan seseorang untuk mengimpor data dari berbagai sumber. Maka Anda harus dapat menjadwalkan paket menggunakan windows task scheduler atau sql jobs.

Marian
sumber
3

Jika dengan replikasi yang Anda maksud pengiriman log atau sesuatu seperti itu saya yakin Anda kurang beruntung. Namun Anda tentu saja dapat mengatur database MySQL sebagai server yang ditautkan dan memutar skema replikasi Anda sendiri. Sederhana hanya untuk melakukan snapshot berkala dari semua tabel menggunakan pernyataan truncate dan insert. Tambahkan kompleksitas sesuai kebutuhan Anda.

Larry Smithmier
sumber
Maksud saya, saya ingin tugas yang dijadwalkan untuk menjalankan dan menyalin semua konten dari msqldb ke server sql 2008 db seminggu sekali atau lebih - apakah itu mungkin?
Jimmy Collins
1
Ingatlah bahwa memotong dan menarik semua data setiap kali bisa sangat lambat tergantung pada seberapa banyak data yang terlibat, latensi jaringan, dll. Ini jelas bukan cara yang harus dilakukan jika Anda memiliki tautan jaringan kecil atau lambat antara kedua database. Saya selalu mencoba menemukan metode yang memungkinkan saya untuk menarik delta.
AndrewSQL
1
Saya setuju, delta adalah cara untuk pergi. Saya tidak tahu cukup MySQL untuk berbicara dengan pemicu dan bit baris kotor tapi saya yakin ada sesuatu yang bisa diatur. Di sisi SQL Server, penjadwalan pekerjaan lurus ke depan.
Larry Smithmier
3

Anda dapat menggunakan GoldenGate untuk MySQL dan MS SQL untuk melakukan ini. Anda cukup menginstal produk GoldenGate di setiap sisi, lalu melanjutkan untuk replikasi yang homogen.

Atau, untuk replikasi "snapshot", Anda dapat menggunakan skrip Python (atau yang serupa) untuk menghubungkan ke kedua sumber data (menggunakan UnixODBC dan FreeTDS untuk terhubung ke MS SQL), loop melalui tabel yang dilakukan SELECTdi satu sisi, untuk setiap baris INSERTdi sisi lain Karena MSSQL melakukan transaksi dan merupakan target Anda, Anda dapat memulai transaksi, DELETEsemuanya dari semua tabel, melakukan penyalinan, lalu COMMITdan itu akan muncul secara instan sejauh menyangkut pengguna yang terhubung pada target, tidak akan ada inkonsistensi (kecuali jika ini ada pada sumbernya tentu saja).

Gayus
sumber
Saya tidak tahu ini adalah sesuatu yang bisa Anda lakukan dengan GoldenDate. Saya harus membaca lebih lanjut tentang ini; Terima kasih telah berbagi!
AndrewSQL
Sekarang oracle memberikan dukungan untuk produk ini. Oracle telah mengakuisisi GoldenGate. Sekarang produk ini berada di bawah produk oracle.