Aracılığıyla paylaş


MySQL için Azure Veritabanı Veri Çoğaltmasını yapılandırma

ŞUNLAR IÇIN GEÇERLIDIR: MySQL için Azure Veritabanı - Tek Sunucu

Önemli

MySQL için Azure Veritabanı tek sunucu kullanımdan kaldırma yolundadır. Esnek MySQL için Azure Veritabanı sunucuya yükseltmenizi kesinlikle öneririz. MySQL için Azure Veritabanı esnek sunucuya geçiş hakkında daha fazla bilgi için bkz. MySQL için Azure Veritabanı Tek Sunucu'ya neler oluyor?

Bu makalede, kaynak ve çoğaltma sunucularını yapılandırarak MySQL için Azure Veritabanı'de Veri Çoğaltma'nın nasıl ayarlanacağı açıklanı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ı hizmetinde çoğaltma oluşturmak için, Veri Girişi Çoğaltması şirket içi, sanal makinelerde (VM) veya bulut veritabanı hizmetlerindeki bir kaynak MySQL sunucusundan verileri eşitler. Veri Girişi Çoğaltması, MySQL'e özgü ikili günlük (binlog) dosya konumu tabanlı veya GTID tabanlı çoğaltmayı temel alır. Binlog çoğaltması hakkında daha fazla bilgi edinmek için bkz. MySQL binlog çoğaltmasına genel bakış.

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

