Uzak bir MySQL veritabanını MS SQL Server 2008'e çoğaltma


10

Bir MySQL veritabanı içeriğini bir MS SQL Server 2008 veritabanına çoğaltmak istiyorum.

Mümkün mü? Bunu başarmak için gerekli adımları herkes belirleyebilir mi?

Teşekkürler.

Yanıtlar:


9

Şahsen MS SQL yöntemi vs MySQL yöntemi itme içine çekmek istiyorum. Neden? Peki Windows 32bit ve 64bit MySQL ODBC sürücüleri hazır ve bağlantılı bir sunucu kurmak önemsiz. MS SQL bağlı birçok MySQL sunucuları var. Ayrıca, linux / unix'ten MS SQL'e bağlanmak her zaman harika değildir ve genellikle tüm özellikleri kullanamazsınız. FreeTDS'nin sınırları vardır; daha sonra değil, daha erken vurabilirsiniz, neden sadece atlamıyorsunuz? Tüm bunlar MySQL'i * nix üzerinde çalıştırdığınızı varsayar. Değilse, 50/50 biraz daha yakın olur ama yine de "canlı" veritabanı gibi geliyor gibi MS SQL çekerek seçerek böylece herhangi bir ETL veya işlem için yük koyarak daha idealdir. GoldenGate çözümü kulağa ilginç geliyor, ama eminim ücretsiz değil.

MS SQL'e çoğaltılan MySQL ve Oracle veritabanlarıyla bu tür bir senaryo kurduğum düşünüldüğünde, benim için en iyi şekilde çalışan bazı ipuçları sağlayacağım:

  1. Yapabiliyorsanız, yalnızca delta değişiklikleriyle karşılaştığınızdan nasıl emin olabileceğinizi belirlemek için elinizden gelenin en iyisini yapın. Birleştirme komutları bu konuda yardımcı olabilir. Bir tabloyu kısaltmak ve daha sonra tekrar eklemek, günlüğünüzü şişirir, ağ bant genişliğini kullanır ve genellikle zaman kaybettirir.
  2. Çok fazla veriyle uğraşıyorsanız, büyük bir günlük dosyası gerektirmeyecek şekilde işlemleri bozduğunuzdan emin olun. Geri almanız gerekmeyeceğini bildiğiniz bir adıma ulaştığınızda açık taahhütleri veya kontrol noktalarını kullanın.
  3. MSSQL db yalnızca raporlama amaçlıysa, ETL MySQL sunucusunu etkilemeyecek şekilde çalışır. İşleri kolaylaştırmak için bir hazırlama veritabanı veya şema + dosya grubu kullanın.
  4. Verileri adım adım içe aktarın. Bu, içe aktarmanın başarısız olduğu yerde yeniden başlatılmasını ve / veya sorun gidermeyi kolaylaştırır. Ya hep ya hiç yaklaşımı çabuk sinir bozucu olur.
  5. Sorgu planları ve dizin kullanımı ile uzak db yardımcı olmak için mümkün olduğunca değişkenleri kullanın. Ayrıca, ana bilgisayar kutusunda ne tür bir işlem yalıtımı yaptığınıza ve "çoğaltma" sorgularının ne gibi etkilere sahip olduğuna dikkat edin. Yalnızca raporlama veya korumalı alan kullanımı için veriyi çekiyorsanız, canlı bir db'deki yazarları engellemek istemezsiniz.

Umarım ipuçları yardımcı olur!


4

Aynı soru burada StackOverflow üzerinde ele alındı: MySQL MSSQL çoğaltma .

Bazı geçici çözümler var gibi görünüyor, ama çok kolay bir çözüm değil.

MySQL DB'den MSSQL DB'ye gerekli verileri almak için bir SSIS paketi oluşturmayı denemeniz gerektiğine inanıyorum. SSIS kişinin çeşitli kaynaklardan veri almasına izin verir. Daha sonra paketi Windows görev zamanlayıcısı veya sql işlerini kullanarak zamanlayabilmeniz gerekir.


3

Eğer çoğaltma ile log nakliye veya bunun gibi bir şey demek şanssız olduğunu düşünüyorum. Bununla birlikte, bağlı bir sunucu olarak bir MySQL veritabanı kurabilir ve kendi çoğaltma düzeninizi yuvarlayabilirsiniz. En basit olanı, truncate ve insert deyimlerini kullanarak tüm tabloların periyodik anlık görüntülerini yapmaktır. Gereksinimlerinizin gerektirdiği gibi karmaşıklık ekleyin.


Haftalık bir kez msqldb tüm içeriği sql server 2008 db çalıştırmak ve kopyalamak için zamanlanmış bir görev istiyorum yani - bu mümkün mü?
Jimmy Collins

1
Ne kadar veri dahil edildiğine, ağ gecikmesine vb. Bağlı olarak tüm verileri kısaltmanın ve çekmenin çok yavaş olabileceğini unutmayın. İki veritabanı arasında küçük veya yavaş ağ bağlantılarınız varsa kesinlikle gitmenin yolu bu değildir. Her zaman deltaları çekmeme izin verecek bir yöntem geliştirmeye çalışırım.
AndrewSQL

1
Katılıyorum, deltalar gitmenin yolu. Tetikleyiciler ve kirli satır bitleriyle konuşmak için yeterli MySQL bilmiyorum ama bir şeyin ayarlanabileceğinden eminim. SQL Server tarafında, bir iş zamanlama basittir.
Larry Smithmier

3

Bunu yapmak için MySQL için GoldenGate ve MS SQL kullanabilirsiniz. GoldenGate ürününü her iki tarafa da kurarsınız, ardından homojen bir kopyalamaya devam edersiniz.

Sadece iki veri kaynaklarına bağlanmak için Alternatif olarak, bir "anlık" replikasyon için, (kullanarak bir Python (veya benzeri) komut kullanabilir unixODBC ve FreeTDS yapıyor tabloları döngü MS SQL bağlanmak için) SELECTher satır için, bir tarafta INSERTdiğer taraftan, başka bir açıdan. MSSQL'in işlemleri olduğu ve hedefiniz olduğu için, bir işlemi başlatabilir DELETE, tüm tablolardan her şeyi kopyalayabilir ve sonra COMMIThedefe bağlı kullanıcılar söz konusu olduğunda anında görünecektir (tutarsızlıklar yoksa tabii ki kaynak).


Bunun GoldenDate ile yapabileceğiniz bir şey olduğunun farkında değildim. Bunun hakkında daha fazla okumak zorundayım; paylaşım için teşekkürler!
AndrewSQL

Şimdi oracle bu ürün için destek sağlıyor. Oracle, GoldenGate'i satın aldı. Şimdi bu ürün kehanet ürünleri altında.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.