Laravel projelerinde SQLite veritabanınızı otomatik yedeklemek için Artisan komutu, günlük zamanlama ve opsiyonel bildirim entegrasyonu ile pratik bir çözüm örneği.
Laravel'in default olarak SQLite database ile gelmesi ve Aaron Francis’in High Performance SQLite eğitimleri ile YouTube videolarından sonra, SQLite'a bir şans verdim ve projelerime başlarken SQLite kullanmaya alıştım.
Ufak bir not: SQLite yabana atılacak bir veritabanı değil. Gerçekten büyük production sistemlerinde aktif rol oynuyor ve oldukça performanslı çalışıyor. Buna örnek olarak, Nuno Maduro tarafından geliştirilen ve daha sonra açık kaynak olarak yayınlanan Pinkary projesi gösterilebilir. Pinkary, Twitter benzeri bir sosyal medya platformu ve tamamen SQLite üzerinde çalışıyor. İlgili kaynak: Pinkary GitHub Repository Hatta bu proje, yazının ilerleyen kısmında anlatacağım backup sistemine benzer bir yapı da içeriyor: PerformDatabaseBackupCommand.php
Özellikle ufak ve yan projelerimde SQLite tercih ediyorum. Doğal olarak bazı backup yöntemlerini araştırmam gerekti. SQLite dosya tabanlı bir veritabanı olduğu için teoride sadece dosyayı kopyalamak yeterli olur.
Fakat transaction anlarında data bozulması ihtimali beni endişelendiriyordu. Araştırmalarımda, bu durumun kullanılan database modlarına göre farklılık gösterebildiğini fark ettim. Asıl mesele ise veritabanı büyüdükçe kopyalama sürelerinin artmasıydı.
Derken SQLite’ın backup için kullanılan küçük ama etkili bir komutunu keşfettim 👇
VACUUM INTO 'dizin/sql_yedek.sqlite';
Bu kadar basit bir senaryoyla data bozulmadan backup alınabiliyor. Detaylı bilgi için: SQLite Vacuum.
Yukarıdaki notuma istinaden: Buradaki kaygılarım, aslında Pinkary örneğinde görüldüğü gibi, dosya bazlı yedekleme ile de gayet başarılı şekilde aşılabiliyormuş. Dolayısıyla benim ufak/yan projelerde SQLite kullanma sebebim “yetersizlik” değil, daha çok alışma–tanışma–kaynaşma süreci.
O halde bu komutu Laravel ile birleştirip, üzerine bir zamanlayıcı eklersek (Laravel’de bu gerçekten çok kolay), problemsiz bir backup sistemi kurabiliriz. Şimdi adım adım bakalım 👇
Öncelikle bir artisan command oluşturalım:
php artisan make:command DbBackupCommand
👉 Laravel Docs: Generating Commands
Bu komut ile App\Console\Commands klasörü içinde DbBackupCommand.php dosyamız oluşacak.
Dosya içindeki handle() metodunu şu şekilde güncelliyoruz:
public function handle(): void
{
$backupPath = Storage::disk("db_backup")
->path('database_' . now()->timezone('Europe/Istanbul')->format('Y-m-d_H-i-s') . ".sqlite");
DB::connection()->getPdo()->exec("VACUUM INTO '$backupPath'");
$this->info("Backup oluşturuldu: $backupPath");
}
config/filesystems.php dosyasına yeni bir disk ekliyoruz:
'db_backup' => [
'driver' => 'local',
'root' => storage_path('app/private/backups/database'),
'visibility' => 'private',
'throw' => false,
'report' => false,
],
Burada önemli olan kısım root ayarı.
Backup’lar şu dizine kaydedilecek:
projeniz/storage/app/private/backups/database
Artık terminalde şu komutu çalıştırabilirsiniz:
php artisan db:backup
Sonuç: Ayarladığınız dizine otomatik backup alınmış olacak. ✅
routes/console.php dosyasına gidin ve şunu ekleyin:
Schedule::command('db:backup')->hourly();
Bu sayede her saat başında otomatik backup alınacak. Farklı zamanlamalar için Task Scheduling Docs sayfasına bakabilirsiniz.
Arka planda zamanlayıcıyı çalıştırmak için:
php artisan schedule:work
Eğer bu şekilde bırakırsak günde 24 backup, haftada 168 backup oluşacak. Diskin dolmaması için eski backup’ları silmek gerekiyor.
DbBackupCommand.php dosyasında handle() metodunu şu şekilde güncelleyin:
public function handle(): void
{
$backupPath = Storage::disk("db_backup")
->path('database_' . now()->timezone('Europe/Istanbul')->format('Y-m-d_H-i-s') . ".sqlite");
DB::connection()->getPdo()->exec("VACUUM INTO '$backupPath'");
$this->info("Backup created: $backupPath");
// Eski backup'ları sil
collect(Storage::disk("db_backup")->listContents(".", true))->each(
function ($file) {
if (
$file["type"] === "file" &&
$file["lastModified"] <
now()->timezone('Europe/Istanbul')->subDay()->getTimestamp()
) {
Storage::disk("db_backup")->delete($file["path"]);
$this->warn("Deleted file: {$file['path']}");
}
}
);
}
Burada Laravel’in collect() helper’ını kullandık.
Tüm dosyaları listeliyor ve lastModified tarihine bakıyoruz.
Eğer dosya 24 saatten eskiyse otomatik olarak siliyoruz.
Son olarak, backup alındığında kullanıcıya bildirim göndermek için routes/console.php dosyasında ufak bir ekleme yapabilirsiniz:
->onSuccess(function () {
\App\Models\User::first()
->notify(new BackupSuccessNotification());
})
Ayrıca hata durumlarında farklı bildirimler de tanımlayabilirsiniz. 👉 Laravel Task Hooks
Artık elimizde:
var. 🎉
Bu yapı sayesinde SQLite kullanan projelerinizde disk dostu, otomatik ve güvenli backup sistemi kurabilirsiniz.
Fullstack Web Developper & Laravel Dev & SysAdmin
Bu paket, kullanılan SQL sorgularını izleyip önbellekte anahtar olarak kullanabilme yeteneğine sahiptir. Bu sayede, sorguya özel önbellekleme oldukça kolay hale gelir ve ORM kullanımınızdan bağımsız çalışır.
Laravel’de HTTP Basic Auth ile veritabanı olmadan bile saniyeler içinde admin paneli, test sayfası veya küçük API uçlarını şifre ile korumanın pratik yollarını bu yazımızda inceledik
Laravel projelerinde SQLite veritabanınızı otomatik yedeklemek için Artisan komutu, günlük zamanlama ve opsiyonel bildirim entegrasyonu ile pratik bir çözüm örneği.
Tailwindcss ve Laravel Blade Componentları ile SAP Tablo ve Ana veri Ekran Tasarımları
Bir array yapısı içinde anahtar ile değerin yerini değiştirmek için kulanabileceğiniz çok basit bir yapı collection flip() metodu.
Bu paket, kullanılan SQL sorgularını izleyip önbellekte anahtar olarak kullanabilme yeteneğine sahiptir. Bu sayede, sorguya özel önbellekleme oldukça kolay hale gelir ve ORM kullanımınızdan bağımsız çalışır.
Laravel projenizi yayına almak için Nginx kurulumu, PHP sürüm ayarları veya SSL yapılandırmasıyla uğraşmak zorunda değilsiniz. LaraSail, tüm bu teknik süreçleri otomatikleştirerek deploy işlemini oldukça basit hale getirir.
Kurumsal işletmeler için geliştirilen SAP entegre mesai ve izin takip sistemi, hem üretim hem idari alanlarda süreçleri dijitalleştiriyor. Anlık raporlama, mobil uyumlu kullanım, resmi belge ve imza yönetimi, gelişmiş filtreleme ve PKDS entegrasyonu ile insan kaynakları yönetimini hızlandırıyor ve şeffaflaştırıyor.
Talaşlı imalat süreçlerinde kesici elmasların hangi personel, hangi departman ve hangi proje için ne kadar tüketildiğini anlık olarak izlemek artık mümkün. SAP Business One üzerine geliştirdiğimiz Elmas Analiz ekranı; stok optimizasyonu, maliyet kontrolü ve proje bazlı raporlama ihtiyaçlarını tek bir ekranda birleştirerek üretim sahasında şeffaflık ve hız sağlıyor.
SAP Business One üzerinde geliştirdiğimiz onaylı tedarikçi yönetim sistemi; kalite, teslimat, fiyat ve miktar kriterlerini ağırlıklı skor kartı ile izleyerek ISO 9001:2015’in 8.4 maddesine tam uyum sağlıyor. Bu yazıda tedarikçi performansını puanlayan ekranlar, raporlama araçları ve denetime hazır süreçlerin nasıl kurulduğunu detaylı olarak inceleyebilirsiniz.