Problem: PhpMyAdmin ile veri yükleme
Büyük sql dosyalarını veritabanı sunucusuna yüklemek bazen sıkıntılı olabiliyor. Benzer sorunu başkalarının da yaşama ihtimalini düşünerek sorunun çözümü hakkında bilgi vermek istiyorum. Kullandığım hosting firması (site dosyalarını bilgisayarında barındıran firma) MySQL veritabanı sunucusuna doğrudan erişim vermemiş. Yani işlem yapmak için doğrudan veritabanı sunucusuna bağlanamıyorum.Servislere dışarıdan doğrudan erişiminin kapatılması (servisi izin verdiği standart arayüze) sunucu güvenliği açısından çok tercih edilen bir yöntem. Dışarıya nekadar az servis açık olursa güvenlik de o denli yüksek tutulmuş olur.
|
Sorun üzerinde çalıştığım yeni bir projeye (2 aydır bekliyor, yakında hizmete girecek) ait yaklaşık 7 MB lık bir sql dosyasını veritabanı sunucusuna yükleme isteğimle başladı. FTP erişimi dışında işlemleri için sadece PMA’nın () kullanılmasına izin vermiş. Doğrudan MySQL erişimim olsaydı gibi bir programla verileri sunucuya kopyalamayı düşünürdüm ama bu durumda bhunu yapmak mümkün gözükmüyor. php ile yazılmış bir script, her türlü veri girişi ve sorgulama işlerinin yapılabildiğini bir web arayüzüne sahip. Doğal olarak verileri yüklemeyi ilk olarak PMA’nın "SQL sorgusu" paneli ile yapmayı denedim. 7 megabyte’lık metin verisini bir html metin kutusuna yapıştırıp submit etmek nekadar iyi bir fikir tartışılır ama bu iş için başlangıç noktası da burası. Her zaman en basitini deneyerek başlamak en mantıklısı (zaten öğretmenlerimizde herzaman söylemezmiydi sınavlardan önce "bildiğiniz en kolay soruyu yaparak başlayın" diye). Nitekim önceden tahmin ettiğim sonucu aldım. Dosya çok büyük olduğu için gönderme sırasında bağlantı zaman aşımına uğradı. Veri dosyası yüklenemeden bağlantı koptu. Upload hızımın düşük olması (asimetrik bağlantı yüzünden) nedeniyle sunucunun http zaman aşımı sınırına denk geldim. Kim bilir belki PHP nin max upload size değerine takılmışımdır. Bu basit işi fazla uzatmayıp bir an önce halletmek amacıyla sql dosyamı FTP ile PMA’nın upload dizinine yükledim. Böylece bağlantı zaman aşımına neden olmadan PMA nın veri dosyasını sunucu dizininden bir çırpıda okumasını sağlayacaktım. Normalde PMA’nın bu özelliği (yani sunucunun lokal dizininden sql dosyasını yükleme özelliği) pasif olarak geliyor. Aktive etmek için config.inc.php deki UploadDir değerine bir dizin ismi belirtmek gerekli ama yeterli değil. $cfg['UploadDir'] = ‘upload’; Bunu yaptıktan sonra PMA’nın ana dizinininde upload isimli bir dizin açmak gerekli. PMA’nın SQL Sorgusu sekmesinde yükleme dizini listesinin görünmesi için, yükleme dizininde (bu örnekte ‘upload’) bir sql dosyasının var olması gerekiyor. Bu yüzden, ayarları yaptıktan sonra neden özellik aktif olmadı diye düşünmeyin. |
|
|
|
PMA’nın bu bahsettiğim özelliğini "SQL Sorgusu" sayfasının "web sunucu yükleme dizini" adlı kısmındaki açılır listeden dosya ismi seçilerek kullanılıyor. Bu bilgiyi de edindikten sonra tamam başardım derken… Yine olmadı ! Bu sefer de script zaman aşımına denk geldim (Her php programcığının önceden tanımlanmış bir maksimum çalışma süresi vardır. Yani bir döngü açarak veya uzun bir iş vererek bir script’i 1 saat boyunca çalıştıramazsınız. Ve böyle olması da çoğu durumda iyi bir özelliktir (burada olmasa da. Bu güvenlik ayarı php.ini dosyasında time_limit ile yer alır). Dosya o kadar büyüktüki php yorumlayıcının dosyanın tamamını okuyup veritabanına yazması maksimum çalışma zamanı değerini aşıyordu. Zaman aşılınca da veri yüklenemeden scriptin çalışması sonlandırılıyordu. İlkönce aklıma ile maksimum çalışma değerine artırmak geldi ama sonradan hatırladımki php da çalışıyordu. (safe_mod’da çalışan bir php ye bu tür direktifleri veremezsiniz) Murphy ne güzel yazmış: Bir işin ters gitme olasılığı varsa, ters gider. Çünkü işlerin ters gitmesi için düz gitmesinden daha çok neden vardır. Sonunda anladım ki veri dosyasını parçalara ayırıp daha küçük dosyalar haline getirmek gerekiyor. Örneğin 10 paraçaya ayırırsam 700KB lık dosyalarla problem yaşama olasılığım daha az. Sonuç olarak 10 parçaya ayırdım ve FTP ile upload dizinine yükledim, PMA aracılığıyla da teker teker veri tabanına başarıyla yükleyebildim. Mutlu son. :) Parçalama işini de ufak bir program (~174KB) yazarak hallettim. Program belki işinize yarayabilir. Değiştirmek isterseniz delpi kaynak kodları da arşiv içinde mevcut. Sıradan bir iş gibi gözüken bu yükleme işlemi bu sayfanın hazırlanmasını da sayarsam yaklaşık 4 saatimi aldı. Dosya boyutu uygun olsaydı bir kaç dakika da bitecekti. |
|
|
|
Şimdi, bu sorunu yaşadıktan sonra başkaları nasıl hallediyor diye düşünmeden edemiyorum. Üçüncü parti programlar (, ) için bir tür php – mysql gateway olmalı diye düşünüyorum. Yoksa PMA kullanmak ve burada olduğu gibi veri yükleme işleri gereğinden fazla zahmet verici. Yazan: Tankado |
phpmyadmin sql yukleme (4), phpmyadmin max upload size (4), phpmyadmin dosya atmak (3), yüksek sql yükleme (2), phpmyadmin max upload değ (2), phpmyadmin zamanaşımı (2), \phpmyadmin örnekleri\ (1), phpmyadminde tabloya veri kayıt boyutunu artırma (1), phpmyadmin zaman aşımı ayarı (1), phpmyadmin yükleme boyutu (1), phpmyadmin tabloyu etkisiz hale getirme (1), phpmyadmin sql yüklemek (1), phpmyadmine veri girme (1), pma arayüz kullanımı (1), pma sql boyut sorunu (1)
Turkish
English
Chinese

