oldukça benzer dosyaların depolanması için farklılıklar?


18

İş yerinde mysql veritabanlarımızın her gece dökümü yapılır. Günden güne, verinin% 90-95'ine yakın olanının zaman geçtikçe arttığını tahmin ediyorum. (Heck bu noktada bazıları muhtemelen% 99'dur)

Bu dökümler, bir satırın tek bir mysql INSERT ifadesi olduğu yerdir, bu nedenle tek farklar tüm satırlar ve dosyadaki sıralamasıdır. Onları sıralarsam, dosyadan dosyaya gerçek fark çok küçük olurdu.

Bakıyordum ve çıktıyı dökümü sıralamak için herhangi bir yol bulamadım. sortYine de komuttan geçebilirim . Sonra özdeş çizgilerin uzun, uzun blokları olurdu.

Bu yüzden sadece farkları depolamak için bir yol bulmaya çalışıyorum. Bir usta dökümü ile başlayabilirim ve her gece buna karşı farklı olabilirim. Ama farklar her gece daha büyük olurdu. Ya da, bireysel olarak çok küçük olacak olan haddeleme farkları yapabilirim, ancak her gece tüm serinin bir ana farkını bir araya getirmek zorunda kalsam hesaplamak daha uzun ve uzun sürecek gibi görünüyor.

Bu uygulanabilir mi? Hangi araçlarla?


Düzenle mysql yedeklemelerini nasıl yapacağımı sormuyorum. Şu an için mysql unutun. Kırmızı bir ringa balığı. Bilmek istediğim, bir dizi dosyadan bir dizi yuvarlama farkının nasıl yapılacağıdır. Her gece, önceki dosyaya % 99 benzer bir dosya ( mysqldump dosyası olur) alırız . Evet, hepsini gzip ediyoruz. Ancak tüm bu yedekliliği ilk etapta yapmak gereksizdir. Gerçekten ihtiyacım olan önceki gece farkları ... önceki gece sadece% 1 farklı ... vb. Ben sonra bir dizi diffs nasıl yapılır bu yüzden her gece sadece% 1 depolamak gerekir.

Yanıtlar:


14

İkili diffs saklayabilir İki yedekleme araçlardır rdiff-yedekleme ve iki yüzlülük . Her ikisi de dayanmaktadır librsync, ancak bunun üstünde oldukça farklı davranırlar. Rdiff-backup en son kopya ve ters farkları saklarken, yineleme geleneksel artımlı farkları saklar. İki araç ayrıca farklı bir dizi çevresel özellik sunar.


1
IIUC, rdiff-backup daha çekici, çünkü yedeklemenin normalde göz atmasına izin verirken, yineleme sadece eski bir kopyaya sahip.
tshepang

Sorunun + sorusunun oldukça eski olduğunu biliyorum, ancak nasıl kullanılacağını gösteren komutların bir örneğini ekleyebilir misiniz? Örneğin backup201901.tar.gz, backup201902.tar.gz, ..., backup201912.tar.gz, backup202001.tar.gz. Bu, ileride başvurmak için yararlı olacaktır.
Basj

Rdiff-backup'u en son izlediğimde, ana geliştiriciler devam etti ve proje bir tür durgunlaştı, bunun değişip değişmediğini bilmiyorum. Bu önemliyse, ağlar üzerinde de inanılmaz derecede yavaştı.
Lizardx

13

Son zamanlarda git veritabanı dökümü saklamak çalışıyorum. Veritabanı dökümleriniz gerçekten büyükse bu pratik olmayabilir, ancak benim için ufacık veritabanları (Wordpress siteleri ve benzeri) için çalıştı.

Yedek komut dosyam kabaca:

cd /where/I/keep/backups && \
mysqldump > backup.sql && \
git commit -q -m "db dump `date '+%F-%T'`" backup.sql

Bu sadece diffs saklar?
user394

2
Evet. Çok uygun! Dosyayı istediğiniz zaman "kontrol edebilirsiniz" ve git otomatik olarak diffs'yi otomatik olarak birleştirerek o anda var olan dosyayı verir.
sep332

1
Bu blog gönderisi (benim değil) daha ayrıntılı olarak ele alınmaktadır : viget.com/extend/backup-your-database-in-git Yorumlar artıları ve eksileri ve uyarıları daha fazla alır. Git'i kullanırsanız, sürümleri geri alabilmekten daha fazlasını elde edeceğinizi de ekleyeceğim. Ayrıca dökümleri etiketleyebilir veya ayrı dallara sahip olabilirsiniz (dev / prod). Ona bakma yolu git (ya da en sevdiğiniz modern versiyon kontrol sistemini yerleştirmek) kendi diff / gzip 'çözümümü' yuvarlayarak yapabileceğimden daha iyi bir iş çıkarıyor. Bu makaleyle ilgili bir uyarı: Herkese açık olmasını istemediğiniz sürece (veya özel bir repo için ödeme yapmadan) dökümlerinizi github'a itmeyin.
damper

