Aracılığıyla paylaş


MySQL için Azure Veritabanı yapılandırma - Esnek Sunucu verisi çoğaltması

Bu makale, kaynak ve çoğaltma sunucularını yapılandırarak Verilerin MySQL için Azure Veritabanı - Esnek Sunucu'da çoğaltılmasını nasıl ayarlayacağınızı açıklamaktadır. Bu makalede, MySQL sunucuları ve veritabanlarıyla ilgili daha önce deneyim sahibi olduğunuz varsayılır.

Not

Bu makalede, Microsoft'un artık kullanmadığı köle terimi geçmektedir. Terim yazılımdan kaldırıldığında, bu makaleden kaldıracağız.

MySQL için Azure Veritabanı Esnek Sunucu örneğinde çoğaltma oluşturmak için, Verileri MySQL için Azure Veritabanı'a çoğalt - Esnek Sunucu şirket içi, sanal makinelerde (VM) veya bulut veritabanı hizmetlerindeki bir kaynak MySQL sunucusundan verileri eşitler. Veri girişi çoğaltması, ikili günlük (binlog) dosya konumu tabanlı çoğaltma veya GTID tabanlı çoğaltma kullanılarak yapılandırılabilir. Binlog çoğaltması hakkında daha fazla bilgi edinmek için MySQL Çoğaltma'ya bakın.

Bu makaledeki adımları gerçekleştirmeden önce Data-in çoğaltmanın sınırlamalarını ve gereksinimlerini gözden geçirin.

Çoğaltma olarak kullanmak üzere MySQL için Azure Veritabanı Esnek Sunucu örneği oluşturma

  1. MySQL için Azure Veritabanı Esnek Sunucu'nun yeni bir örneğini oluşturun (örneğin, replica.mysql.database.azure.com). Hızlı Başlangıç: Sunucu oluşturmak için Azure portalıyla MySQL için Azure Veritabanı örneği oluşturma bölümüne bakın. Bu sunucu, Veri girişi çoğaltması için "replica" sunucusudur.

  2. Aynı kullanıcı hesaplarını ve ilgili ayrıcalıkları oluşturun.

    Kullanıcı hesapları kaynak sunucudan çoğaltma sunucusuna çoğaltılamaz. Kullanıcılara çoğaltma sunucusuna erişim sağlamayı planlıyorsanız, yeni oluşturulan bu MySQL için Azure Veritabanı Esnek Sunucu örneğinde tüm hesapları ve ilgili ayrıcalıkları el ile oluşturmanız gerekir.

Kaynak MySQL sunucusunu yapılandırma

