2011-11-17 28 views
8

google'um var ama ne düşündüğümün cevabını bulamadım kolay bir soru.perl dbi bağlantısını kesip ayırın

Her 3 saniyede bir veri alan ve alınan verileri Mysql veritabanına güncelleştiren ancak bazen mysql veritabanı kullanılamıyor ve komut dosyası kaldığında perl kodu (örneğin aşağıda) var. Eğer başarısız olursa mysql bağlantısını nasıl tekrar yapabilirim?

use DBD::Mysql; 

sub updateMysqlDB{ 
my $connect = DBI->connect("dbi:mysql:$database:$host", 
         $user, 
         $pw, 
         {RaiseError => 1} 
         ); 
$myquery = "My sql query to insrt data into columns"; 
$query_handle=$connect->prepare($myquery); 
$query_handle->execute(); 
$connect->disconnect; 
} 

while (1) { 

if data received call updateMysqlDB(); 

else wait for data { sleep 3 ;} 
} 

cevap

7

Ayrıca bu parçacığı bakabilirsiniz: http://www.perlmonks.org/?node_id=317168

Bu "MySQL server has gone away" sorunu ile başa çıkmak için bir yol anlatılır, ama birkaç cevap çok sorununuza geçerlidir. Buradaki önerileri, mysql_auto_reconnect anahtarına ek olarak kullanabilirsiniz.

+0

Merhaba, lütfen Auto_reconnect'in kullanımıyla ilgili tam bir örneğe işaret edebilir misiniz? Ben hala perl'de oldukça yeniyim, aşağıdaki gibi sadece özniteliği geçebilir miyim? ": Mysql: $ veritabanı: $ konak dbi", $ kullanıcıyı, $ pw {RaiseError => 1, AutoCommit => 1, mysql_auto_reconnect => 1} benim $ bağlamak = DBI-> (bağlamak); – Linus

+0

Evet, işe yarayacak. Ayrıca, $ connect -> {mysql_auto_reconnect} = 1' gibi '$ connect' oluşturduktan sonra da biti ayarlayabilirsiniz. Ancak, bu özelliği kullanmadan önce @Ted ile belirtilen uyarıyı dikkate almanız gerekir. Ayrıca, "Hızlı, güvenli DBI bağlantısı ve işlem yönetimi" – Unos

+0

@Ted Hopp fantastik .. için mükemmel bir şekilde çalışıyor. Herkese teşekkürler. – Linus

7

DBD::mysql sürücüsü (DBI MySQL veritabanı için kullandığı) bir özellik mysql_auto_reconnect destekler. Sadece belgeler bu uyarıyı sahip olduğunu

$connect->{mysql_auto_reconnect} = 1; 

Not yürütmek, Bu özelliği açmak için: 'kilit masaları' çünkü eğer kullanılırsa mysql_auto_reconnect Ayar

üzerinde tavsiye edilmez için DBD :: MySQL yeniden bağlanma için mysql tüm masa kilitleri kaybolacak. AutoCommit kapatıldığında bu özellik yok sayılır ve AutoCommit kapatıldığında, DBD :: mysql otomatik olarak sunucuya yeniden bağlanmayacaktır.