Doküman menüsü

Sürüm 3.0.0

Hedef Ortam Kontrolleri

Hedef ortam kontrolleri: Tablo yapısı, depolama motoru, şema uyumluluk kuralları ve tetikleyici denetimleri.

Bu kontroller, hiçbir veri kopyalamayan kalıcı silme (purge) görevlerinde atlanır.

DEST_TABLE_EXISTENCE_CHECK

Her görev tablosu hedef şemada aynı adla ve temel tablo (base table) olarak bulunmalıdır.

Çözüm: Hedef tabloları kaynaktaki tablo tanımlarından oluşturun. Hedefteki başvuru (lookup) tabloları boş olacaksa disable_foreign_key_checks ayarına bakın.

DEST_STORAGE_ENGINE_CHECK

Hedefteki her görev tablosu InnoDB olmalıdır: Kopyalama her yığını hedefte tek bir veritabanı işlemiyle (transaction) yazar ve bu işlemi yalnızca InnoDB geri alabilir. Depolama motoru NULL olarak bildirilen bir tablo <table>(<unknown>) olarak reddedilir.

Çözüm: Hedefte ALTER TABLE <table> ENGINE=InnoDB; komutunu çalıştırın.

DEST_KEY_IDENTITY_CHECK

Hedefteki PRIMARY KEY, kaynaktaki kolonlara aynı anahtar sırasıyla ve aynı tip, karakter seti ve karşılaştırma kuralıyla sahip olmalıdır: Farklı bir karşılaştırma kuralı, hangi anahtarların çakışacağını ve doğrulamanın satırları hangi sırayla okuyacağını değiştirir. Yalnızca şu genişletmeye izin verilir: utf8mb3 karakter setindeki bir anahtar kolonu, hedefte ikiz karşılaştırma kuralını kullanan bir utf8mb4 kolonuna kopyalanabilir. Örneğin utf8mb3_general_ci kuralından utf8mb4_general_ci kuralına geçilebilir.

Çözüm: Hedef tabloya kaynaktaki birincil anahtarı tanımlayın.

DEST_SCHEMA_COMPATIBILITY_CHECK

Bu kontrol, kaynak ve hedef kolonlarını büyük/küçük harf ayrımı gözetmeden ada göre eşleştirir ve ardından her çifti karşılaştırır. Hedef, kaynaktan daha esnek olabilir; ancak hiçbir zaman daha katı olamaz. Kopyalama her kolon için açık bir değer ekler ve hiçbir zaman hedefteki varsayılan değerlere veya indekslere dayanmaz. Bu nedenle bir esnetme zararsızdır; ek bir kısıtlama ise satırların reddedilmesine yol açar. Uyumsuz tabloların tamamı, her biri işlemin başlamasını durduran ilk engelleyici (fatal) farkıyla birlikte raporlanır.

İzin Verilenler: Hedef Daha Esnek Olabilir

FarkNeden Güvenlidir?
İkincil (secondary) indekslerin kaldırılmasıKopyalama bu indeksleri okumaz
auto_increment, varsayılan değer veya ON UPDATE tanımlarının kaldırılmasıKopyalama tüm değerleri kendisi sağlar
NOT NULL kısıtının kaldırılarak kolonun NULL değer alabilir hale gelmesiHer durumda daha serbesttir
Kaynak kolonun üretilmiş (generated), hedef kolonun ise düz kolon olmasıOkuma işlemi değeri somut olarak okur (materialise)
Kolonun yalnızca bir tarafta INVISIBLE olmasıHer okuma ve INSERT kolonları adıyla belirtir; bu nedenle kolon kopyalanır ve doğrulanır
Tam sayı görüntüleme genişliği (bigint(20) ile bigint, tinyint(1) ile tinyint, bir zerofill genişliği)Kozmetiktir: Kopyalama ve özet (hash), dolgulu metni değil değerin kendisini okur. unsigned ve zerofill özniteliklerinin kendisi ise eşleşmelidir
year(4) ile yearKozmetiktir
Kolon sırasının farklı olmasıBilgilendirme (advisory): Tablo başına bir tane yazdırılır ve yeri değişen her kolonu adıyla belirtir. Her okuma ve INSERT kolonları adıyla belirtir
Kolon adının yalnızca büyük/küçük harf açısından farklı olmasıBilgilendirme. Kopyalama kaynaktaki kolon adlarını kullandığı için satırlar normal şekilde kopyalanır ve doğrulanır

Engelleyici Hata (Fatal): Hedef Veritabanı Daha Katı Kurallara Sahip Olamaz

