PHP / Geçiş / mysqldump zaman aşımı gibi görünüyor

5 Cevap php

Ben MySQL veritabanı yedekleme çalıştırmak için çağrı bir PHP komut dosyası var. Sql dosyaları, TAR / GZIP onları ve onları bana e-posta gönderin. Veritabanının bir web sunucusunu sağlayan olandan farklı bir sağlayıcı tarafından barındırılmaktadır. Herşey Linux / Unix üzerinde barındırılıyor. Ben bu komutu çalıştırdığınızda:

$results = exec("mysqldump -h $dbhost -u $dbuser -p$dbpass $dbname > $backupfile", $output, $retval);

(Bilginize, ben de) ((,) (sistemi ile passthru bu denedim) ve shell_exec ettik.)

Benim tarayıcı 15-20 saniye boyunca sayfasını yükler ve daha sonra işlem yapmadan durur. Ben bir FTP istemcisi ile sunucuya baktığımızda, ben edilen dosya sonra ve veritabanı yedeği kadar sonra dosya boyutu oluşturur birkaç saniye sırıtmak görebilirsiniz. Yani, yedekleme dosyası oluşturulur ancak komut dosyası önce durması sıkıştırılmış ve bana gönderilebilir.

Ben kadar PHP ile max_execution_time değişkeni kontrol ettik ve onu (o kadar uzun durmasına sayfası için gereken daha) 30 saniyeye ayarlanır ve set_time_limit değeri ayarlamak 200 saniye.

Herkes herhangi bir fikir ne oluyor burada var?

5 Cevap

Eğer hosting üzerinde olan veya bu kendi sunucuları? Eski sağlayıcı barındırma maksimum yürütme zamanı 15-20secs ayarlanır ve geçersiz olamaz öyle ayarlamış olabilir varsa (ben 1 & 1 ile bu sorunu ve yazılarında bu tür var).

A phpinfo () çağrısı ile yürütme zamanı ile ilgili parametreleri kontrol yeniden ... belki de bütün Paolo yazıyor ne var.

Ayrıca hareketsizlik belirli bir süre sonra vazgeçerek bir (ters) vekil olabilir. Verilen yine bir ihtimal ama .... deneyin

// test A
$start = time();
sleep(20);
$stop = time();
echo $start, ' ', $stop;

ve

// test B
for($i=0; $i<20; $i++) {
  sleep(1);
  echo time(), "\n";
}

If the first one times out ve the second doesn't I'd call that not proof but evidence.

Maybe the provider has set another resource limit beyond the php.ini setting. Try

<?php passthru('ulimit -a');

Komutu varsa bu, örneğin, kaynaklar ve bunların sınırları bir listesini yazdırmak gerekir

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 4095
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 4095
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Belki de paylaşılan bir sunucuda daha biraz daha kısıtlayıcı ayarları bulabilirsiniz.

  1. Manuel dökümü yapmak ve kırık bir karşı diff. Bu nokta mysqldump durduğu / çöker söyleyebilir
  2. , Mysqldump günlük çıkış düşünün mysqldump ... 2> / tmp / dump.log olarak
  3. Dökümü bitmeden bu kontrol PHP döndürülür böylece müstakil mysqldump yürütme düşünün

Bir yan not olarak, hemen hemen her zaman iyi bir fikir mysqldump-Q