Veritabanı yedekleme betiğiGeliştirme ve Özelleştirme

MySQL ya da PostgreSQL veritabanınızı yedekleyen ve yalnızca seçtiğiniz kopyaları tutan bir Bash ya da Python betiği

Genellikle 15 dakika içinde hazırRevizyonlar dahilKalite kontrolü
Paketler
Ödeme korumasıAyrıntılar
  • Paket kapsamındaki revizyonlar ücretsizdir.
  • Teslimattan sonraki 3 gün içinde yanıt vermezseniz iş otomatik olarak onaylanır.

Para, ödeme yaptığınızda bloke edilir ve yalnızca işi onayladığınızda aktarılır.

MySQL ya da PostgreSQL veritabanınızı yedekleyen ve yalnızca seçtiğiniz kopyaları tutan bir Bash ya da Python betiği

Örnek sonuç

Standart paket için örnek

Merging the monthly sales files of 9 shops into one Excel report

How it is run

python merge_sales.py --month 2026-10
2026-11-02 09:14:03 INFO  Folder: sales/2026-10, 9 files found
2026-11-02 09:14:03 INFO  shop-01.csv: 1,284 rows
2026-11-02 09:14:04 INFO  shop-02.xlsx: 967 rows
2026-11-02 09:14:04 WARN  shop-07.csv: 3 rows without a price skipped (lines 88, 412, 913)
2026-11-02 09:14:05 INFO  Done: 10,412 rows -> report-2026-10.xlsx (sheets "Sales" and "Totals")

Settings, not code

The column names of each shop live in settings.ini, so a new shop or a renamed column is a line there:

[columns]
date = Date, Sale date, Day
product = Product, Item, Name
quantity = Qty, Quantity, Pcs
price = Price, Unit price

A part of the code

def read_shop_file(path: Path, columns: dict[str, list[str]]) -> pd.DataFrame:
    """Reads one shop's file and gives it the report's column names."""
    table = pd.read_excel(path) if path.suffix == ".xlsx" else pd.read_csv(path, encoding="utf-8-sig")
    renamed = {}
    for name, variants in columns.items():
        found = next((c for c in table.columns if c.strip() in variants), None)
        if found is None:
            raise ReportError(f"{path.name}: no column for '{name}' (looked for {', '.join(variants)})")
        renamed[found] = name
    table = table.rename(columns=renamed)[list(columns)]
    table["shop"] = path.stem
    return table

Files: a ZIP archive with merge_sales.py (310 lines), settings.ini, requirements.txt and a README with installing Python, running the script and what each message in the log means. The client runs it on their own computer.

Client: a small chain of 9 stationery shops; each shop sends its sales for the month as a CSV or Excel file, with slightly different column names. Task: one script that reads every file in a folder, brings the columns to one shape, and writes a single Excel report with all sales and a sheet of totals by shop.

Müşteri ve tüm ayrıntılar kurgusaldır.

Bu hizmet hakkında

Düzenli kopyası olmayan bir veritabanı, siparişleri, yazıları ya da müşteri kayıtlarını kaybetmekten tek bir hatalı güncelleme ya da dolan bir disk kadar uzaktadır. Sunucunuza hangisi uyuyorsa Bash ya da Python ile yazılan bu betik, MySQL, MariaDB ya da PostgreSQL veritabanınızın onunla birlikte gelen araçlarla (mysqldump ya da pg_dump) tam bir dökümünü alır, sıkıştırır, tarihle adlandırır ve yalnızca kurallarınızın söylediği kopyaları tutar, örneğin 7 günlük, 4 haftalık ve 6 aylık; daha eskileri yalnızca bu kurallara göre kaldırılır. Veritabanı parolası sunucunuzda doldurduğunuz standart seçenek dosyasına (.my.cnf ya da .pgpass) girer, asla koda girmez. Kendi sunucunuza kurar ve çalıştırırsınız; ona asla giriş yapmayız. Önce bir deneme kopyasında deneyin ve çalıştığından emin olmak için bir yedeği deneme veritabanına geri yükleyin.

Neler dahil

  • Neler alırsınızBetiği, adım adım talimatlar içeren bir README dosyasını ve Standart paketten itibaren veritabanlarını, klasörleri ve kaç kopya tutulacağını içeren bir ayar dosyasını barındıran bir ZIP arşivi; kod sipariş sayfasında da gösterilir.
  • Standart araçlarmysqldump ya da pg_dump, kurulacak sıra dışı bir şey yok
  • Kurallarınıza göre rotasyonEski kopyalar yalnızca belirlediğiniz şekilde kaldırılır
  • Parola kodun dışındaSunucunuzda .my.cnf ya da .pgpass içinde
  • Hatalar fark edilirStandart paketten itibaren başarısız ya da boş bir döküm log'a yazılır ve kopya sayılmaz
  • Okunabilir kodYorumlarla; sonradan veritabanı eklemek kolay