1
Git sadece farkları depolamakla kalmaz . Aslında, öncelikle her bir revizyonun tam görüntüsünü saklar, ancak çeşitli optimizasyonlarla. Bkz bu mükemmel cevabını ve soru
tremby

3

Böyle bir şey yapabilirsiniz ( a.sqlhaftalık yedeklemenizle birlikte).

mysqldump > b.sql
diff a.sql b.sql > a1.diff
scp a1.diff backupserver:~/backup/

Fark dosyalarınız hafta sonuna kadar büyüyecek.

Benim önerim olsa sadece gzip ( gzip -9maksimum sıkıştırma için kullanın ). Bunu şu anda yapıyoruz ve orijinal 639MB iken 59MB'lık bir gz dosyası kullanıyoruz.


Biz zaten onları
gzipping

1

Veritabanı dökümlerinin boyutuna ve gerçek metin benzerliğine bağlı olarak, takip edebileceğiniz birkaç olası yaklaşım vardır:

  1. değiştirilmemiş dökümlerde restic ( https://restic.net/ ) veya borgbackup ( https://borgbackup.readthedocs.io/ ) gibi OP istekleri olarak yuvarlanan bir sağlama toplamı kullanan bir tekilleştirici yedekleme programı uygulayın . Her iki sistem de FUSE aracılığıyla belirli bir yedekleme sürümünün bile monte edilmesine izin verir ve sonsuza kadar artan bir şekilde çalışır.
  2. Veritabanı yapısını içerikten ayırın, NCBI adamlarının oldukça büyük genetik veri tabanları için yaptığı gibi. Yani: veritabanı şeması oluşturmak için SQL komut dosyaları (örn. Ftp://ftp.ncbi.nlm.nih.gov/snp/organisms/human_9606_b151_GRCh38p7/database/organism_schema/ gibi ) oluşturmak ve tabloların içeriğini ayrı ayrı depolamak ekleme metni içermeyen açık metin veya sıkıştırılmış ikili biçim ( ftp://ftp.ncbi.nlm.nih.gov/snp/organisms/human_9606_b151_GRCh38p7/database/organism_data/) örneğin sekme veya virgülle ayrılmış değerler olarak. Tabii ki, verileri veri tabanına geri almak, yani yedeklemeden geri yüklemek için tam zamanında ekleme deyimleri oluşturacak ayrı bir içe aktarma rutini gerektirir. DBMS'nizin bir csv dosyası ithalatçısı sunması durumunda, yukarıdaki ek komut dosyasının gereksinimi göz ardı edilebilir. Böylece büzülmüş metin dosyaları tekrar yukarıda belirtilen veya rdiff-backup gibi diğer düzenli yedekleme programlarına beslenebilir.
  3. WEKA'nın kullandığı gibi yapı ve içeriğin arff dosyaları gibi bir format kullanarak gevşek bir şekilde birleştirildiği bir çözüm seçin ( https://www.cs.waikato.ac.nz/ml/weka/arff.html ): Yapı ve veri türleri sütunlar dosya başlığında bildirilecek ve ardından gerçek içerik bir kez daha csv benzeri bir biçimde bir @DATA deyimi ile ayrılmış olacaktır. Günümüzde birçok ETL aracı, bir veri tabanı konektörüne ek olarak bir arff okuyucu sunmaktadır. Dosyaların kendileri tekrar düzenli yedekleme programlarına beslenebilir

Bu yanıt, "veritabanı dökümlerinin yedeklerinin nasıl yedekleneceği" sorusuna cevap veriyor, ancak daha genel bir soru değil, "Oldukça benzer yedeklerin yedeklerinin nasıl
döndürüleceği" sorusunu yanıtlıyor

Dürüst olmak gerekirse, gerçekte elde etmek istediğiniz şeyin 1. yaklaşımda belirtilen tekilleştirme olduğunu sanıyorum. Belki tarif edildiği yerde restic.net/blog/2015-09-12/restic-foundation1-cdc'ye bir göz atmak istersiniz ve belki de onları denemek istersiniz?
jf1

Ayrıntılı olarak açıklanan bu yorum, mevcut olandan çok daha uygun bir cevap verecektir.
user394

-3

(Bunu üretimde yapmadım.)

Günde veya haftada bir kez tam yedekleme yapın. Yedek röle günlükleri saatte veya günde bir kez kaydeder.


Geçiş günlüğü nedir?
user394
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.