Çoğaltma olarak kullanmak için MySQL için Azure Veritabanı tek sunucu örneği oluşturma

  1. Tek MySQL için Azure Veritabanı sunucunun yeni bir örneğini oluşturun (örneğin, replica.mysql.database.azure.com). Sunucu oluşturmak için Azure portalını kullanarak MySQL için Azure Veritabanı sunucusu oluşturma bölümüne bakın. Bu sunucu, Veri İçeri Çoğaltma için "çoğaltma" sunucusudur.

    Önemli

    MySQL için Azure Veritabanı sunucusu Genel Amaçlı veya Bellek için İyileştirilmiş fiyatlandırma katmanlarında oluşturulmalıdır. Bu katmanlarda yalnızca veri çoğaltma desteklenir. GTID, 5.7 ve 8.0 sürümlerinde ve yalnızca 16 TB'a kadar depolamayı destekleyen sunucularda desteklenir (Genel amaçlı depolama v2).

  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ı sunucusunda tüm hesapları ve ilgili ayrıcalıkları el ile oluşturmanız gerekir.

  3. Kaynak sunucunun IP adresini çoğaltmanın güvenlik duvarı kurallarına ekleyin.

    Azure portalını veya Azure CLI’yı kullanarak güvenlik duvarı kurallarını güncelleştirin.

  4. İsteğe bağlı - Kaynak sunucudan MySQL için Azure Veritabanı çoğaltma sunucusuna GTID tabanlı çoğaltma kullanmak istiyorsanız, aşağıdaki portal görüntüsünde gösterildiği gibi MySQL için Azure Veritabanı sunucusunda aşağıdaki sunucu parametrelerini etkinleştirmeniz gerekir:

    MySQL için Azure Veritabanı sunucusunda GTID'yi etkinleştirme

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 veritabanı hizmetinde Barındırılan MySQL sunucusunu Veri İçinde Çoğaltma için hazırlar ve yapılandırılır. Bu sunucu, Veri gelen çoğaltması için "kaynak"tır.

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

  2. 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.

    Başka bir makinede barındırılan MySQL komut satırı gibi bir araçtan veya Azure portalında bulunan Azure Cloud Shell'den bağlanmayı deneyerek kaynak sunucuya bağlantıyı test edin.

    Kuruluşunuzun katı güvenlik ilkeleri varsa ve kaynak sunucudaki tüm IP adreslerinin Azure'dan kaynak sunucunuza iletişimi etkinleştirmesine izin vermiyorsa, MySQL sunucunuzun IP adresini belirlemek için aşağıdaki komutu kullanabilirsiniz.

    1. MySQL komut satırı gibi bir araç kullanarak MySQL için Azure Veritabanı sunucunuzda oturum açın.

    2. Aşağıdaki sorguyu yürütür.

      mysql> SELECT @@global.redirect_server_host;
      

      Aşağıda bazı örnek çıkışlar verilmiştir:

      +-----------------------------------------------------------+
      | @@global.redirect_server_host                             |
      +-----------------------------------------------------------+
      | e299ae56f000.tr1830.westus1-a.worker.database.windows.net |
       +-----------------------------------------------------------+
      
    3. MySQL komut satırından çıkın.

    4. IP adresini almak için ping yardımcı programı içinde aşağıdaki komutu yürütebilirsiniz:

      ping <output of step 2b>
      

      Örneğin:

      C:\Users\testuser> ping e299ae56f000.tr1830.westus1-a.worker.database.windows.net
      Pinging tr1830.westus1-a.worker.database.windows.net (**11.11.111.111**) 56(84) bytes of data.
      
    5. Kaynak sunucunuzun güvenlik duvarı kurallarını, önceki adımın çıkış ip adresini 3306 numaralı bağlantı noktasına içerecek şekilde yapılandırın.

      Not

      Bu IP adresi bakım/dağıtım işlemleri nedeniyle değişebilir. Bu bağlantı yöntemi yalnızca 3306 bağlantı noktasında tüm IP adreslerine izin veremeyen müşteriler içindir.

  3. İkili günlük kaydını açın.

    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 MySQL kaynak sunucusunu yeniden başlatın.

    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 Çoğaltma, parametresinin lower_case_table_names kaynak ve çoğaltma sunucuları arasında tutarlı olmasını gerektirir. Bu parametre, MySQL için Azure Veritabanı varsayılan olarak 1'dir.

    SET GLOBAL lower_case_table_names = 1;
    

    İsteğe bağlı - GTID tabanlı çoğaltma kullanmak istiyorsanız, kaynak sunucuda GTID'nin etkinleştirilip etkinleştirilmediğini denetlemeniz gerekir. kaynak MySQL sunucunuzda aşağıdaki komutu yürüterek gtid_mode AÇıK olup olmadığını görebilirsiniz.

    show variables like 'gtid_mode';
    

    Önemli

    Tüm sunucuların gtid_mode varsayılan KAPALI değerine ayarlanmıştır. Kaynak MySQL sunucusunda GTID'yi etkinleştirmeniz gerekmez ve özellikle Veri Girişi Çoğaltması'nı ayarlamanız gerekir. KAYNAK sunucuda GTID zaten etkinleştirildiyse, isteğe bağlı olarak tek MySQL için Azure Veritabanı sunucuyla da Veri İçeri Çoğaltma'yı ayarlamak için GTID tabanlı çoğaltmayı kullanabilirsiniz. Kaynak sunucudaki gitd_mode yapılandırmasından bağımsız olarak tüm sunucular için veri çoğaltması ayarlamak için dosya tabanlı çoğaltmayı kullanabilirsiniz.

  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.

    SQL Komutu

    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';
    GRANT REPLICATION SLAVE ON *.* TO 'syncuser'@'%' REQUIRE SSL;
    

    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'@'%';
    

    MySQL Workbench

    MySQL Workbench'te çoğaltma rolünü oluşturmak için, Yönetim panelinden Kullanıcılar ve Ayrıcalıklar panelini açın ve Hesap Ekle'yi seçin.

    Kullanıcılar ve Ayrıcalıklar

    Kullanıcı adını Oturum Açma Adı alanına yazın.

    Kullanıcıyı eşitle

    Yönetim Rolleri panelini ve ardından Genel Ayrıcalıklar listesinden Çoğaltma Kölesi'ni seçin. Ardından çoğaltma rolünü oluşturmak için Uygula'yı seçin.

    Çoğaltma Kölesi

  6. Kaynak sunucuyu salt okunur moda ayarlayın.

    Veritabanının dökümünü almadan önce sunucunun salt okunur moda yerleştirilmesi gerekir. Salt okunur moddayken, kaynak herhangi bir yazma işlemini işleyemeyecektir. İşletmenizin etkisini değerlendirin ve gerekirse salt okunur pencereyi yoğun olmayan bir zamanda zamanlayın.

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

    show master status Geçerli ikili günlük dosyası adını ve uzaklığını belirlemek için komutunu çalıştırın.

     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ı

