search
Categories
Sponsors
VirtualMetric Hyper-V Monitoring, Hyper-V Reporting
Archive
Blogroll

Badges
MCSE
Community

Cozumpark Bilisim Portali
MySQL Replikasyon Problemlerinin Çözümü
Posted in Windows Server | No Comment | 2,895 views | 17/02/2013 12:31

Merhaba,

Herhangi bir sebepten ötürü MySQL replikasyonunuz durmuş ve devam etmiyor ise -ki bunun nedeni master’ın bin logunun crash olması ya da disk problemi nedeniyle slave’e gönderilen son logun master tarafındaki loga işlememiş olması olabilir- aşağıdaki şekilde slave’i tekrar ayağa kaldırabilirsiniz.

Bu tarz problemlerde genelde replikasyon 1236 hatasını verir. Benim karşılaştığım problem ise aşağıdakiydi:

Got fatal error 1236 from master when reading data from binary log: ‘Client requested master to start replication from impossible position’

Slave’i tekrar ayarğa kaldırabilmek için öncelikle master’dan en son hangi pozisyonun okunduğunu öğrenmeliyiz. Bunun için slave üzerinde öncelikle:

SHOW SLAVE STATUS\G;

komutu çalıştırıp, output üzerinden Relay_Master_Log_File ve Exec_Master_Log_Pos değerlerini not edin. Benim çıktımda Relay_Master_Log_File “mysql-bin.000098” olarak görünüyordu. Ayrıca Exec_Master_Log_Pos değeri ise “964685688” idi.

Sonrasında master üzerine gidin. /var/lib/mysql dizini altına girip, aşağıdaki komutu çalıştırın:

mysqlbinlog mysql-bin.000098 | tail -n 100

Yukardaki komut size dosyanın son satırlarını getirecektin. Bu satırlar arasında aşağıdakine benzeyen bölümü bulun:

#130316 11:31:13 server id 1 end_log_pos 964685460 Query thread_id=15743115 exec_time=0 error_code=0

Yukardaki satırda, size master’dan son okunan pozisyonu verecektir.

Sonrasında Slave üzerine gidin ve log file içinden bulduğunuz end_log_pos değerini kullanarak aşağıdaki komutu çalıştırın:

1
2
3
STOP SLAVE;
CHANGE MASTER TO MASTER_LOG_POS=964685460;
START SLAVE;

Sonrasında karşınıza çıkacak olan bir kaç duplicate entry’i aşağıdaki gibi geçebilirsiniz.

1
2
3
STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
START SLAVE;

Bu işlemler sonrası MySQL dataları arasında tutarsızlık olabilir fakat MySQL datanız, replikasyonu baştan başlatamayacak kadar büyük ise kullanabilirsiniz. Aksi halde MySQL replikasyonunu baştan başlatmanızı her zaman tavsiye ediyorum.

Kolay gelsin.



Leave a Reply