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
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).
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.
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.
İsteğe bağlı - Kaynak sunucudan MySQL için Azure Veritabanı çoğaltma sunucusuna GTID tabanlı çoğaltma kullanmak istiyorsanız, MySQL için Azure Veritabanı sunucusunda aşağıdaki sunucu parametrelerini etkinleştirmeniz gerekir:
- enforce_gtid_consistency
- gtid_mode
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.
Devam etmeden önce kaynak sunucu gereksinimlerini gözden geçirin.
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.
MySQL komut satırı gibi bir araç kullanarak MySQL için Azure Veritabanı sunucunuzda oturum açın.
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 | +-----------------------------------------------------------+
MySQL komut satırından çıkın.
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.
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.
İ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:Kaynak sunucuda MySQL yapılandırma dosyanızı (my.cnf) bulun. Örneğin: /etc/my.cnf
Düzenlemek için yapılandırma dosyasını açın ve dosyadaki mysqld bölümünü bulun.
mysqld bölümünde aşağıdaki satırı ekleyin:
log-bin=mysql-bin.log
Değişikliklerin etkili olması için MySQL kaynak sunucusunu yeniden başlatın.
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';
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.
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ı adını Oturum Açma Adı alanına yazın.
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.
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;
İ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.
+------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000002 | 120 | | | | +------------------+----------+--------------+------------------+-------------------+
Kaynak sunucunun dökümünü al ve geri yükle
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.
İ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';
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;
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.
İ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';
Kaynak ve çoğaltma sunucularını bağlayarak Gelen Verileri Çoğaltmayı başlatma
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, '');
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.
Ç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;
Ç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
durumununSlave_IO_Running
"evet" olması ve değerininSeconds_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]
mysql> show binlog event is 'mysql-bin.000007' from 194 limit 10;
+------------------+-----+-------------+-----------+-------------+-----------------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+-----+-------------+-----------+-------------+-----------------------------------------------------------------+
| mysql-bin.000007 | 194 | Gtid | 2 | 259 | Set @@SESSION.GTID_NEXT= 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb' |
| mysql-bin.000007 | 259 | Query | 2 | 331 | BEGIN |
| mysql-bin.000007 | 331 | Table_map | 2 | 383 | table_id: 108 (test.testgtid) |
| mysql-bin.000007 | 383 | Delete_rows | 2 | 463 | table_id: 108 flags: STMT_END_F |
| mysql-bin.000007 | 463 | Xid | 2 | 949 | COMMIT /* xid=14 */ |
+------------------+-----+-------------+-----------+-------------+-----------------------------------------------------------------+
5 rows in set (0.00 sec)
Sonraki adımlar
- MySQL için Azure Veritabanı için Veri Çoğaltma hakkında daha fazla bilgi edinin.