June, 2008 Arþivi
MySQL Replication Nedir, Nasıl Yapılır -II
Gonderen: Ersin tarih: Jun.23, 2008, Kategori: MySQL
Â
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!
MySQL Replication Nedir, Nasıl Yapılır -I
Gonderen: Ersin tarih: Jun.23, 2008, Kategori: MySQL
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…
