Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Veri geçişi, MySQL veritabanlarını şirket içi ortamlardan MySQL için Azure veritabanlarına geçirmenin önemli bir yönüdür. Bu makale, sorunsuz bir veri aktarımı sağlamak için çeşitli teknikler ve en iyi yöntemler hakkında kapsamlı bir kılavuz sunarak veri geçişinin inceliklerini ele alır. Mantıksal ve fiziksel geçiş gibi farklı veri geçiş yöntemlerini anlayıp veri bütünlüğü ve kapalı kalma süresi gibi olası zorlukları ele alarak geçiş stratejinizi etkili bir şekilde planlayabilir ve yürütebilirsiniz. Bu kılavuz, büyük veri kümelerini işleme, kesintileri en aza indirme ve veritabanı performansınızı ve güvenilirliğinizi iyileştirmek için Azure'ın sağlam özelliklerini kullanma bilgilerini size sağlar. Altyapınızı modernleştirmeyi veya veri yönetimi özelliklerinizi geliştirmeyi hedefleyen bu makale, başarılı bir veri geçişi için gereken içgörüleri sağlar.
Önkoşullar
MySQL'i şirket içi MySQL için Azure Veritabanı geçirme: Performans Temelleri
Veritabanını yedekleme
Verileri yükseltmeden veya geçirmeden önce ihtiyatlı bir adım olarak, MySQL Workbench kullanarak yükseltmeden önce veritabanını dışarı aktarın veya komutuyla el ile.mysqldump
Çevrimdışı ve çevrimiçi karşılaştırması
Bir geçiş aracı seçilmeden önce, geçişin çevrimiçi mi yoksa çevrimdışı mı olacağı belirlenmelidir.
Çevrimdışı geçişler , geçiş gerçekleşirken sistemin kapalı olmasını sağlar. Bu seçenek hiçbir işlem gerçekleşmemesini ve Verilerin durumunun Azure'da geri yüklendiğinde tam olarak beklenen durum olmasını sağlar.
Çevrimiçi geçişler , verileri neredeyse gerçek zamanlı olarak geçirir. Bu seçenek, veri iş yükünü kullanan kullanıcılar veya uygulama için çok az kapalı kalma süresi olduğunda uygundur. bu işlem, veya benzeri
binlog
bir çoğaltma yöntemi kullanarak verileri çoğaltmayı içerir.
WWI için ortamlarında, hedef geçiş zaman çerçevesinde gelen ve giden bağlantı için uygun değişikliklerin uygulanmasına izin vermeyen bazı karmaşık ağ ve güvenlik gereksinimleri vardır. Bu karmaşıklıklar ve gereksinimler temelde çevrimiçi yaklaşımın dikkate alınmasını ortadan kaldırır.
Not
Çevrimdışı ve Çevrimiçi geçiş hakkında daha fazla bilgi için Planlama ve Değerlendirme bölümlerini gözden geçirin.
Veri kayma
Çevrimdışı geçiş stratejileri veri kayma potansiyeline sahiptir. Yeni değiştirilen kaynak veriler geçirilen verilerle eşitlenmediğinde veri kayma oluşur. Bu durumda, tam dışarı aktarma veya delta dışarı aktarma gerekir. Veritabanına gelen tüm trafiği durdurup dışarı aktarma işleminizi gerçekleştirerek bu sorunu giderebilirsiniz. Tüm veri değişikliği trafiğini durdurmak mümkün değilse kaymayı hesaba eklemeniz gerekir.
Veritabanı tablolarında sayısal tabanlı birincil anahtarlar gibi sütunlar yoksa veya geçirilmesi gereken her tabloda bir tür değiştirme ve oluşturma tarihi yoksa değişikliklerin belirlenmesi karmaşık hale gelebilir.
Örneğin, sayısal tabanlı bir birincil anahtar varsa ve geçiş sıralama düzeninde içeri aktarılıyorsa, içeri aktarmanın nerede durdurulduğunu belirlemek ve bu konumdan yeniden başlatmak nispeten basittir. Sayısal tabanlı anahtar yoksa değiştirme ve oluşturma tarihi kullanmak ve yeniden sıralamalı bir şekilde içeri aktararak geçişi hedefte görülen son tarihten itibaren yeniden başlatabilirsiniz.
Performans önerileri
İhracat
Mydumper gibi çok iş parçacıklı modda çalışabilen bir dışarı aktarma aracı kullanma
MySQL 8.0 kullanırken, dışarı aktarma hızını artırmak için uygun olduğunda bölümlenmiş tabloları kullanın.
İçeri Aktar
Verileri yükledikten sonra kümelenmiş dizinler ve birincil anahtarlar oluşturun. Verileri birincil anahtar sırasına göre veya birincil anahtar bazı tarih sütunlarında (tarihi değiştirme veya oluşturma tarihi gibi) sıralı düzende yükle.
İkincil dizinlerin oluşturulmasını veriler yüklenene kadar geciktirin. Yüklendikten sonra tüm ikincil dizinleri oluşturun.
Yüklemeden önce yabancı anahtar kısıtlamalarını devre dışı bırakın. Yabancı anahtar denetimlerinin devre dışı bırakılması önemli performans kazançları sağlar. Bilgi tutarlılığı sağlamak için kısıtlamaları etkinleştirin ve yük sonrasında verileri doğrulayın.
Verileri paralel olarak yükleyin. Azure portalında sağlanan ölçümleri kullanarak kaynak çekişmesi ve izleme kaynaklarına neden olabilecek çok fazla paralellikten kaçının.
Geçişi gerçekleştirme
Veritabanını yedekleme
Azure Giriş bölgesini oluşturma ve doğrulama
Kaynak Sunucu Parametrelerini Yapılandırma
Hedef Sunucu Parametrelerini Yapılandırma
Veritabanı nesnelerini (şema, kullanıcılar vb.) dışarı aktarma
Verileri dışarı aktarma
Veritabanı nesnelerini içeri aktarma
Verileri içeri aktarma
Doğrulama
Hedef Sunucu Parametrelerini Sıfırla
Bir veya daha fazla Uygulamayı geçirme
Yaygın adımlar
Hangi yolun alınmasına rağmen, gerçekleştirilmesi gereken yaygın adımlar vardır:
Desteklenen bir Azure MySQL sürümüne yükseltme
Envanter Veritabanı Nesneleri
Kullanıcıları ve izinleri dışarı aktarma
En son MySQL sürümüne geçiş
WWI Konferansı veritabanı 5.5 çalıştırdığından bir yükseltme gerçekleştirmek gerekir. CIO, MySQL'in en son sürümüne (şu anda 8.0) yükseltmesini istedi.
8.0 sürümüne yükseltmenin iki yolu vardır:
Yerinde
Dışarı/İçeri Aktarma
Yükseltme yapmaya karar verirken, herhangi bir çakışma olup olmadığını belirlemek için yükseltme denetleyicisi aracını çalıştırmanız önemlidir. Örneğin, MySQL Server 8.0'a yükseltirken araç aşağıdaki çakışmaları denetler:
MySQL 8.0'da ayrılmış sözcüklerle çakışan veritabanı nesne adları
utf8mb3 karakter kümesinin kullanımı
ZEROFILL/görüntüleme uzunluğu türü özniteliklerinin kullanımı
8.0'daki tablolarla çakışan tablo adları
Zamana bağlı tür kullanımı
64 karakterden uzun yabancı anahtar kısıtlama adları
Yükseltme denetleyicisi sorun bildirmezse MySQL ikili dosyalarını değiştirerek yerinde yükseltme yapmak güvenlidir. Sorunları olan veritabanlarının dışarı aktarılması ve sorunların giderilmesi gerekir.
WWI senaryosu
MySQL örneğini 8.0'a başarıyla geçirdikten sonra WWI geçiş ekibi, DMS aracı şu anda yalnızca 5.6 ve 5.7'yi desteklediğinden, özgün MySQL'i şirket içinde MySQL için Azure Veritabanı geçiş yoluna geçirmenin artık kullanılamadığını fark etti. DMS gerekli ağ erişimi. WWI geçiş ekibi karmaşık ağ sorunlarını gidermeye hazır değildi. Bu çevresel sorunlar, geçiş aracı seçimlerini MySQL Workbench olarak daraltmıştı.
Veritabanı nesneleri
Test Planları bölümünde açıklandığı gibi, her şeyi geçirdiğinizden emin olmak için veritabanı nesnelerinin envanterinin geçiş öncesinde ve sonrasında yapılması gerekir.
Bu bilgileri oluşturmak için bir saklı yordam yürütmek isterseniz, aşağıdakine benzer bir şey kullanabilirsiniz:
DELIMITER //
CREATE PROCEDURE `Migration_PerformInventory`(IN schemaName CHAR(64))
BEGIN
DECLARE finished INTEGER DEFAULT 0;
DECLARE tableName varchar(100) DEFAULT "";
#get all tables
DECLARE curTableNames
CURSOR FOR
SELECT TABLE_NAME FROM information_schema.tables where TABL
E_SCHEMA = schemaName;
-- declare NOT FOUND handler
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET finished = 1;
DROP TABLE IF EXISTS MIG_INVENTORY;
CREATE TABLE MIG_INVENTORY
(
REPORT_TYPE VARCHAR(1000),
OBJECT_NAME VARCHAR(1000),
PARENT_OBJECT_NAME VARCHAR (1000),
OBJECT_TYPE VARCHAR(1000),
COUNT INT
)
ROW_FORMAT=DYNAMIC,
ENGINE='InnoDB';
INSERT INTO MIG_INVENTORY (REPORT_TYPE,OBJECT_NAME, OBJECT_TYPE, COUNT)
SELECT
'OBJECTCOUNT', 'TABLES', 'TABLES', COUNT(*)
FROM
information_schema.tables
where
TABLE_SCHEMA = schemaName;
#### Constraints
INSERT INTO MIG_INVENTORY (REPORT_TYPE,OBJECT_NAME, OBJECT_TYPE, COUNT)
SELECT
'OBJECTCOUNT', 'STATISTICS', 'STATISTICS', COUNT(*)
FROM
information_schema.STATISTICS
WHERE
TABLE_SCHEMA = schemaName;
INSERT INTO MIG_INVENTORY (REPORT_TYPE,OBJECT_NAME, OBJECT_TYPE, COUNT)
SELECT
'OBJECTCOUNT', 'VIEWS', 'VIEWS', COUNT(*)
FROM
information_schema.VIEWS
WHERE
ROUTINE_TYPE = 'FUNCTION' and
ROUTINE_SCHEMA = schemaName;
INSERT INTO MIG_INVENTORY (REPORT_TYPE,OBJECT_NAME, OBJECT_TYPE, COUNT)
SELECT
'OBJECTCOUNT', 'PROCEDURES', 'PROCEDURES', COUNT(*)
FROM
information_schema.ROUTINES
WHERE
ROUTINE_TYPE = 'PROCEDURE' and
ROUTINE_SCHEMA = schemaName;
INSERT INTO MIG_INVENTORY (REPORT_TYPE,OBJECT_NAME, OBJECT_TYPE, COUNT)
SELECT
'OBJECTCOUNT', 'EVENTS', 'EVENTS', COUNT(*)
FROM
information_schema.EVENTS
WHERE
EVENT_SCHEMA = schemaName;
INSERT INTO MIG_INVENTORY (REPORT_TYPE,OBJECT_NAME, OBJECT_TYPE, COUNT)
SELECT
'OBJECTCOUNT', 'USER DEFINED FUNCTIONS', 'USER DEFINED FUNCTIONS'
, COUNT(*)
FROM
mysql.func;
INSERT INTO MIG_INVENTORY (REPORT_TYPE,OBJECT_NAME, OBJECT_TYPE, COUNT)
SELECT
'OBJECTCOUNT', 'USERS', 'USERS', COUNT(*)
FROM
mysql.user
WHERE
user <> '' order by user;
OPEN curTableNames;
getTableName: LOOP
FETCH curTableNames INTO tableName;
IF finished = 1 THEN
LEAVE getTableName;
END IF;
SET @s = CONCAT('SELECT COUNT(*) into @TableCount FROM ', schemaName,
'.', tableName);
#SELECT @s;
PREPARE stmt FROM @s;
EXECUTE stmt;
INSERT INTO MIG_INVENTORY (REPORT_TYPE,OBJECT_NAME, OBJECT_TYPE, COUNT)
SELECT
'TABLECOUNT', tableName, 'TABLECOUNT', @TableCount;
DEALLOCATE PREPARE stmt;
END LOOP getTableName;
CLOSE curTableNames;
SELECT * FROM MIG_INVENTORY;
END //
DELIMITER ;
CALL Migration_PerformInventory('reg_app');
- Kaynak db'de bu yordamın çağrılması aşağıdakini (kesilmiş çıkış) ortaya çıkar:
- Hedef veritabanı yordamı sonucu, geçişi tamamladıktan sonra aşağıdaki görüntüye benzemelidir. DB'de işlev olmadığına dikkat edin. İşlevler geçiş öncesinde ortadan kaldırıldı.
Kullanıcılar ve izinler
Başarılı bir geçiş, ilişkili kullanıcıların ve izinlerin hedef ortama geçirilmesini gerektirir.
Aşağıdaki PowerShell betiğini kullanarak tüm kullanıcıları ve onların izinlerini dışarı aktarın:
$username = "yourusername";
$password = "yourpassword";
mysql -u$username -p$password --skip-column-names -A -e"SELECT CONCAT('SHOW G
RANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>''" > Show
Grants.sql;
$lines = get-content "ShowGrants.sql"
foreach ($line in $lines)
{
mysql -u$username -p$password --skip-column-names -A -e"$line" >> AllGrants.sql
}
PowerShell ISE kullanarak yeni bir PowerShell betiği oluşturma (Kurulum belgesine bakın)
Kullanıcı adınızı kök olarak, parolanızı da kök kullanıcının parolası olarak ayarlayın
Ardından yeni MySQL için Azure Veritabanı hedefleyen betiği çalıştırabilirsinizAllGrants.sql
:
$username = "yourusername";
$password = "yourpassword";
$server = "serverDNSname";
$lines = get-content "AllGrants.sql"
foreach ($line in $lines)
{
mysql -u$username -p$password -h$server --ssl-ca=c:\temp\BaltimoreCyberTrus
tRoot.crt.cer --skip-column-names -A -e"$line"
}
PowerShell kullanarak MySQL için Azure Veritabanı'nda kullanıcı da oluşturabilirsiniz: /azure/mysql/howto-create-users
Geçişi yürütme
Temel geçiş bileşenleri kullanıma açıkken artık veri geçişine devam etmek mümkündür. Daha önce tanıtılan çeşitli araçlar ve yöntemler vardı. WWI için MySQL Workbench yolunu kullanarak verileri dışarı aktarıp MySQL için Azure Veritabanı içeri aktaracaklar.
Veri geçişi denetim listesi
Ortamın karmaşıklığını ve çevrimiçi bir yaklaşımın uygun olup olmadığını anlayın.
Veri kayma hesabı. Veritabanı hizmetinin durdurulması olası veri kaymasını ortadan kaldırabilir.
Hızlı dışarı aktarma için kaynak parametreleri yapılandırın.
Hızlı içeri aktarma için hedef parametreleri yapılandırın.
Farklı bir kaynak sürüme sahip olan tüm geçişleri hedefle test edin.
Kullanıcı adları ve ayrıcalıklar gibi veri tabanlı olmayan nesneleri geçirin.
Geçiş yürütülürken tüm görevlerin belgelendiğinden ve işaretlendiğinden emin olun.