Doküman menüsü

Sürüm 3.0.0

Yetki, Tetikleyici ve Sunucu Ayarı Kontrolleri

Yetki ve tetikleyici denetimleri: Kullanıcı yetkileri, kaynak DELETE tetikleyicileri ve sunucu max_allowed_packet sınırı kontrolleri.

Yetki Kontrolleri

SOURCE_SELECT_PERMISSION_CHECK, SOURCE_DELETE_PERMISSION_CHECK, DEST_WRITE_PERMISSION_CHECK ve JOB_SCHEMA_PERMISSION_CHECK kontrollerinin her biri, ancak yetki ilgili nesne için kanıtlanabildiğinde geçer (kanıtlanabilir yetki kuralı ). Üç durum başarısızlıkla sonuçlanır ve mesaj ilgili durumu belirtir:

DurumAnlamıÇözüm
absentHiçbir kapsamda yetki tanımı (grant) yokYetkiyi verin
unconfirmedBir yetki tanımı olabilir, ancak kanıtlanamıyorYetkiyi hesaba şema veya tablo kapsamında doğrudan verin
unknownYetki bilgisi oluşturulamadıDurumu bildirin: Bu bir yapılandırma sorunu değil, inceleme (inspection) sorunudur

Tablo kapsamlı kontroller TABLE(state) biçimini kullanır; örneğin orders(unconfirmed). JOB_SCHEMA_PERMISSION_CHECK ise tek bir şema üzerinde dört yetkiyi test ettiği için PRIVILEGE(state) biçimini kullanır; örneğin CREATE(unconfirmed). Eksik yetkilerin her bir çözümü, hazır bir yetki tanımı (grant recipe) olarak sunulmuştur.

SOURCE_SELECT_PERMISSION_CHECK

Kaynak hesabının her görev tablosunda SELECT yetkisi olmalıdır. Bu kontrol tüm görev türlerinde çalışır.

SOURCE_DELETE_PERMISSION_CHECK

Kaynak hesabının, arşivleme veya kalıcı silme görevlerindeki her görev tablosunda DELETE yetkisi olmalıdır. validate ve dry-run da bu yetkiyi kontrol eder; böylece eksik bir yetki, çalıştırma herhangi bir veri kopyalamadan önce yakalanır.

DEST_WRITE_PERMISSION_CHECK

Hedef hesabının her görev tablosunda INSERT yetkisi olmalıdır. Doğrulama ayrıca hedefte SELECT yetkisi gerektirir. Bu kontrol SELECT yetkisini kanıtlamadığı için her iki yetkiyi de verin.

JOB_SCHEMA_PERMISSION_CHECK

Hedef hesabının takip şeması (destination.job_schema, varsayılan olarak hedef veritabanı) üzerinde CREATE, SELECT, INSERT ve UPDATE yetkileri olmalıdır. CREATE yetkisi çalışma zamanında gerekir: Her görevin takip günlüğü tablosu (log table), görev ilk kez çalıştığında oluşturulur. GoArchive şemayı hiçbir zaman kendisi oluşturmaz. Bu nedenle mesaj gereken yetki tanımını, CREATE eksik olduğunda ise CREATE DATABASE komutunu da belirtir:

JOB_SCHEMA_PERMISSION_CHECK: destination account lacks provable CREATE, UPDATE on tracking
schema "goarchive" (states: CREATE(unconfirmed), UPDATE(unconfirmed)). Grant each missing
privilege directly to the account at schema scope (DBA must: CREATE DATABASE `goarchive`;
GRANT CREATE, UPDATE ON `goarchive`.* TO <user>)

Tetikleyici Kontrolleri

DELETE_TRIGGER_VISIBILITY_CHECK

Bir arşivleme veya kalıcı silme görevinin kaynak hesabının, bir görev tablosunun tetikleyicilerini (trigger) görebildiği kanıtlanamıyor. Bu nedenle boş bir DELETE tetikleyici listesi hiçbir şey kanıtlamaz. Mesaj her tabloyu durumuyla birlikte belirtir.

Çözüm: TRIGGER yetkisini hesaba şema veya tablo kapsamında doğrudan verin. Bir rol üzerinden verilen TRIGGER yetkisi unconfirmed olarak kalır. --force-triggers bu kontrole uygulanmaz: Bu parametre ön kontrollerin listeleyebildiği tetikleyicileri kabul eder, güvenilemeyen bir listeyi ise hiçbir zaman kabul etmez.

DELETE_TRIGGER_CHECK

Bir arşivleme veya kalıcı silme görevinin kaynak tablolarından birinde DELETE tetikleyicisi var. GoArchive bu tetikleyicinin ne yaptığını göremez; tetikleyicinin yan etkileri de arşivleme ve doğrulama kapsamının dışında kalır.

Geçersiz kılma (override): archive, purge, validate ve dry-run komutlarında kullanılabilen --force-triggers parametresi, bu kontrolün listelediği tetikleyicileri kabul eder. Bu tetikleyiciler ardından her silme işleminde çalışır. Tetikleyicileri önceden denetleyin.

Sunucu Ayarı Kontrolleri

MAX_ALLOWED_PACKET_CHECK

Anahtar üzerinden çalışan her sorgu (kopyalama okuması, doğrulama, silme parçaları, foreign_key üzerinden keşif ve takip günlüğü sorguları) en fazla kendi sorgu sınırı kadar ve en fazla batch_size kadar anahtar taşır. Kaynaktaki anahtar bazlı sorgular ise en fazla batch_size ve batch_delete_size değerlerinden büyük olanı kadar anahtar taşır. Ön kontroller her sorgunun boyutunu bu anahtar sayısına göre hesaplar; sorgu metnini ve bağlanan değerleri, iletildikleri biçimde sayar. GoArchive max_allowed_packet değerini her sunucudan ayrı ayrı okur. Bir sorgu bir sunucunun bu değerini aşarsa çalıştırma, herhangi bir satır okunmadan önce reddedilir. Bu kontrol olmasaydı çalıştırma yarıda başarısız olurdu.

Mesaj sunucuyu, sorguyu, tabloyu, gereken bayt miktarını ve duruma uyan çözümleri belirtir:

  • max_allowed_packet değerini en az bu boyuta yükseltin;
  • batch_size veya batch_delete_size değerini sığan en büyük sayıya düşürün;
  • sınırına ulaşmış bir sorgu için, sınırı küçültmek amacıyla range_optimizer_max_mem_size değerini düşürün (değer 0 ise bir değer atayın).

INSERT sorguları anahtar değil satır taşır ve burada sınırlandırılmaz: Büyük değerler ayrı olarak gönderilir. Bu nedenle bir INSERT işlemini hâlâ başarısız kılabilecek olan, hedefin paket boyutundan büyük tek bir değer ya da nadiren sorgunun tamamıdır (Sınırlar ve Kısıtlamalar ).