Aşağıdaki adımlar, şirket içinde, bir sanal makinede veya diğer bulut sağlayıcıları tarafından barındırılan bir veritabanı hizmetinde yer alan MySQL sunucusunu veri içeriği çoğaltması için hazırlayıp yapılandırır. Bu sunucu, veri alma çoğaltması için "kaynak"tır.

  1. Devam etmeden önce kaynak sunucu gereksinimlerini gözden geçirin.

  2. Ağ Gereksinimleri

    • Kaynak sunucunun 3306 numaralı bağlantı noktasında hem gelen hem de giden trafiğe izin verdiğinden ve genel IP adresine sahip olduğundan, DNS'nin genel olarak erişilebilir olduğundan veya tam etki alanı adına (FQDN) sahip olduğundan emin olun.

    • Özel erişim (VNet Tümleştirmesi) kullanılıyorsa, Kaynak sunucu ile çoğaltma sunucusunun barındırıldığı sanal ağ arasında bağlantınız olduğundan emin olun.

    • ExpressRoute veya VPN kullanarak şirket içi kaynak sunucularınıza siteden siteye bağlantı sağladığınızdan emin olun. Sanal ağ oluşturma hakkında daha fazla bilgi için Sanal Ağ Belgeleri'ne ve özellikle adım adım ayrıntıları içeren hızlı başlangıç makalelerine bakın.

    • Çoğaltma sunucusunda özel erişim (VNet Tümleştirmesi) kullanılıyorsa ve kaynağınız Azure VM ise sanal ağdan sanal ağa bağlantının kurulduğuna emin olun. VNet-Vnet eşlemesi desteklenir. Sanal ağlar arasında sanal ağdan sanal ağa bağlantı gibi farklı bölgelerde iletişim kurmak için diğer bağlantı yöntemlerini de kullanabilirsiniz. Daha fazla bilgi için bkz . Sanal Ağdan Sanal Ağa VPN ağ geçidi

    • Sanal ağınızın Ağ Güvenlik Grubu kurallarının 3306 numaralı giden bağlantı noktasını engellemediğinden emin olun (MySQL'in Azure VM üzerinde çalışması durumunda 3306 numaralı gelen bağlantı noktasını da engellemediğinden emin olun). Sanal ağ NSG trafiğini filtreleme hakkında ayrıntılı bilgi için Ağ güvenlik grupları ile ağ trafiğini filtreleme makalesine bakın.

    • Kaynak sunucunuzun güvenlik duvarı kurallarını çoğaltma sunucusu IP adresine izin verecek şekilde yapılandırın.

  3. Bin-log konumunu veya GTID tabanlı veri girişi çoğaltmasını kullanmak isteyip istemediğinize bağlı olarak uygun adımları izleyin.

    Aşağıdaki komutu çalıştırarak kaynakta ikili günlük kaydının etkinleştirilip etkinleştirilmediğini denetleyin:

    SHOW VARIABLES LIKE 'log_bin';
    

    Değişken log_bin "ON" değeriyle döndürülürse, sunucunuzda ikili günlük etkinleştirilir.

    "KAPALI" değeriyle döndürülürse log_bin ve kaynak sunucunuz şirket içinde veya yapılandırma dosyasına (my.cnf) erişebileceğiniz sanal makinelerde çalışıyorsa, aşağıdaki adımları izleyebilirsiniz:

    1. Kaynak sunucuda MySQL yapılandırma dosyanızı (my.cnf) bulun. Örneğin: /etc/my.cnf

    2. Düzenlemek için yapılandırma dosyasını açın ve dosyadaki mysqld bölümünü bulun.

    3. mysqld bölümünde aşağıdaki satırı ekleyin:

      log-bin=mysql-bin.log
      
    4. Değişikliklerin etkili olması için kaynak sunucuda MySQL hizmetini yeniden başlatın (veya Yeniden Başlat).

    5. Sunucu yeniden başlatıldıktan sonra, önceki sorguyla aynı sorguyu çalıştırarak ikili günlük kaydının etkinleştirildiğini doğrulayın:

      SHOW VARIABLES LIKE 'log_bin';
      
  4. Kaynak sunucu ayarlarını yapılandırın.

    Gelen veri replikasyonu, parametrenin lower_case_table_names kaynak ve replikasyon sunucuları arasında tutarlı olmasını gerektirir. Bu parametre, MySQL için Azure Veritabanı Esnek Sunucu'da varsayılan olarak 1'dir.

    SET GLOBAL lower_case_table_names = 1;
    
  5. Yeni bir çoğaltma rolü oluşturun ve izni ayarlayın.

    Kaynak sunucuda çoğaltma ayrıcalıklarıyla yapılandırılmış bir kullanıcı hesabı oluşturun. Bu, SQL komutları veya MySQL Workbench gibi bir araç aracılığıyla yapılabilir. Kullanıcı oluşturulurken bunun belirtilmesi gerekeceği için SSL ile çoğaltmayı planlayıp planlamayabileceğinizi düşünün. Kaynak sunucunuza kullanıcı hesaplarının nasıl ekleneceğini anlamak için MySQL belgelerine bakın.

    Aşağıdaki komutlarda, oluşturulan yeni çoğaltma rolü kaynağa yalnızca kaynağı barındıran makineden değil, herhangi bir makineden erişebilir. Bu, create user komutunda "syncuser@'%'" belirtilerek yapılır. Hesap adlarını belirtme hakkında daha fazla bilgi edinmek için MySQL belgelerine bakın.

    SSL ile çoğaltma

    Tüm kullanıcı bağlantıları için SSL istemek için aşağıdaki komutu kullanarak bir kullanıcı oluşturun:

    CREATE USER 'syncuser'@'%' IDENTIFIED BY 'yourpassword' REQUIRE SSL;
    GRANT REPLICATION SLAVE ON *.* TO ' syncuser'@'%';
    

    SSL olmadan çoğaltma

    Tüm bağlantılar için SSL gerekli değilse, kullanıcı oluşturmak için aşağıdaki komutu kullanın:

    CREATE USER 'syncuser'@'%' IDENTIFIED BY 'yourpassword';
    GRANT REPLICATION SLAVE ON *.* TO ' syncuser'@'%';
    
  6. Kaynak sunucuyu salt okunur moda ayarlayın.

    Veritabanının dökümünü yapmadan önce sunucunun salt okunur moda alınması gerekir. Salt okunur moddayken, kaynak herhangi bir yazma işlemini işleyemeyecektir. İşletmenize olan etkisini değerlendirin ve gerekirse salt okunur pencereyi yoğun olmayan saatlerde zamanlayın.

    FLUSH TABLES WITH READ LOCK;
    SET GLOBAL read_only = ON;
    
  7. İkili günlük dosyası adını ve ofsetini alın.

    show master status komutunu çalıştırarak geçerli ikili günlük dosyası adını ve ofsetini belirleyin.

    show master status;
    

    Sonuçlar aşağıdakine benzer görünmelidir. Sonraki adımlarda kullanmak üzere ikili dosya adını not edin.

    Ana Durum Sonuçlarının ekran görüntüsü.


Kaynak sunucuyu dök ve geri yükle

  1. Hangi veritabanlarını ve tabloları MySQL için Azure Veritabanı Esnek Sunucu'ya çoğaltmak istediğinizi belirleyin ve kaynak sunucudan dökümü gerçekleştirin.

    Mysqldump kullanarak birincil sunucunuzdan veritabanlarını döküm edebilirsiniz. Ayrıntılar için Döküm ve Geri Yükleme'ye bakın. MySQL kütüphanesini ve test kütüphanesini dökmek gereksizdir.

  2. Kaynak sunucuyu okuma/yazma moduna ayarlayın.

    Veritabanı boşaltıldıktan sonra kaynak MySQL sunucusunu yeniden okuma/yazma moduna geçirin.

    SET GLOBAL read_only = OFF;
    UNLOCK TABLES;
    

    Not

    Sunucu yeniden okuma/yazma moduna geçmeden önce, genel değişken GTID_EXECUTED kullanarak GTID bilgilerini alabilirsiniz. Bu, çoğaltma sunucusunda GTID'yi ayarlamak için sonraki aşamada kullanılacaktır.

  3. Döküm dosyasını yeni sunucuya geri yükleyin.

    Döküm dosyasını MySQL için Azure Veritabanı Esnek Sunucuda oluşturulan sunucuya geri yükleyin. Dump & Restore döküm dosyasını bir MySQL sunucusuna nasıl geri yükleyeceğinizi öğrenmek için başvurun. Döküm dosyası büyükse, çoğaltma sunucunuzla aynı bölgedeki Azure'daki bir sanal makineye yükleyin. Sanal makineden MySQL için Azure Veritabanı Esnek Sunucu örneğine onu geri yükleme işlemi yapın.

Not

Dökümü alıp geri yüklerken veritabanını salt okunur olarak ayarlamaktan kaçınmak istiyorsanız mydumper/myloader kullanabilirsiniz.

Replika Sunucusunda GTID'yi Ayarlama

  1. Bin-log konum tabanlı çoğaltma kullanıyorsanız adımı atlayın

  2. Hedef (kopya) sunucusunun GTID geçmişini sıfırlamak için kaynaktan alınan döküm dosyasındaki GTID bilgileri gereklidir.

  3. Aşağıdaki CLI komutunu kullanarak çoğaltma sunucusunda GTID sıfırlamasını yürütmek için kaynaktan bu GTID bilgilerini kullanın:

    az mysql flexible-server gtid reset --resource-group  <resource group> --server-name <replica server name> --gtid-set <gtid set from the source server> --subscription <subscription id>
    

Daha fazla ayrıntı için bkz . GTID Sıfırlama.

Not

Coğrafi yedeklilik yedeklemesi etkinleştirilmiş bir sunucuda GTID sıfırlaması gerçekleştirilemez. Sunucuda GTID sıfırlaması gerçekleştirmek için coğrafi yedekliliği devre dışı bırakın. GTID sıfırlaması sonrasında Coğrafi yedeklilik seçeneğini yeniden etkinleştirebilirsiniz. GTID sıfırlama eylemi tüm kullanılabilir yedeklemeleri geçersiz kılır ve bu nedenle Coğrafi yedeklilik yeniden etkinleştirildikten sonra coğrafi geri yüklemenin sunucuda gerçekleştirilmesi bir gün sürebilir

  1. Kaynak sunucuyu ayarlayın.

    Tüm Data-in çoğaltma işlevleri saklı yordamlar tarafından gerçekleştirilir. Data-in çoğaltma Saklı Yordamları'nda tüm yordamları bulabilirsiniz. Saklı yordamlar MySQL kabuğunda veya MySQL Workbench'te çalıştırılabilir.

    İki sunucuyu bağlamak ve çoğaltmayı başlatmak için, MySQL için Azure Veritabanı hizmetinde hedef çoğaltma sunucusunda oturum açın ve dış örneği kaynak sunucu olarak ayarlayın. Bu, MySQL sunucusundaki Azure Veritabanı üzerinde mysql.az_replication_change_master veya mysql.az_replication_change_master_with_gtid saklı yordamları kullanılarak yapılır.

    CALL mysql.az_replication_change_master('<master_host>', '<master_user>', '<master_password>', <master_port>, '<master_log_file>', <master_log_pos>, '<master_ssl_ca>');
    
    CALL mysql.az_replication_change_master_with_gtid('<master_host>', '<master_user>', '<master_password>', <master_port>,'<master_ssl_ca>');
    
    • master_host: Kaynak sunucunun ana bilgisayar adı
    • master_user: kaynak sunucu için kullanıcı adı
    • master_password: Kaynak sunucu için parola
    • master_port: Kaynak sunucunun bağlantıları dinlediği bağlantı noktası numarası. (3306, MySQL'in dinlediği varsayılan bağlantı noktasıdır)
    • master_log_file: çalışan show master status'den ikili günlük dosyası adı
    • master_log_pos: çalışan süreçten ikili günlük konumu show master status
    • master_ssl_ca: CA sertifikasının bağlamı. SSL kullanmıyorsanız, boş dizeyi geçirin.

    Bu parametrenin bir değişken olarak geçirilmesi önerilir. Daha fazla bilgi için aşağıdaki örnekleri ziyaret edin.

    Not

    • Kaynak sunucu bir Azure VM'de barındırılıyorsa, kaynak ve çoğaltma sunucularının birbirleriyle iletişim kurmasına izin vermek için "Azure hizmetlerine erişime izin ver" seçeneğini "ON" olarak ayarlayın. Bu ayar, Bağlantı güvenliği seçeneklerinden değiştirilebilir. Daha fazla bilgi için bkz. Azure portalını kullanarak MySQL için Azure Veritabanı - Esnek Sunucu için güvenlik duvarı kurallarını yönetme.
    • Veritabanının dökümünü almak için mydumper/myloader kullandıysanız /backup/metadata dosyasından master_log_file ve master_log_pos alabilirsiniz.

    Örnekler

    SSL ile çoğaltma

    Değişkeni @cert aşağıdaki MySQL komutları çalıştırılarak oluşturulur:

    SET @cert = '-----BEGIN CERTIFICATE-----
    PLACE YOUR PUBLIC KEY CERTIFICATE'`S CONTEXT HERE
    -----END CERTIFICATE-----'
    

    SSL ile çoğaltma, "companya.com" alanında barındırılan bir kaynak sunucu ile Azure Esnek Sunucu için MySQL Veritabanı'nda barındırılan bir çoğaltma sunucusu arasında kurulmuştur. Bu saklı yordam replika üzerinde çalıştırılır.

    CALL mysql.az_replication_change_master('master.companya.com', 'syncuser', 'P@ssword!', 3306, 'mysql-bin.000002', 120, @cert);
    
    CALL mysql.az_replication_change_master_with_gtid('master.companya.com', 'syncuser', 'P@ssword!', 3306, @cert);
    

    SSL olmadan çoğaltma

    SSL olmadan çoğaltma, "companya.com" etki alanında barındırılan bir kaynak sunucu ile MySQL için Azure Veritabanı Esnek Sunucu'da barındırılan bir çoğaltma sunucusu arasında ayarlanır. Bu saklı yordam yedek kopyada çalıştırılır.

    CALL mysql.az_replication_change_master('master.companya.com', 'syncuser', 'P@ssword!', 3306, 'mysql-bin.000002', 120, '');
    
    CALL mysql.az_replication_change_master_with_gtid('master.companya.com', 'syncuser', 'P@ssword!', 3306, '');
    
  2. Çoğaltmayı başlatın.

    Çoğaltmayı başlatmak için mysql.az_replication_start saklı yordamını çağırın.

    CALL mysql.az_replication_start;
    
  3. Çoğaltma durumunu denetleyin.

    show slave status Çoğaltma durumunu görüntülemek için çoğaltma sunucusunda komutunu çağırın.

    show slave status;
    

    Çoğaltmanın doğru durumunu öğrenmek için, izleme sayfasında çoğaltma ölçümleri olan Çoğaltma GÇ Durumu ve Çoğaltma SQL Durumu'na bakın.

    Seconds_Behind_Master"0" ise, çoğaltma düzgün çalışıyor. Seconds_Behind_Master replikaların ne kadar geciktiğini gösterir. Değer "0" değilse, çoğaltma sistemi güncelleştirmeler işlem görüyor demektir.

Veri içi replikasyon işlemleri için diğer yararlı saklı yordamlar

Çoğaltmayı durdurma

Kaynak ve çoğaltma sunucusu arasında çoğaltmayı durdurmak için aşağıdaki saklı yordamı kullanın:

CALL mysql.az_replication_stop;

Çoğaltma ilişkisini kaldırma

Kaynak ve çoğaltma sunucusu arasındaki ilişkiyi kaldırmak için aşağıdaki saklı yordamı kullanın:

CALL mysql.az_replication_remove_master;

Çoğaltma hatasını atla

Çoğaltma hatasını atlamak ve çoğaltmanın devam etmesi için aşağıdaki saklı yordamı kullanın:

CALL mysql.az_replication_skip_counter;
SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos][LIMIT [offset,] row_count]

İkili günlük sonuçlarını göster seçeneğinin ekran görüntüsü.

Sonraki adım