SQLite, hafif yapısı sayesinde küçük projeler için ideal bir veritabanı çözümüdür. Fakat proje kapsamı genişledikçe, özellikle VDS sunucular gibi güçlü sunucularda barındırılan sistemlerde MySQL’e geçiş ihtiyacı ortaya çıkar. MySQL, çok kullanıcılı ve ölçeklenebilir mimarisiyle daha büyük projelere uyum sağlar. Bu rehberde, SQLite veritabanını MySQL’e dönüştürmenin en etkili yöntemlerini, dikkat edilmesi gereken noktaları ve veri bütünlüğünü korumanın yollarını ele alıyoruz.
SQLite ve MySQL Arasındaki Temel Farklar
SQLite, verileri tek bir .db dosyasında tutan, dosya tabanlı bir veritabanı çözümüdür. Uygulamalar bu dosyaya doğrudan erişerek okuma-yazma işlemlerini gerçekleştirir.
MySQL ise istemci-sunucu tabanlı bir mimaride çalışır ve bağımsız bir servis olarak ağ üzerinden birden fazla istemciye hizmet verir. Bu yapı, özellikle cPanel MySQL ortamlarında web tabanlı yönetimi kolaylaştırır. Ayrıca veri türü yönetiminde farklar bulunur: SQLite esnek tipleme yaklaşımıyla veri tiplerini dinamik biçimde işlerken, MySQL daha katı bir veri tipi uyumluluğu gerektirir.
Ön Hazırlık İçin Gerekenler
Veritabanı geçişine başlamadan önce SQLite dosyasının sağlıklı çalıştığından emin olmak gerekir. Bu doğrulama adımı, veri aktarımı sırasında oluşabilecek kayıpların önüne geçer.
Bütünlük Testi (Integrity Check)
Aşağıdaki komut, SQLite veritabanında yapısal bir hata veya tutarsızlık olup olmadığını kontrol eder.
PRAGMA integrity_check
Yedekleme oluşturma
Bu işlem, veri kaybı riskini ortadan kaldırır. Sonrasında, hedef MySQL sunucusunda yeni bir veritabanı oluşturulmalıdır.
sqlite3 proje.db .backup proje_backup.db
SQLite’ten MySQL’e Veri Taşıma Seçenekleri
SQLite’den MySQL’e geçişte hem komut satırı hem de MySQL Workbench aracı kullanılabilir. Komut satırı, işlemleri manuel biçimde yönetmek isteyenlere tam kontrol sağlar. Workbench’in Göç Sihirbazı ise görsel yönlendirmelerle veri aktarımını daha kolay ve hızlı hale getirir.
MySQL Workbench ile Geçiş
MySQL Workbench, MySQL’in resmi yönetim aracıdır ve içinde yer alan Database Migration Wizard modülü, SQLite veritabanlarını MySQL’e taşımayı kolaylaştırır.
Sihirbazı Başlatalım
Workbench arayüzünde “Database Migration” sekmesine girdikten sonra Source olarak “SQLite” seçelim ve .db dosyanızı gösterelim.

Hedef Tanımlama
Hedef olarak MySQL bağlantı bilgilerimizi girelim. Genellikle TCP/IP yöntemi ve port 3306 kullanılır Kullanıcı adı, parola ve veritabanı adı doğru tanımlandıktan sonra bağlantıyı test edip ilerleyelim.
Şema ve Nesne Seçimi
Workbench, SQLite yapısını analiz eder ve tabloları listeler. Burada yalnızca taşınmasını istediğiniz tabloları seçebilir veya tüm şemayı kopyalayabilirsiniz.

Aktarım Seçenekleri
Sihirbaz, iki yöntem sunar
- Doğrudan Aktarım (Online Migration): Tablolar ve veriler doğrudan MySQL sunucusuna yazılır.
- SQL Dosyası Üretimi (Offline Migration): Tüm veritabanı yapısı ve içerik
.sqldosyasına aktarılır.
Veri Kopyalama
Workbench, her tabloyu hedef MySQL yapısında yeniden oluşturur ve satırları aktarır.
“Truncate target tables” seçeneği işaretliyse mevcut tablolar sıfırlanır, bu nedenle dikkatli kullanılmalıdır.

Aktarım tamamlandığında Workbench bir rapor oluşturur. Her tablo için işlem süresi, satır sayısı ve hata durumu listelenir.
Komut Satırıyla Manuel Taşıma
Daha ileri düzey kullanıcılar, komut satırı üzerinden manuel bir dönüşüm gerçekleştirebilir.
Bu yöntem özellikle büyük dosyalar veya otomasyon senaryoları için uygundur.
SQLite Dump Oluşturma
sqlite3 proje.db .dump > export.sql
Bu komut, tablo yapısını ve verileri SQL komutlarına dönüştürür.
SQL Dosyasını MySQL Formatına Uyarlama
SQLite ile MySQL arasında küçük sözdizimi farkları vardır.
AUTOINCREMENTyerineAUTO_INCREMENTkullanılmalıdır.INTEGER PRIMARY KEYMySQL’de yalnızca bir tablo başına tek olabilir.PRAGMAkomutları tamamen kaldırılmalıdır.
MySQL’e Aktarma
mysql -u root -p yeni_veritabani < export.sql
Bu komut, veritabanı yapısını ve verileri doğrudan MySQL’e taşır.
Taşıma sonrasında ANALYZE TABLE ve OPTIMIZE TABLE komutlarıyla performans istatistikleri güncellenmelidir.
Sık Sorulan Sorular
FOREIGN KEY kısıtlamaları neden taşınmıyor?
SQLite varsayılan olarak foreign key kontrolünü devre dışı bırakır. Bu nedenle PRAGMA foreign_keys=ON; komutu çalıştırılmadan oluşturulan ilişkiler, dump dosyasında yer almaz.
MySQL tarafında ise foreign key aktif olarak kullanıldığı için taşıma sonrası tablo ilişkilerinin manuel olarak yeniden oluşturulması gerekebilir.
UTF-8 karakterler MySQL’de bozuluyorsa sebebi nedir?
SQLite verileri UTF-8 formatında saklarken, MySQL genellikle latin1 karakter seti kullanır. Sorunu çözmek için MySQL veritabanını utf8mb4_general_ci olarak oluşturup import sırasında aşağıdaki parametreyi ekleyin.
--default-character-set=utf8mb4
Alternatif olarak, dosyayı Notepad üzerinden UTF-8 olarak kaydedip tekrar içe aktarabilirsiniz.

SQLite’ta olmayan index yapısı MySQL’de nasıl optimize edilir?
SQLite genellikle otomatik indeksleme yapmaz ve sorgular full scan yöntemiyle yürür. MySQL’e geçtikten sonra EXPLAIN komutuyla sorgu planı incelenmeli ve sık kullanılan sütunlara INDEX eklenmelidir.
SQLite’tan MySQL’e geçişte en güvenli yöntem hangisidir?
Küçük projeler için MySQL Workbench Migration Wizard en güvenli ve kolay seçenektir. Ancak büyük veya otomasyon gerektiren sistemlerde sqlite3 .dump + mysqlimport kombinasyonu, hız ve esneklik açısından daha profesyonel bir çözümdür.