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:
| Durum | Anlamı | Çözüm |
|---|---|---|
| absent | Hiçbir kapsamda yetki tanımı (grant) yok | Yetkiyi verin |
| unconfirmed | Bir yetki tanımı olabilir, ancak kanıtlanamıyor | Yetkiyi hesaba şema veya tablo kapsamında doğrudan verin |
| unknown | Yetki 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_packetdeğerini en az bu boyuta yükseltin;batch_sizeveyabatch_delete_sizedeğ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_sizedeğ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 ).
