23 Jun

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

 

2- Slave Konfigürasyonu

 

Slave de öncelikle exampledb veritabanını oluşturmalıyız:

mysql -u root -p

Enter password:

CREATE DATABASE exampledb;

quit;

 

Master da bulunan exampledb nin dökümünü alıp slave e transfer ettiyseniz, şimdi slave de yeni oluşturduğunuz exampledb ye SQL dökümünü aktarmanın tam zamanı.

 

mysql -u root -p<password> exampledb < /path/to/exampledb.sql (<password> yerine kendi şirfenizi girin! Önemli: -p ile <password> arasında boşluk olmamalı!)

 

LOAD DATA FROM MASTER kullamak istiyorsanız şimdilik burada gerçekleştireceğiniz birşye yok.

 

Şimdi slave deki MySQL e kendisinin slave olduğunu, master in 192.168.0.100 ve master veritabanı olarak exampledb yi aramasını söyleyeceğiz. Bunun için aşağıdaki satırları

/etc/mysql/my.conf dosyasına ekleyelim:

 

server-id=2

master-host=192.168.0.100

master-user=slave_user

master-password=secret

master-connect-retry=60

replicate-do-db=exampledb

 

ve sonra MySQL i yeniden başlatın:

 

/etc/init.d/mysql restart

 

Master exampledb yi SQL dökümü yardımı ile aktarmadıysanız ve LOAD DATA FROM MASTER yöntemi ile devam etmek istiyorsanız, master exampledb den verileri almanın tam zamanı:

 

mysql -u root -p

Enter password:

LOAD DATA FROM MASTER;

quit;

 

PhpMyAdmin kullanıyorsanız master exampledb de bulunan tüm tablo ve verilerin slave de bulunan exampledb bulunup bulunmadığını kontrol edebilirsiniz.

 

Son olarak şunu yapmalıyız:

 

mysql -u root -p

Enter Password:

SLAVE STOP;

 

Sonraki yazacağımız komut satırındaki komut değerlerini doğru bir biçimde yazmalısınız:

 

CHANGE MASTER TO MASTER_HOST=’192.168.0.100′, MASTER_USER=’slave_user’, MASTER_PASSWORD='<some_password>’, MASTER_LOG_FILE=’mysql-bin.006′, MASTER_LOG_POS=183;

 

  • MASTER_HOST                  master in IP adresi veya sunucu adıdır (örneğimizde bu 192.168.0.100 dir).

  • MASTER_USER                 master üzerinde Replication haklarını tanımladığımız kullanıcıdır.

  • MASTER_PASSWORD    master da bulunan MASTER_USER in şifresidir

  • MASTER_LOG_FILE      master üzerinde SHOW MASTER STATUS komutu çalıştırıldığında MySQL tarafından verilen dosya

  • MASTER_LOG_POS       master üzerinde SHOW MASTER STATUS komutu çalıştırıldığında MySQL tarafından verilen pozisyon

 

Şimdi komut satırındayken slave i çalıştıralım:

 

START SLAVE;

quit;

 

Hepsi bu kadar! Master daki exampledb güncellendiğinde bütün değişiklikler slave de bulunan exampledb ye uygulanacak. Test edin!

 

23 Jun

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…