Nasıl çalışır

  1. 1
    GörevSunucuyu, veritabanlarını ve kaç kopya tutulacağını anlatırsınız
  2. 2
    KodBetiği ve kurulum kılavuzunu yazarız
  3. 3
    DeneyinBir deneme kopyasında çalıştırır ve bir yedeği deneme veritabanına geri yüklersiniz
  4. 4
    DeğişikliklerPaketiniz kapsamında değişiklik ister, varsa hata mesajını gönderirsiniz

Sizden neler gerekiyor

Veritabanı (MySQL, MariaDB ya da PostgreSQL) ve sürümü, sunucunun sistemi (örneğin Ubuntu 22.04) ve orada paket kurup kuramayacağınız, veritabanının ne kadar büyük olduğu, kopyaların nerede saklanacağı ve ne kadar yer olduğu. Rotasyon kurallarınız: kaç günlük, haftalık ve aylık kopya tutulacağı. Premium için kopyaların ikinci yeri ve hata e-postaları için adres. Asla parola ya da sunucu erişimi göndermeyin.

Size soracaklarımız:

  • Hangi veritabanı ve ne kadar büyük?
  • Hangi sunucuda?
  • Kaç kopya tutulmalı?
  • Kopyalar nereye gitmeli?
  • Bash mı, Python mı?

Paketleri karşılaştırın

PaketlerTemelTek veritabanı$16StandartAyarlı yedekleme$33PremiumYedekleme aracı$67
Teslim süresi1 gün2 gün3 gün
Revizyonlar123
Koden fazla 150 satıren fazla 400 satıren fazla 1.000 satır
Kod dosyası1en fazla 3en fazla 8
Ayar dosyasıHayırEvetEvet
Anlaşılır hata mesajları ve logHayırEvetEvet
Çalıştırma seçenekleri ve zamanlanmış çalıştırma kılavuzuHayırHayırEvet
Kurulum ve çalıştırma kılavuzu (README)EvetEvetEvet
DilBash ya da PythonBash ya da PythonBash ya da Python
Sipariş ver TemelSipariş ver StandartSipariş ver Premium

Ödeme koruması

Sipariş verirken ödersiniz, ancak para yalnızca onaylanan iş için aktarılır.

  • Sabit fiyatPaket fiyatı, ödeme yaptıktan sonra değişmez.
  • Para bloke edilirÖdeme yaptığınızda tutar yalnızca bloke edilir. İşi onayladığınızda hizmete aktarılır.
  • Teslimattan önce kontrolHer sonuç size ulaşmadan önce kalite kontrolünden geçer ve onaylamadan önce sipariş sayfasında görürsünüz.
  • Ücretsiz revizyonlarBrifiniz kapsamında, paketin izin verdiği sayıda değişiklik isteyin.
  • 3 gün sonra onayTeslimattan sonraki 3 gün içinde işi onaylamaz veya değişiklik istemezseniz iş otomatik olarak onaylanır. Teslimattan sonra sipariş sohbetine yazarsanız sipariş bekletilir; yanıt verdikten sonra 3 günlük süreyi yeniden başlatabiliriz ve bunu sohbette bildiririz.
  • Yeniden yapım veya tam iadeSonuç brifinize uymuyorsa ve revizyonlar sorunu çözmediyse ya da iş teslim süresinin iki katından uzun sürerse sipariş sohbetine yazın: işi yeniden yaparız veya ödemenin tamamını iade ederiz.
Nasıl çalışır →

Sorular ve yanıtlar

Eski yedekleri silecek mi?

Yalnızca verdiğiniz kurallara göre, örneğin 7 günlük ve 4 haftalık kopya tutmak, ve yalnızca yazdığı yedek klasöründe. Kuralları belirleyene kadar her şeyi tutar.

Kopyaları sunucu dışında tutabilir miyim?

Premium her yedeği ikinci bir diske ya da zaten sahip olduğunuz bir depolama alanına, onun kendi komut satırı aracıyla ve ayarlarına kendinizin girdiği kendi anahtarlarınızla kopyalar.

Çalışırken siteyi kilitler mi?

MySQL'deki InnoDB tabloları ve PostgreSQL için döküm siteyi durdurmadan alınır. Çok büyük veritabanları yine de onu yavaşlatabilir, bu yüzden sakin bir saatte çalıştırın.

Sunucuma siz mi kuracaksınız?

Hayır. Sunucunuza asla giriş yapmayız. README, betiği kopyalamaktan cron'a eklemeye (Premium) kadar her adımı gösterir.

Yanıtınızı bulamadınız mı?

Paketler