2017-11-16 275 views
5

Bir çoğaltma sunucusunu MySQL'den redshift'e yapmaya çalışıyorum, bunun için MySQL bin log dosyasını ayrıştırıyorum. İlk çoğaltma için, mysql tablonun dökümü alıyorum, onu bir CSV dosyasına dönüştürüyorum ve aynı S3'e yüklüyorum ve sonra kırmızıya kayma kopya komutunu kullanıyorum. Bunun için performans verimli.Mysql sırasında kırmızıya kayma replikasyonu için komutları yavaşça ekleme ve güncelleştirme

İlk çoğaltmadan sonra, binlog okurken sürekli senkronizasyon için, ekler ve güncellemelerin çok yavaş olan sıralı olarak çalıştırılması gerekir.

Performansı artırmak için yapılabilecek bir şey var mı?

Düşünebildiğim olası bir çözüm, ifadeleri bir işlemde sarmak ve birden fazla ağ görüşmesini önlemek için işlemi bir kerede göndermektir. Ancak bu, kırmızıya kaymadaki tek güncelleme ve ekleme ifadelerinin çok yavaş çalıştığı sorunu çözmez. Tek bir güncelleme bildirimi 6s alıyor. Kırmızıya kayma sınırlamalarını bilmek (Bu bir sütun veritabanı ve tek sıralı ekleme yavaş olacaktır) bu sınırlamalar etrafında çalışmak için ne yapılabilir?


Düzenleme 1: İlişkin DMS: Sadece bizim MYSQL sürekli, ben mysql 170 + tablolar var verilerini denormalise istemiyoruz kopyalayan bir depolama çözümü olarak kırmızıya kayma kullanmak istiyorum. Devam eden çoğaltma sırasında, DMS bir günde birçok kez birçok hataları gösterir ve bir veya iki gün sonra tamamen başarısız olur ve DMS hata günlüklerini deşifre etmek çok zordur. Ayrıca, tabloları bıraktığımda ve yeniden yüklediğimde, var olan tabloları redshift'te siler ve yeni bir tablo oluşturur ve sonra da benim durumumda kesintiye neden olan verileri eklemeye başlar. Ne istediğim eski tablo Burada

+0

bunu kendiniz kodladınız mı? binlogunuzu s3'e aktarmanız ve daha sonra mini-batch betiği gibi bir şey yazmanız gerekir. VEYA jut sizin için tüm bunları yapar aws DMS kullanın !! –

+0

bunun için insert/update/delete ifadelerini kullanmamalısınız - her koşulda çok yavaş olacaktır! –

+0

daha önce sadece aws dms kullanıyordum, ancak performans tatmin edici değildi. Bir hata olduğunda masaya her seferinde düşmem ve yeniden yüklemem gerekiyor. Ayrıca bu –

cevap

0

yeni bir tablo oluşturmak ve sonra yenisi ile eskisini geçiş ve silmek için siz) DMS

1 işe almak için ne oluşturmak ve dms görevi çalıştırmak için gerekenler edilir oldu "geçiş ve devam eden çoğaltma" ve "hedefe bırakılan tablolar" ile

2) bu muhtemelen başarısız olur, endişelenmeyin. dms görevini "durdur". kırmızıya kayma üzerinde

3) tabloya aşağıdaki değişiklikleri yapın

  • Değişim varchar tüm tarihler ve zaman bilgilerini de (kırmızıya kayma kopya için dms tarafından kullanılan seçenekler '00 ile başa çıkamaz, çünkü: 00: 00 00: 00 ',
  • ' un, tarihte dms'deki bir hatadan dolayı varchar olması için değişiklik yapar. dms üzerinde

4) - şimdi tam yeniden yüklemeyi

- - İlk kopya ve devam eden binlog "Hedef tablo hazırlama modu"

5'de "Truncate" görevi değiştirmek) dms görevi yeniden Çoğaltma çalışması gerekir.

Eğer

Kaynağınızla aurora ise tam

http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.MySQL.html

, ayrıca size binlog_checksum ayarlanmış olduğundan emin olun buradaki talimatları takip edin en son çoğaltma örneği yazılım sürümüne olduğundan emin olun "none" (hatalı dokümantasyon)

+0

Yukarıda bahsettiğiniz tüm adımları tamamladım, ama tarih alanı için sorgu yapmak ve –

+0

tarihlerine göre gruplama yapmak zorunda olduğum için varchar olarak değiştiremiyorum. evreleme alanı, sonra bir "datawarehouse" alanına kopyalamak için biraz etl çalıştırın. Bu durumda varchar tarihini bugüne kadar datetime = '0000-00-00 00:00:00' ve null else datetime :: timestamp sonu datetime olarak kullanıyorum. –