Jun
23
2008

MySQL Replication Nedir, Nasıl Yapılır -I

Bu yazı MySql de databse replication (veritabanı kopyası) nasıl ayarlanacağı açıklanacaktır. MySQL replication bir ana sunucudan diğer bir sunucuya(slave) veritabanının bir kopyasının alınmasını sağlar, ve ana sunucudaki veritanabında gerçekleşen bütün güncellemmeler derhal diğer (slaave) sunucuya kopyalanır ve böylece her iki veritabanı senkronize olur. Bu bir yedekleme politikası değildir çünkü kazara kullanılan DELETE komutu diğer (slave) sunucuda da uygulanacaktır; fakat replication dodnanım problemlerine karşı koruma sağar.

Bu yazıda 192.168.0.100 ip adresine sahip bir ana sunucudan diğer (slave) sunucuya nasıl kopyalama(replication) yapılacağını göstereceğim. Her iki sistemde (master ve slave) debian sarge sürümü bulunmaktadır; Ancak konfigürasyon ufak değişikliklerle veya değişikliğe gerek olmadan uygulanabilir.

Her iki sistemde MySQL kurulu, ve exampledb veritabanı tabbloları ve verileriyle master üzerinde kurulu ancak slave üzerinde kurulu değil.

Öncelikle şunu söylemek istiyorum, bu sistemi bu şekilde ayarlamanın tek yolu değil. Bunu başarmak için birçok yol mevcut fakat ben bunu seçtim. Bunun sizin için çalışacağını garanti edemeyeceğim.

1 Master Kofigürasyonu

Öncelikle /etc/mysql/my.cnf dosyasını düzenlememiz gerekiyor. MySQL e ağ desteğini sağlamamız gerekir ve MySQL bütün IP adreslerini dinlemeli, bunun için eğer aşağıdaki satırlar mevcutsa komut satırı haline getireceğiz:

 

#skip-networking

#bind-address = 127.0.0.1

Ayrıca MySQL e hangi veritabanının logları yazacağını (Bu loglar master üzerinde hangi değişikliklerin olduğunu görebilmek için slave tarafından kullanılır), hangi log dosyasının kullanılması gerektiğini ve bu MySql sunucusunun master olduğunu söylemeliyiz. exampledbb veritabanını kopyalatmak istiyoruz bu yüzden aşağıdaki satırları /etc/mysql/my.cnf a ekleyeceğiz:

log-bin = /var/log/mysql/mysql-bin.log

binlog-do-db=exampledb

server-id=1

Ve sonra MySQL i yeniden başlatacağız:

/etc/init.d/mysql restart

Sonra MySQL veritabanına root olarak girerek replication haklarına sahip bir kullanıcı oluşturacağız:

mysql -u root -p

Enter Password:

Şimdi MySQL komut satırındayız.

 

GRANT REPLICATION SLAVE ON *.* TO ’slave_user’@'%’ IDENTIFIED BY ‘<some_password>’; ( <some_password> yazan yere kendi ÅŸifrenizi giriniz!)

FLUSH PRIVILEGES;

 

Sonra (Hala MySQL komut satırındayken) şunu uygulayın:

 

USE exampledb;

FLUSH TABLES WITH READ LOCK;

SHOW MASTER STATUS;

 

Son komut aşağıdakine benzer bir çıktı verecek:

+——————–+————-+——————–+————————–+

| File | Position | Binlog_do_db | Binlog_ignore_db |

+——————–+————-+——————–+————————–+

| mysql-bin.006 | 183 | exampledb | |

+——————–+————+——————–+—————————+

1 row in set (0.00 sec)

 

Bu bilgiyi not edin, sonra slave de ihtiyacımız olacak!

Sonra MySql komut satırından çıkın:

quit;

==================================================================================================================

 

Master veritabanından slave e exampledb de bulunan tabbloları ve verileri aktarmanın iki yolu var. Birincisi veritabanının bir dökümünü (dump) almak, ikincisi slave de LOAD DATA FROM MASTER komutunu kullanmak. İkinci yöntemin dezavantajı bu operasyon sırasında master daki veritabanı kilitlenecek , bu yüzden yoğun trafiğe sahip büyük bir veritabanınız varsa bu yöntem sizin istediğiniz yöntem değil ve bu bağlamda birinci yolu izlemenizi öneririm. Ancak ikinci metod çok hızlıdır bu yüzden her ikisini de burada açıklayacağım.

Birinci yolu izleyecekseniz şunu yapın:

mysqldump -u root -p<password> –opt exampledb > exampledb.sql (<password> yerine kendi ÅŸirfenizi girin! Önemli: -p ile <password> arasında boÅŸluk olmamalı!)

Bu exampledb.sql dosyasında exampledb nin SQL dökümünü oluşturur. Bunu slave sunucunuza transfer edin!

 

LOAD DATA FROM MASTER yöntemmini kullanmak istiyorsanız şimdilik uapacağınız birşey yok.

 

Son olarak exampledb deki tabloların kilidini açmamız gerekiyor:

 

mysql -u root -p

Enter password:

UNLOCK TABLES;

quit;

Åžimdi master daki konfügirasyou tamamladık. Slave e geçelim…

Yaziyi gonderen Ersin in: MySQL |

2 Yorum »

  • Bahadır says:

    Merhaba,

    TeÅŸekkürler bu ÅŸekilde çalışıyor, benim derdim ÅŸu. İki farklı lokasyonda veri girilen bir db’im var. a ve b sunucusu, db struture’lar aynı a->b b->a senkronize olması gerekiyor… Bu slave’de yapılmış olan master’a yansıtmıyor.. Ne yapmak lazım.

    Teşekkürler

    Bahadır

  • Ersin says:

    Replikasyonda amaç Master üzerindeki deÄŸiÅŸikliÄŸin Slave veritabanına yansımasıdır. Slave de olan deÄŸiÅŸiklik Master’a yansımaz bu yüzden.
    Master-Master biçiminde ayarlama ile bu dediğinizi yapabilirsiniz. Burdan ayrıntılı bilgiye ulaşabilirsiniz http://www.howtoforge.com/mysql_master_master_replication

RSS feed for comments on this post.


Yorum yaz

Powered by WordPress | conserio | xoppla | TheBuckmaker