Soru Kesinti süresini en aza indirirken MySQL veritabanını yeni bir sisteme taşımanın en hızlı yolu?


Kesinti süresini en aza indirmek istiyorum ("geçiş" döneminde).

EC2'de bir EBS birimindeki verilerle çalışıyoruz. Çalışırken veritabanı hacminin bir anlık görüntüsünü almak güvenli midir? Yeni olanı geri yüklemek için kullanabilir miyim yoksa önce eski veritabanını kapatmak zorunda mıyım?


4
2018-06-18 19:37


Menşei




Cevaplar:


Öneririm:

  1. Kısaca okuma kilidinde iken bir anlık fotoğraf çekme FLUSH TABLES WITH READ LOCK;.
  2. Bu veri setini ikincil makinenize getirin ve tutarlılığı kontrol edin.
  3. Eski makineden yeni kopyaya kurulum.

Daha sonra cutover noktasında:

  1. Eski makineye bakan istemciyi aşağı indirin (ayrı bir tane var, değil mi?).
  2. Konu FLUSH LOGS; eski makinede.
  3. Yeni makinenin senkronize olduğundan emin olun. 0 saniye sonra.
  4. Eski makineyi durdurun ve yeni makinenin konumuna göre son bölme boyutunu kontrol edin.
  5. Konu STOP SLAVE; RESET MASTER; yeni makinede.
  6. İstemciyi yeni makinede IP'ye getirin ve müşterilerin bunu görmesini sağlamaya çalışın.

Ağır bir InnoDB kullanıcısı olmanız gibi birkaç ince ayrıntı vardır. Ama bu genel bir jist.


7
2018-06-18 19:48





Neden ikinci MYSQL sunucusunu bir slave olarak ayarlamıyorsunuz, çoğaltmıyorsunuz, sonra da master'ı master olarak yeniden yapılandırıyorsunuz?


3
2018-06-18 20:24



Tamam? Bunu yaptınmı? Bu bana iyi bir seçenek gibi geliyor. MySQL yönetici bilgisi hakkında çok az bilgim var. - Mark Renouf
oreilly.com/catalog/hpmysql/chapter/ch07.pdf - Bu örnek bölüm çoğaltmayı kapsamaktadır ve birkaç yaşındayken size hala iyi bir işaretçi verecektir. - mlambie


Dan C paranın tam karşılığıdır, ancak ilk 3 adımda daha spesifik olmak isterim

Hız uğruna, ve afetlerden kaçınmak için, CLI mysql istemcisinde her şeyi böyle yapın:

sudo mysql -e "FLUSH TABLES; FLUSH TABLES WITH READ LOCK; SYSTEM ec2-create-snapshot vol-4d826724; UNLOCK TABLES;"

Aşağıdaki noktalara güveniyorum:

  1. Uzun süren UPDATE, DELETE veya INSERT komutu varsa, okuma kilidinin alınması biraz zaman alabilir. Hazırlık yapıyorum YIKAMA TABLOLARI Herhangi bir tablonun kilitlendiği süreyi en aza indirmek için.
  2. Mysql istemcisi, ana bilgisayar işletim sistemine komutları iletebilir. SİSTEM komutu ve mysql istemcisini çalıştıran kullanıcı bunu yapar. (Bu yüzden sudo kullandım)
  3. Hiç kullanmadığım EC2'de ESB kullandığınızı söylediğimde, yukarı baktım bu dokümantasyon sizin için. "XXX XXXX" için nelere dikkat etmelisiniz?
  4. Hayatınızı biraz daha kolaylaştırın ve şifre içinde ~ root / .my.cnf

Bunu açık bir şekilde anlatan veya bariz bir şekilde yanlış internetin her yerinde! Belgeler açıkça belirtiyor: "Bir istemci bağlantısı düşerse, sunucu istemci tarafından tutulan masa kilitlerini serbest bırakır.". Yani sen yapamam mysql istemcisini açın, temizle + kilitle, istemciden çık, anlık görüntü oluştur, mysql istemcisini aç, tabloları aç. Tutarsız bir enstantaneyle sonuçlanacaksınız.

Bazı ekstra keskin okuyucular, "UNLOCK TABLOLARI" nın gereksiz olduğunu doğru bir şekilde belirleyecektir, çünkü istemci bağlantısı zaten sonunda kapanacaktır. Onu oraya koydum çünkü insanları daha rahatlatıyor.

Senin için 6 kaynak söyledim. Umarım bunu yapmak için kendinize güvenirsiniz. Artık belirsizliğin olup olmadığını bize bildirin.


2
2018-06-20 06:34





Öncelikle binlogların etkinleştirildiğinden emin olun. Genel okuma kilidi altındaki mysql dizininin dosya sistemi düzeyinde anlık görüntüsünü (ör. LVM veya benzeri) alın (FLUSH TABLES WITH READ LOCK). Yeni sunucuyu kurmak ve çoğaltmayı eski sisteme yapılandırmak için bu anlık görüntüyü kullanın (binlog adını ve konumunu belirtebilirsiniz).master_log_file/master_log_pos) enstantane en yeni binlog boyutuna bakarak).

Taşınmaya hazır olduğunuzda, tüm yazıları durdurun (read_only=true, eski sunucuda tüm bağlantıları öldür ve yeni sunucu için çoğaltma ile yakalamak için bekleyin. Ardından yeni sunucuyu yazılabilir yapın ve eski sunucuyu indirin.

Veritabanına karşı hangi tür sorguların çalıştırıldığına bağlı olarak, saniyeler sırasındaki bir kesinti süresine sahip olabilirsiniz. Ancak bu, yazma sorgularınızın deterministik olmasına bağlıdır, böylece eski ve yeni sunucu tam olarak aynı verilere sahip olacaktır.


0
2018-06-18 19:49