Mysql Server Replica (Kopya) oluşturmak

Mysql veritabanı kullanıyorsunuz ancak anlık olarak bir kopyasının da başka yerde bulunmasını istiyorsanız replica (kopya) ayarları ile başka bir Mysql sunucusunu eşleştirebilirsiniz.

Mysql bu iş için kendinde Asıl-Yedek (Master-Slave) şeklinde model bulunduruyor. Yani uygulamanız Master sunucuyu kullanırken yapılan işlemler Slave üzerine de yansıyor. Ancak Slave’de yapacağınız işlemler Master sunucuya yansımıyor. Olası bir sunucu kaybı yada erişememezlik olduğunda bağlantıyı Slave üzerine alıp devam edebilirsiniz.

Unutmayın Master’da silme işlemi gerçekleşirse Slave üzerinde de gerçekleşir. Bu da veri kaybı demektir. Senaryonuzu ona göre kurmalısınız.

Öncelikle Master sunucuda şu ayarları yapmalısınız:

/etc/mysql/mysql.conf.d/mysqld.cnf dosyasının sonuna şu satırları kendinize göre ekleyip, restart edin.

server-id=123456
max_binlog_size = 100M
binlog_do_db = vt_adi

Bu şekilde sunucunuza bir ID verdiniz ve Replica yapılacak veritabanını (vt_adi) tanımladınız.

Daha sonra master sunucudan verileri alacak bir kullanıcı oluşturmalısınız, şu SQL sorgusunu kullanabilirsiniz:

CREATE USER 'replica'@'12.34.56.78' IDENTIFIED WITH caching_sha2_password BY 'Replicator-123';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON
. TO 'replica'@'12.34.56.78';

replica adında bir kullanıcıyı 12.34.56.78 IP adresinden replication yapmak üzere erişebilir olarak yetkilendirdiniz.

Slave sunucuda şu işlemleri yapmalısınız:

/etc/mysql/mysql.conf.d/mysqld.cnf dosyasının sonuna şu satırları Master sunucunuza göre ekleyip, restart edin.

server-id = 7891011
log_bin = /var/log/mysql/mysql-bin.log
relay-log = /var/log/mysql/mysql-relay-bin.log
max_binlog_size = 100M
binlog_do_db = vt_adi
# slave-skip-errors = 1032,1062

Şimdi replication başlamadan önce Master sunucudaki veritabanının bir kopyasını almamız gerekiyor. Bu işlem sırasında mümkünse Master sunucuda okuma-yazma işlemini durdurun. Yoksa Slave tarafında şu ID bulunamadı, bu kayıt zaten var gibi hatalar alabilirsiniz.

Aldığınız hataları atlamak için slave-skip-errors satırını ayarlayıp o hataları görmezden gelebilirsiniz.

Master sunucudaki “vt_adi” veritabanının kopyasını edinin:
sudo mysqldump -u USER -pPASSWORD -h MASTER_MYSQL_IP -x -q "vt_adi" > "backup.sql"

Kopyayı Slave sunucunun içine aktarın:
sudo mysql -u root -p vt_adi < backup.sql

İşlem sonunda Master’daki veriyi Slave üzerine aktarmış oldunuz. Bu arada geçen sürede gelen verilerin aktarılmadığını unutmayın.

Master sunucu üzerinde şu sorguyu çalıştırıp “File” ve “Position” bilgilerini not alın:
show master status;

Şu SQL sorgusundaki bilgileri kendinize göre düzenleyip Slave üzerinde çalıştırın:

CHANGE MASTER TO MASTER_HOST='MASTER_MYSQL_IP',MASTER_USER='replica', MASTER_PASSWORD='Replicator-123', MASTER_LOG_FILE='mysql-bin.0000??', MASTER_LOG_POS=1234567;

Replication tanımlarını da yaptınız. Replication’u başlatabilirsiniz:

start slave;

Slave durumunu görmek için phpMyAdmin kullanıyorsanız “Kopya Etme” sekmesini kullanabilirsiniz, SQL sorgusu isterseniz: show slave status; sorgusu ile durumu gözlemleyebilirsiniz.

Sorunsuz ilerlediğini şu bilgilerden anlayabilirsiniz:

Slave_IO_Running Yes
Slave_SQL_Running Yes

İsterseniz Master sunucudaki veritabanında bir değişiklik yaparak Slave sunucuya yansıdığını da görebilirsiniz.

Bu işlemleri aslında Master sunucuyu kurup, kullanmaya başlamadan yapmanız iyi olur, canlı veride Slave sunucuda hiç veri kaybı yaşamazsınız. Yukarıda anlatılanlar hali hazırda kullandığınız bir veritabanınız varsa uygulayabileceğiniz işlemler. Eğer en baştan yapacaksanız (en iyisi) iki tarafta da veritabanını (daha tabloları bile oluşturmadan) yapmak daha sağlıklı olacaktır.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.

This site uses Akismet to reduce spam. Learn how your comment data is processed.