SSH ile daha rahat yaparsınız
Delphi yerine nasil yapilabilirdi, cok basit…
sql dosyasi upload edilirdi. Basit bir php programcigi yazilirdi, bu programcik her calismada bir database ya da table ile islem yapar sonra kaldigi yeri bir kenara not ederek sonlanirdi. Sonraki calismada sql dosyasinda kaldigi veritabani ya da tabloyu bulur oradan devam ederdi.
Yazilacak php programcigi basit bir sekilde fopen ile dosyayi acip mysql_query ile veritabanina gonderecek.
Zor degil, hicbir ozel program veya yetenek gerektirmiyor :)
Delphi ile ugrasmaktan ve tek tek pma’ya upload etmekten iyidir.
Kolay gelsin.
Merhaba, link için teşekkür ederim. Henüz denemedim, en kısa zamanda deneyeceğim. FTP ile gönderdiğimde script zaman aşımına uğramıştı. Kodları incelediğim kadarıyla yükleme işi birden fazla oturumda (3000 satırlık bloklar) gerçekleştiriliyor.
Saygılar.
http://www.ozerov.de/bigdump.php
bu küçük scripti kullanarak daha basit yapabilirdiniz.
+ gzip leyedebilirdiniz. 7mb rahat 2 mb’ta düşerdi…
cok tesekkur ederim.
ince bir davranıs, Allah emeğinizi boşa cıkarmasın.