Veri Arşivleme
İlişkili veriyi arşiv sunucusuna taşıyın ve kopya doğrulandıktan sonra kaynaktan silin.
Arşivleme iş akışı veriyi hedefe kopyalar, ulaştığını teyit eder ve ardından kaynaktan siler. Eksiksiz döngü budur.
Çalıştırma
goarchive archive -c archiver.yaml --job archive_old_orders
Neler olur
GoArchive önce ortamı denetler: tabloların her iki tarafta bulunduğunu, yapılarının uyumlu olduğunu, hesabınızın gereken yetkilere sahip olduğunu ve tanımlanan ilişkilerin veritabanıyla örtüştüğünü. Ancak bundan sonra başlar.
Sonra her batch için:
- İşin filtresine uyan kök satırları seçer.
- Onlara ait tüm satırları keşfeder.
- Üst kayıtlardan başlayarak hedefe kopyalar.
- Kopyayı doğrular.
- Alt kayıtlardan başlayarak kaynaktan siler.
- İlerlemeyi kaydeder.
Batch’ler arasında sleep_seconds kadar bekler, bir replica tanımlıysa
gecikmesini denetler ve duraklatma isteği olup olmadığına bakar.
İlk çalıştırmadan önce
Üç inceleme komutunu sırayla kullanın:
goarchive validate -c archiver.yaml
goarchive dry-run -c archiver.yaml --job archive_old_orders
goarchive archive -c archiver.yaml --job archive_old_orders
validate ortamı teyit eder. dry-run filtreyi ve her tablonun kaç satır
katacağını gösterir. İkisi de hiçbir şeyi değiştirmez.
Önerilen ayarlar
verification:
method: sha256
processing:
batch_size: 1000
batch_delete_size: 500
sleep_seconds: 1
sha256 doğrulaması daha güçlü bir güvence verir ve yarıda kalan bir işi
sürdürmeyi kolaylaştırır.
Çalışma yarıda kalırsa
Aynı komutu yeniden çalıştırın. GoArchive kendi ilerleme kayıtlarını okur ve durduğu yerden devam eder; yalnızca tamamlanmamış işi tekrarlar. Bkz. Checkpoint ve Devam Etme .
Trigger’ı olan tablolar
Bir kaynak tabloda silme sırasında çalışan bir trigger varsa GoArchive bunu bildirir ve onayınızı bekler; çünkü trigger silme işleminin parçası olarak çalışır ve etkileri işin tarif ettiğinin dışındadır.
goarchive archive -c archiver.yaml --job archive_old_orders --force-triggers
Bayrağı vermeden önce trigger’ların ne yaptığını gözden geçirin.
Sonucu doğrulamak
-- arşivde bulunan satırlar
SELECT COUNT(*) FROM archive.orders;
-- kaynakta filtreye uyan, kalan satırlar
SELECT COUNT(*) FROM production.orders
WHERE created_at < DATE_SUB(NOW(), INTERVAL 2 YEAR);
