2011-11-17 15 views
8

पर पुनः कनेक्ट करें, मैंने Google को खोजा है लेकिन मुझे लगता है कि मुझे लगता है कि एक आसान quiestion का जवाब नहीं मिल सका।perl dbi डिस्कनेक्ट

मेरे पास एक पर्ल कोड (नीचे उदाहरण) है जो प्रत्येक 3 सेकंड में डेटा प्राप्त करता है और प्राप्त डेटा को MySQL डेटाबेस में अद्यतन करता है लेकिन कभी-कभी mysql डेटाबेस उपलब्ध नहीं होता है और स्क्रिप्ट मर जाती है। अगर यह विफल रहता है तो मैं फिर से MySQL कनेक्शन कैसे बना सकता हूं?

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 ;} 
} 

उत्तर

7

तुम भी इस सूत्र देख सकते हैं: http://www.perlmonks.org/?node_id=317168

इस के साथ समस्या यह "MySQL सर्वर दूर चला गया है" निपटने के लिए जिस तरह से चर्चा करता है, लेकिन कुछ ही जवाब आपकी समस्या का भी लागू होते हैं। mysql_auto_reconnect स्विच के अतिरिक्त, आप वहां अनुशंसाओं का उपयोग कर सकते हैं।

+0

हाय, क्या आप मुझे ऑटो_रेकनेक्ट के उपयोग पर एक पूर्ण उदाहरण के लिए इंगित कर सकते हैं? मैं अभी भी perl पर बहुत नया हूँ, क्या मैं बस नीचे की विशेषता को पास कर सकता हूं? मेरी $ कनेक्ट = DBI-> कनेक्ट ("dbi: mysql: $ डेटाबेस: $ मेजबान", $ उपयोगकर्ता, $ पीडब्लू, {RaiseError => 1, AutoCommit => 1, mysql_auto_reconnect => 1} ); – Linus

+0

हां, यह काम करना चाहिए। आप '$ कनेक्ट' बनाने के बाद थोड़ा सेट भी कर सकते हैं, जैसे '$ कनेक्ट -> {mysql_auto_reconnect} = 1'। हालांकि, इस सुविधा का उपयोग करने से पहले, आपको @Ted द्वारा निर्दिष्ट चेतावनी पर विचार करने की आवश्यकता है। आप 'फास्ट, सुरक्षित डीबीआई कनेक्शन और लेनदेन प्रबंधन' – Unos

+0

@ टेड हॉप शानदार के लिए सीपीएएन में 'डीबीआईएक्स :: कनेक्टर' पर भी एक नज़र डाल सकते हैं .. महान काम करता है .. सभी को धन्यवाद। – Linus

7

DBD::mysql ड्राइवर (कि DBI MySQL डेटाबेस के लिए उपयोग करता है) एक विशेषता mysql_auto_reconnect का समर्थन करता है। इसे चालू करने के लिए, बस पर अमल

$connect->{mysql_auto_reconnect} = 1; 

ध्यान दें कि डॉक्स यह चेतावनी है:

mysql_auto_reconnect स्थापना करता है, तो 'लॉक तालिकाएं' क्योंकि अगर प्रयोग किया जाता है करने के लिए पर सलाह नहीं दी जाती DBD :: mysql पुनः कनेक्ट करने के लिए mysql सभी टेबल ताले खो जाएंगे। AutoCommit बंद होने पर यह विशेषता अनदेखा की जाती है, और जब ऑटोकॉमिट बंद हो जाता है, तो डीबीडी :: mysql स्वचालित रूप से सर्वर से पुनः कनेक्ट नहीं होगा।