MySQL için Azure Veritabanı yapılandırma - Esnek Sunucu verisi çoğaltması
Bu makalede, kaynak ve çoğaltma sunucularını yapılandırarak Verileri MySQL için Azure Veritabanı Esnek Sunucu'da MySQL için Azure Veritabanı - Esnek Sunucu'ya çoğaltmanın nasıl ayarlanacağı açıklanmaktadı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 bkz . MySQL Çoğaltma.
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 üzere MySQL için Azure Veritabanı Esnek Sunucu örneği oluşturma
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, Verili çoğaltma için "çoğaltma" sunucusudur.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 veritabanı hizmetinde Barındırılan MySQL sunucusunu Veri girişi çoğaltması için hazırlayıp yapılandırmaktadır. Bu sunucu, Veri gelen çoğaltması için "kaynak"tır.
Devam etmeden önce kaynak sunucu gereksinimlerini gözden geçirin.
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ğ Ağ Güvenlik Grubu kurallarınızın 3306 numaralı giden bağlantı noktasını engellemediğinden emin olun (MySQL Azure VM'de çalışıyorsa da gelen). 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.
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: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 kaynak sunucuda MySQL hizmetini yeniden başlatın (veya Yeniden Başlat).
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.
Veri ekleme çoğaltması, parametrenin
lower_case_table_names
kaynak ve çoğaltma 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;
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'; 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'@'%';
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.
Kaynak sunucunun dökümünü al ve geri yükle
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 kitaplığının ve test kitaplığının dökümünü almak gereksizdir.
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.
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. 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ı Esnek Sunucu örneğine geri yükleyin.
Not
Dökümü alıp geri yüklerken veritabanını salt okunur olarak ayarlamaktan kaçınmak istiyorsanız mydumper/myloader kullanabilirsiniz.
Çoğaltma Sunucusunda GTID'yi ayarlama
Bin-log konum tabanlı çoğaltma kullanıyorsanız adımı atlayın
Hedef (çoğaltma) sunucusunun GTID geçmişini sıfırlamak için kaynaktan alınan döküm dosyasındaki GTID bilgileri gereklidir.
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
Veri ekleme çoğaltmasını başlatmak için kaynak ve çoğaltma sunucularını bağlama
Kaynak sunucuyu ayarlayın.
Tüm Verili çoğaltma işlevleri saklı yordamlar tarafından 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, MySQL için Azure Veritabanı sunucusunda veya
mysql.az_replication_change_master_with_gtid
saklı yordamı kullanılarakmysql.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>');
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 ö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" 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 ç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);
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 çoğaltmada ç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, '');
Ç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;
Çoğaltmanın doğru durumunu öğrenmek için, izleme sayfası altında çoğaltma ölçümleri - Ç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
ç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çinde ç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;
SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos][LIMIT [offset,] row_count]