LVM kullanarak köle yeniden oluşturma
İşte Linux LVM kullanarak MySQL slave'lerini yeniden oluşturmak için kullandığımız yöntem. Bu, masanızda çok az kesinti süresi gerektirirken tutarlı bir anlık görüntüyü garanti eder.
Ana MySQL sunucusunda innodb max kirli sayfalarını yüzde sıfıra ayarlayın. Bu, MySQL'i tüm sayfaları diske yazmaya zorlar ve bu da yeniden başlatmayı önemli ölçüde hızlandırır.
set global innodb_max_dirty_pages_pct = 0;
Kirli sayfa sayısını izlemek için komutu çalıştırın
mysqladmin ext -i10 | grep dirty
Sayının azalması durduktan sonra devam edecek noktaya ulaşırsınız. Ardından eski çöp kutusu günlükleri / röle günlüklerini silmek için master'ı sıfırlayın:
RESET MASTER;
LV Yolu almak için lvdisplay'i çalıştırın
lvdisplay
Çıktı şöyle görünecek
--- Logical volume ---
LV Path /dev/vg_mysql/lv_data
LV Name lv_data
VG Name vg_mysql
Ana veritabanını komutla kapatma
service mysql stop
Sonra bir anlık görüntü, mysql_snapshot yeni mantıksal birim adı olacak. Binlog'lar işletim sistemi sürücüsüne yerleştirildiyse, bunların da anlık görüntü olması gerekir.
lvcreate --size 10G --snapshot --name mysql_snapshot /dev/vg_mysql/lv_data
Master'ı komutla tekrar başlat
service mysql start
Kirli sayfalar ayarını varsayılana geri yükleme
set global innodb_max_dirty_pages_pct = 75;
Anlık görüntünün orada ve görünür olduğundan emin olmak için lvdisplay'i tekrar çalıştırın
lvdisplay
Çıktı:
--- Logical volume ---
LV Path /dev/vg_mysql/mysql_snapshot
LV Name mysql_snapshot
VG Name vg_mysql
Anlık görüntüyü bağlama
mkdir /mnt/mysql_snapshot
mount /dev/vg_mysql/mysql_snapshot /mnt/mysql_snapshot
Çalışan bir MySQL slave'iniz varsa, durdurmanız gerekir
service mysql stop
Sonra MySQL veri klasörünü temizlemeniz gerekir
cd /var/lib/mysql
rm -fr *
Ustaya geri dön. Şimdi anlık görüntüyü MySQL bağımlı birimine rsync
rsync --progress -harz /mnt/mysql_snapshot/ targethostname:/var/lib/mysql/
Rsync tamamlandığında, anlık görüntüyü çıkarıp kaldırabilirsiniz
umount /mnt/mysql_snapshot
lvremove -f /dev/vg_mysql/mysql_snapshot
Eski çoğaltma kullanıcısı yoksa veya parola bilinmiyorsa, ana bilgisayarda çoğaltma kullanıcısı oluşturun
GRANT REPLICATION SLAVE on *.* to 'replication'@'[SLAVE IP]' identified by 'YourPass';
/ Var / lib / mysql veri dosyalarının mysql kullanıcısına ait olduğunu doğrulayın, bu durumda aşağıdaki komutu atlayabilirsiniz:
chown -R mysql:mysql /var/lib/mysql
Sonra binlog konumunu kaydedin
ls -laF | grep mysql-bin
Gibi bir şey göreceksin
..
-rw-rw---- 1 mysql mysql 1073750329 Aug 28 03:33 mysql-bin.000017
-rw-rw---- 1 mysql mysql 1073741932 Aug 28 08:32 mysql-bin.000018
-rw-rw---- 1 mysql mysql 963333441 Aug 28 15:37 mysql-bin.000019
-rw-rw---- 1 mysql mysql 65657162 Aug 28 16:44 mysql-bin.000020
Burada ana günlük dosyası sırayla en yüksek dosya numarasıdır ve bin günlük konumu dosya boyutudur. Bu değerleri kaydedin:
master_log_file=mysql-bin.000020
master_log_post=65657162
Sonra köle MySQL'i başlatın
service mysql start
Aşağıdakileri uygulayarak slave üzerinde master değiştir komutunu yürütün:
CHANGE MASTER TO
master_host="10.0.0.12",
master_user="replication",
master_password="YourPass",
master_log_file="mysql-bin.000020",
master_log_pos=65657162;
Sonunda köle başlat
SLAVE START;
Slave durumunu kontrol et:
SHOW SLAVE STATUS;
Slave IO'nun çalıştığından ve bağlantı hatası olmadığından emin olun. İyi şanslar!
BR, Juha Vehnia
Son zamanlarda bunu burada bulunan bloguma yazdım ... Orada daha az ayrıntı var ama hikaye aynı.
http://www.juhavehnia.com/2015/05/rebuilding-mysql-slave-using-linux-lvm.html
--opt --single-transaction --comments --hex-blob --dump-date --no-autocommit --all-databases