FarkSonucu
Kolonun yalnızca bir tarafta bulunmasıYanlış kolon eşleştirmesi
Kolon tipinin farklı olması (görüntüleme genişliği dışında)Değer bozulması veya ekleme (insert) hatası
Hedefte NOT NULL, kaynakta NULL değer alabilir kolonNULL içeren satırlar kopyalamanın ortasında reddedilir
Hedef kolonun üretilmiş (generated) olmasıAçıkça verilen değer reddedilir
Yalnızca hedefte bulunan benzersiz indeksKaynakta birbirinden farklı olan satırlar çakışır ve kopyalama başarısız olur
Birincil anahtarın farklı olmasıDEST_KEY_IDENTITY_CHECK tarafından raporlanır

CHECK kısıtlamaları ve yabancıl anahtarlar (foreign key) karşılaştırılmaz. Yalnızca hedefte bulunan böyle bir kısıtlama bir satırı reddederse o yığının kopyalanması başarısız olur ve yığın, herhangi bir silme yapılmadan önce geri alınır.

Hedefteki Benzersiz İndeksler

Benzersiz indeksler (unique index) adlarına göre değil, neyi benzersiz kıldıklarına göre karşılaştırılır: Aynı parça kümesine sahip iki benzersiz indeks eşdeğer kabul edilir. Her parça (column or expression, prefix length, collation) üçlüsünden, yani kolon veya ifade, önek uzunluğu ve karşılaştırma kuralından oluşur.

  • Önek uzunluğu önemlidir: UNIQUE(email(10)), UNIQUE(email) indeksinin kabul ettiği adresleri reddeder.
  • Karşılaştırma kuralı önemlidir: Büyük/küçük harf duyarsız bir hedef karşılaştırma kuralı, ikili (binary) bir kaynak karşılaştırma kuralının ayrı tuttuğu satırları çakıştırır. utf8mb4 ikizine kopyalanan bir utf8mb3 kolon ise kaynaktaki gibi karşılaştırılır.
  • Yok Sayılan Farklar: Şema karşılaştırmasında indeks adı, kolon adlarındaki büyük/küçük harf farkları, bileşik indeks parçalarının sırası ve DESC yönü dikkate alınmaz.
  • Fonksiyonel benzersiz indeksler, yalnızca ifade kaynaktaki bir ifadeyle birebir eşleştiğinde ve hiçbir kolonun karakter seti veya karşılaştırma kuralı farklı olmadığında kontrolden geçer.

Çözüm: Hedefteki benzersiz indeksi kaldırın veya kaynağa eşdeğer bir indeks ekleyin.

Karakter Seti ve Karşılaştırma Kuralı

DurumSonuç
Anahtar dışı bir kolonda karakter seti farkı, verification: count veya noneEngelleyici
Anahtar dışı bir kolonda karakter seti farkı, verification: sha256Uyarı
Hedefteki bir benzersiz indeksin kolonunda karşılaştırma kuralı farkıKolon bir utf8mb4 ikizi değilse engelleyici
Anahtar dışındaki diğer kolonlarda karşılaştırma kuralı farkıUyarı
Bir anahtar kolonunda karakter seti veya karşılaştırma kuralı farkıDEST_KEY_IDENTITY_CHECK
Taraflardan birinin karakter setinin desteklenmemesiDaha önce çalışan COLUMN_CHARSET_CHECK

Karakter seti değişikliği metni sessizce başka karakterlere dönüştürebilir (transliteration) veya kısaltabilir. Sayım doğrulaması (count) hangi anahtarların hedefe ulaştığını kanıtlar, değerleri karşılaştırmaz; bu nedenle bu değişikliği göremez. sha256 ise değişikliği görür ve herhangi bir silme yapılmadan önce yığını başarısız sayar.

DEST_INSERT_TRIGGER_VISIBILITY_CHECK

Hedef hesabının bir görev tablosunun tetikleyicilerini (trigger) görebildiği kanıtlanamıyor. Bir tablo üzerinde TRIGGER yetkisi olmayan bir hesap boş bir tetikleyici listesi görür. Bu nedenle boş liste, tetikleyici olmadığı anlamına gelmez ve DEST_INSERT_TRIGGER_CHECK sonucuna güvenilemez. Mesaj her tabloyu durumuyla birlikte belirtir.

Çözüm: TRIGGER yetkisini hesaba şema veya tablo kapsamında doğrudan verin (Kullanıcı Yetkileri ). Bir rol üzerinden verilen TRIGGER yetkisi unconfirmed olarak kalır. --force-triggers bu kontrole uygulanmaz.

DEST_INSERT_TRIGGER_CHECK

Bir hedef tabloda INSERT tetikleyicisi var. Bu tetikleyici, kopyalanan satırları doğrulama onları okumadan önce değiştirir.

Çözüm: Hedefteki INSERT tetikleyicilerini kaldırın. --force-triggers bu kontrole uygulanmaz.