Veritabanı Çoğaltma (Database Replication)
Veritabanı çoğaltma adı tam karşılıyor mu tartışılır ama asıl yapacağımız şey “Master Slave Replication” işlemidir. Yani ana veritabanızın anında başka bir sunucuya yedeklenmesi işlemi. Önemli bir sistemin çalıştığı sunucunun birebir kopyasını tutmmak isteyebilirsiniz. İşlemi arada çalışacak bir scipt ile dump alıp diğer sunucuya açmak şeklinde de yapabilirsiniz. Ancak bu yöntemin bazı sorunları olabilir. Birisincisi belli aralık dediğimiz için arada geçen süre telafi edilemez. İkincisi veritabanı çok büyük olduğunda bu işlem de uzayacağı için arada geçen güvensiz zaman aralığı daha da artacaktır. Replication yöntemi ile birebir anında bir veritanı eşleme işlemi gerçekleştirmek mümkündür.
Mysql ‘de replication işlemi,diğer tüm replication işleminin mecvut olduğu veritabanlarına benzer. Yani Log dosyalarının diğer sunucuda işlenmesi mantığıyla yürütülür. Şimdi işlemler:
Öncelike 2 tarafta da Mysql kurulu olduğunu varsayıyoruz. Zaten bu işlemi yapmaya karar verdiğinize göre bir ana/master makinanız olması gerekir. Ana makinadan çok kötü olmayan bir makinayı yedek/slave makina yapabilirsiniz. Olmaz ama hani ana makinaya bir şey olursa bu makinayı devreye alacağımız için ikinci makinanın ana makinadan öok da kötü olmaması iyi olur.
Windows’dan sunucu olmaz mantığıyla yola çıkarak işlemler Linux tabanlı olarak anlatılmışır. Ancak Windows makianalar için kolayca uyarlanabilir.
Makinalarımızın ip adresleri şu şekide olsun :
Ana/Master makina: 192.168.1.11
Yedek/Slave makina: 192.168.1.12
Ana/Master Sunucu Ayarları:
1. Mysql conf ayarları
# vi /etc/mysql/my.cnf
bind-adress parametresi varsa bunu gerçek ip adresi ile değiştirmelisiniz.
bind-address = 127.0.0.1 –> 192.168.1.11
Sunucu id yi 1 verebilirsiniz.
server-id = 1
log_bin ayarını da açınız.
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db parametresi ,le hangi dabatase leri çoğaltacağınızı belirtebilirsiniz. Birden fazla db için parametreyi alt alta ekleyiniz.
binlog_do_db = mydbname
Son durum şu şekidedir:
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = mydbname
bind-address = 192.168.1.11
Conf dosyası değişimi restart gerektirir.
# service mysql restart
2. Bir user yaratmanız gerekir.
mysql > create user ‘replicator’@’%’ identified by ‘password’;
mysql > grant replication slave on *.* to ‘replicator’@’%’;
mysql > FLUSH PRIVILEGES;
3. Ana makinadaki mevcut veritabanının ikinci makinaya taşınması gerekir. Ancak çalışan bir sistem üzerinde bunu yapmak o kadar değildir. Çünkü biz anamakinadan dump alıp diğer makinaya açana kadar değişiklikler olabilir. Bunun için taşıyacağımız veritabanını read only yaparak değişiklikleri engelleyip o şekilde dump alıyoruz.
# mysql -uroot -p
mysql > use mydbname;
mysql > FLUSH TABLES WITH READ LOCK;
mysql > SHOW MASTER STATUS;
mysql> SHOW MASTER STATUS;
+——————+———-+—————+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+—————+——————+
| mysql-bin.000001 | 107 | mydbname | |
+——————+———-+—————+——————+
1 row in set (0.00 sec)
Buradaki positon’ı alip hemen dump alıyoruz.
# mysqldump -u root -p –opt mydbname> mydbname.dmp
Daha sonra veritabanını üzerine koyduğumuz lock’ı hemen kaldırıyoruz.
mysql > UNLOCK TABLES;
mysql > QUIT;
Yedek/Slave Sunucu Ayarları:
1. Ana makinada aldığınız dump’ı buraya alınız.
2. Veritabanını buraya açınız.
# mysqladmin -uroot -p create mydbname;
# mysql -u root -p mydbname < /path/to/mydbname.dmp 3. Conf ayarları: server-id bu sefer 2 olsun. Log dosyasını açınız ve relay-log ekleyiniz. Default da yoktur. server-id = 2 relay-log = /var/log/mysql/mysql-relay-bin.log log_bin = /var/log/mysql/mysql-bin.log binlog_do_db = mydbname Mysql Restart yapınız: # service mysql restart 4. En önemli komut olan master db yi belirleyiniz ve start ediniz. # mysql -uroot -p mysql > CHANGE MASTER TO MASTER_HOST=’192.168.1.11′,MASTER_USER=’replicator’, MASTER_PASSWORD=’password’, MASTER_LOG_FILE=’mysql-bin.000001′, MASTER_LOG_POS= 107;
mysql > START SLAVE;
Durum ve detay görmek için:
mysql > SHOW SLAVE STATUS\G
Recent Comments