Kaynak sunucunun dökümünü al ve geri yükle

  1. hangi veritabanlarını ve tabloları MySQL için Azure Veritabanı ç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 kitaplığının ve test kitaplığının dökümünü almak gereksizdir.

  2. İsteğe bağlı - gtid tabanlı çoğaltma kullanmak istiyorsanız birincilde yürütülen son işlemin GTID değerini belirlemeniz gerekir. Ana sunucuda yürütülen son işlemin GTID değerini not almak için aşağıdaki komutu kullanabilirsiniz.

    show global variables like 'gtid_executed';
    
  3. 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;
    
  4. Döküm dosyasını yeni sunucuya geri yükleyin.

    Döküm dosyasını MySQL için Azure Veritabanı hizmetinde oluşturulan sunucuya geri yükleyin. Döküm dosyasını Bir MySQL sunucusuna geri yükleme için Döküm ve Geri Yükleme'ye bakın. 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ı sunucusuna geri yükleyin.

  5. İsteğe bağlı - Birincil sunucuyla aynı olduğundan emin olmak için MySQL için Azure Veritabanı'da geri yüklenen sunucunun GTID değerini not edin. MySQL için Azure Veritabanı çoğaltma sunucusundaki GTID temizleme değerinin GTID değerini not almak için aşağıdaki komutu kullanabilirsiniz. GTID_PURGED değeri, GTID tabanlı çoğaltmanın çalışması için 2. adımda belirtilen ana gtid_executed ile aynı olmalıdır.

    show global variables like 'gtid_purged';
    
  1. Kaynak sunucuyu ayarlayın.

    Tüm VeriLi çoğaltma işlevleri saklı yordamlarla gerçekleştirilir. Tüm yordamları Data-in Çoğaltma Saklı Yordamları'nda 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 işlem, MySQL için Azure Veritabanı sunucusundaki saklı yordam kullanılarak mysql.az_replication_change_master 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>');
    

    İsteğe bağlı - gtid tabanlı çoğaltma kullanmak istiyorsanız, iki sunucuyu bağlamak için aşağıdaki komutu kullanmanız gerekir

    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: ikili günlük dosyası adı çalıştırılıyor show master status

    • master_log_pos: ikili günlük konumunun çalıştırılması 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 örneklere bakın.

    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 . Portalı kullanarak güvenlik duvarı kurallarını yönetme.

    Ö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" etki alanında barındırılan bir kaynak sunucu ile MySQL için Azure Veritabanı'de barındırılan bir çoğaltma sunucusu arasında ayarlanır. Bu saklı yordam çoğaltmada çalıştırılır.

    CALL mysql.az_replication_change_master('master.companya.com', 'syncuser', 'P@ssword!', 3306, 'mysql-bin.000002', 120, @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ı içinde barındırılan bir çoğaltma sunucusu arasında ayarlanır. Bu saklı yordam çoğaltmada çalıştırılır.

    CALL mysql.az_replication_change_master('master.companya.com', 'syncuser', 'P@ssword!', 3306, 'mysql-bin.000002', 120, '');
    
  2. Filtrelemeyi ayarlayın.

    Ana bilgisayarınızdan bazı tabloları çoğaltmayı atlamak istiyorsanız, çoğaltma sunucunuzdaki replicate_wild_ignore_table sunucu parametresini güncelleştirin. Virgülle ayrılmış liste kullanarak birden fazla tablo düzeni sağlayabilirsiniz.

    Bu parametre hakkında daha fazla bilgi edinmek için MySQL belgelerini gözden geçirin.

    Parametresini güncelleştirmek için Azure portalını veya Azure CLI'yı kullanabilirsiniz.

  3. Çoğaltmayı başlatın.

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

    CALL mysql.az_replication_start;
    
  4. Ç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;
    

    ve Slave_SQL_Running durumunun Slave_IO_Running "evet" olması ve değerinin Seconds_Behind_Master "0" olması durumunda çoğaltma düzgün çalışıyor olabilir. Seconds_Behind_Master çoğaltmanın ne kadar geç olduğunu gösterir. Değer "0" değilse, çoğaltma güncelleştirmeleri işliyor demektir.

Veri İçi Çoğaltma 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 hataları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;

İsteğe bağlı - gtid tabanlı çoğaltma kullanmak istiyorsanız, bir işlemi atlamak için aşağıdaki saklı yordamı kullanın

call mysql. az_replication_skip_gtid_transaction(‘<transaction_gtid>’)

Yordam, belirtilen GTID için işlemi atlayabilir. GTID biçimi doğru değilse veya GTID işlemi zaten yürütülmüşse, yordam yürütülmeyecektir. bir işlemin GTID değeri, işlem olaylarını denetlemek için ikili günlük ayrıştırılarak belirlenebilir. MySQL, ikili günlükleri ayrıştırmak ve içeriğini metin biçiminde görüntülemek için mysqlbinlog adlı bir yardımcı program sağlar. Bu, işlemin GTID'sini tanımlamak için kullanılabilir.

Önemli

Bu yordam yalnızca bir işlemi atlamak için kullanılabilir ve gtid kümesini atlamak veya gtid_purged ayarlamak için kullanılamaz.

Geçerli çoğaltma konumundan sonraki işlemi atlamak için aşağıdaki komutu kullanarak aşağıda gösterildiği gibi bir sonraki işlemin GTID değerini belirleyin.

SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos][LIMIT [offset,] row_count]

İkili günlük sonuçlarını göster

Sonraki adımlar

  • MySQL için Azure Veritabanı için Veri Çoğaltma hakkında daha fazla bilgi edinin.