डेटाबेस कॉन्फ़िगरेशन
डेटाबेस से कनेक्शन को परिभाषित करने का मुख्य साधन settings.php में मौजूद $database ऐरे है। नाम से ही स्पष्ट है कि $database आपको कई डेटाबेस कनेक्शन परिभाषित करने की अनुमति देता है। यह कई targets को परिभाषित करने का भी समर्थन करता है। डेटाबेस कनेक्शन तब तक नहीं खोला जाता (कनेक्शन ऑब्जेक्ट तब तक नहीं बनता) जब तक पहला कोड स्निपेट उस डेटाबेस पर क्वेरी चलाने की कोशिश नहीं करता।
कनेक्शन कुंजी
$databases['default'] // डेटाबेस कनेक्शन।
कनेक्शन कुंजी – यह डेटाबेस कनेक्शन के लिए यूनिक आइडेंटिफ़ायर है। प्रत्येक साइट के लिए कनेक्शन कुंजी यूनिक होनी चाहिए, और हमेशा एक डिफ़ॉल्ट कनेक्शन होना चाहिए, जो Drupal का मुख्य डेटाबेस होगा। अधिकांश साइटों पर यह एकमात्र परिभाषित कनेक्शन होगा।
Target
$databases['default']['default'] // डेटाबेस target।
हर कनेक्शन कुंजी में एक या अधिक targets होने चाहिए। Target – यह डेटाबेस है, जिसे उपलब्ध होने पर उपयोग किया जा सकता है। प्रत्येक कनेक्शन कुंजी के लिए "default" target हमेशा परिभाषित होना चाहिए। यदि अनुरोधित target परिभाषित नहीं है, तो सिस्टम स्वचालित रूप से "default" मान का उपयोग करेगा।
Targets का मुख्य उपयोग प्राइमरी/रेप्लिका कॉन्फ़िगरेशन में होता है। डिफ़ॉल्ट target मुख्य SQL सर्वर होता है। इसके बाद एक या अधिक "replica" targets परिभाषित किए जा सकते हैं (ध्यान दें कि कुछ स्थितियों में "replica" ही एकमात्र वैध विकल्प होता है, जैसे कि स्टैटिक क्वेरीज़ में)। क्वेरीज़ जो रेप्लिका सर्वर का उपयोग करने की कोशिश करने के लिए चिह्नित होती हैं, वे "replica" target तक पहुँचने का प्रयास करेंगी। यदि उपलब्ध है, तो यह कनेक्शन खोला जाएगा (यदि अभी तक स्थापित नहीं है), और क्वेरी रेप्लिका सर्वर पर चलेगी। यदि नहीं, तो क्वेरी "primary" सर्वर पर चलाई जाएगी। यह एक पारदर्शी fallback प्रदान करता है, ताकि कोड रेप्लिका सर्वर उपलब्ध होने पर उसका लाभ उठा सके, और फिर भी सर्वर न होने पर भी बिना किसी बदलाव के काम करता रहे।
$databases सिंटैक्स
$database ऐरे कम से कम तीन स्तर का नेस्टेड ऐरे होता है। पहला स्तर डेटाबेस कीज़ परिभाषित करता है। दूसरा स्तर डेटाबेस targets परिभाषित करता है। प्रत्येक target का मान उस कनेक्शन की जानकारी है। कुछ उदाहरण इसे स्पष्ट करते हैं:
$databases['default']['default'] = array( 'driver' => 'mysql', 'database' => 'drupaldb', 'username' => 'username', 'password' => 'secret', 'host' => 'localhost', );
ऊपर दिया गया $database ऐरे एक कनेक्शन कुंजी ("default") और एक target ("default") परिभाषित करता है। यह कनेक्शन लोकल होस्ट पर MySQL डेटाबेस (driver = mysql) "drupaldb" से जुड़ता है, यूज़रनेम "username" और पासवर्ड "secret" के साथ। यह उदाहरण Drupal इंस्टॉलेशन का सामान्य मामला है और अधिकांश साइटों के लिए पर्याप्त है।
प्राइमरी/रेप्लिका कॉन्फ़िगरेशन के लिए उदाहरण:
$databases['default']['default'] = array( 'driver' => 'mysql', 'database' => 'drupaldb1', 'username' => 'username', 'password' => 'secret', 'host' => 'dbserver1', ); $databases['default']['replica'][] = array( 'driver' => 'mysql', 'database' => 'drupaldb2', 'username' => 'username', 'password' => 'secret', 'host' => 'dbserver2', ); $databases['default']['replica'][] = array( 'driver' => 'mysql', 'database' => 'drupaldb3', 'username' => 'username', 'password' => 'secret', 'host' => 'dbserver3', );
यह परिभाषा एक "default" सर्वर और दो "replica" सर्वर देती है। ध्यान दें कि "replica" कुंजी एक ऐरे है। यदि कोई target कनेक्शन जानकारी का ऐरे है, तो हर पेज अनुरोध पर परिभाषित सर्वरों में से एक को रैंडमली चुना जाएगा। इसका मतलब है कि एक पेज पर सभी replica क्वेरीज़ dbserver2 पर जा सकती हैं, और अगली बार सभी dbserver3 पर।
$databases['default']['default'] = array( 'driver' => 'mysql', 'database' => 'drupaldb1', 'username' => 'username', 'password' => 'secret', 'host' => 'dbserver1', ); $databases['extra']['default'] = array( 'driver' => 'sqlite', 'database' => 'files/extradb.sqlite', );
यह कॉन्फ़िगरेशन एक मुख्य Drupal डेटाबेस और एक अतिरिक्त डेटाबेस ("extra") परिभाषित करता है, जो SQLite का उपयोग करता है। ध्यान दें कि SQLite कनेक्शन जानकारी MySQL से अलग संरचित होती है। हर driver की अपनी कॉन्फ़िगरेशन हो सकती है।
याद रखें, चाहे आप कितने भी कनेक्शन परिभाषित करें, Drupal तब तक उस डेटाबेस से कनेक्ट नहीं करेगा जब तक उसका वास्तव में उपयोग न किया जाए।
आवश्यक PDO
चूँकि PHP PDO लाइब्रेरी अब Drupal के डेटाबेस लेयर के लिए आवश्यक है, आपको Drupal चलाने के लिए ऐसा होस्टिंग प्लान चाहिए जिसमें यह शामिल हो।
PDO पैरामीटर्स
PDO पैरामीटर्स और ड्राइवर-विशिष्ट PDO पैरामीटर्स को डेटाबेस ऐरे में 'pdo' कुंजी के साथ परिभाषित किया जा सकता है। उदाहरण:
$databases['default']['default'] = array( 'driver' => 'mysql', 'database' => 'drupaldb', 'username' => 'username', 'password' => 'secret', 'host' => 'dbserver1', 'pdo' => array(PDO::ATTR_TIMEOUT => 2.0, PDO::MYSQL_ATTR_COMPRESS => 1), );