कुछ मामलों में यह वांछनीय हो सकता है कि एक MySQL डेटाबेस का नाम जल्दी से बदल दिया जाए। जबकि एक साधारण RENAME DATABASE
मौजूद था MySQL के पुराने संस्करणों में कमांड जिसका उद्देश्य इस कार्य को करना था, RENAME DATABASE
तब से सुरक्षा जोखिमों से बचने के लिए सभी नए संस्करणों से हटा दिया गया है।
इसके बजाय, हम संक्षेप में कुछ वैकल्पिक विधियों का पता लगाएंगे जिनका उपयोग आपके MySQL डेटाबेस का त्वरित और सुरक्षित रूप से नाम बदलने के लिए किया जा सकता है।
डंपिंग और रीइम्पोर्टिंग
अपेक्षाकृत छोटे डेटाबेस के साथ काम करते समय, सबसे तेज़ तरीका आमतौर पर mysqldump
. का उपयोग करना है पूरे डेटाबेस की डंप की गई कॉपी बनाने के लिए शेल कमांड, फिर सभी डेटा को उचित नाम के साथ नए बनाए गए डेटाबेस में आयात करें।
निम्नलिखित mysqldump
जारी करके प्रारंभ करें उपयुक्त username
. के स्थान पर अपने शेल प्रांप्ट से कमांड करें , password
, और oldDbName
मूल्य। mysqldump
डेटाबेस का भौतिक बैकअप बनाने के लिए उपयोग किया जाता है, इसलिए हम इस प्रति का उपयोग डेटा को नए डेटाबेस में वापस आयात करने के लिए कर सकते हैं।
$ mysqldump -u username -p"password" -R oldDbName > oldDbName.sql
हम -p
. का उपयोग कर रहे हैं डेटाबेस से कनेक्ट करने के लिए हमारे पासवर्ड के तुरंत बाद ध्वजांकित करें (बिना स्थान के) और इन आदेशों को जारी करते समय पासवर्ड प्रविष्टि संकेतों से बचें। आसपास के उद्धरणों को छोड़ना सुनिश्चित करें क्योंकि अद्वितीय वर्णों वाले पासवर्ड अन्यथा निष्पादन के मुद्दों का कारण बन सकते हैं। -R
झंडा भी महत्वपूर्ण है और बताता है mysqldump
डेटाबेस से सामान्य डेटा के साथ संग्रहीत कार्यविधियों और कार्यों को कॉपी करने के लिए।
इसके बाद mysqladmin
का उपयोग करें नया डेटाबेस बनाने के लिए कमांड:
$ mysqladmin -u username -p"password" create newDbName
अंत में, बनाए गए नए डेटाबेस के साथ, mysql
. का उपयोग करें डंप फ़ाइल को आयात करने के लिए जिसे हमने नए डेटाबेस में बनाया है।
$ mysql -u username -p"password" newDbName < oldDbName.sql
तीन बुनियादी आदेश और आपका नया डेटाबेस बनाया गया है। एक बार जब आप सत्यापित कर लें कि सब कुछ अपेक्षित है, तो आप पुराने डेटाबेस को हटाने के साथ आगे बढ़ सकते हैं।
InnoDB के साथ टेबल का नाम बदलना
यदि आप MySQL संस्करण 5.5 (या अधिक) का उपयोग कर रहे हैं, तो आप संभवतः InnoDB स्टोरेज इंजन का उपयोग कर रहे हैं, जो डेटाबेस का नाम बदलने का कार्य काफी सरल बनाता है।
संक्षेप में, आप RENAME TABLE
. का उपयोग कर सकते हैं डेटाबेस नाम को प्रभावी ढंग से बदलने के लिए MySQL प्रॉम्प्ट के भीतर कमांड तालिका के नाम को अक्षुण्ण रखते हुए किसी विशेष तालिका का। हालाँकि, ऐसा करने के लिए यह आवश्यक है कि नए नाम वाला डेटाबेस पहले से मौजूद हो, इसलिए mysqladmin
का उपयोग करके एक नया डेटाबेस बनाकर शुरू करें। शेल कमांड जैसा कि ऊपर देखा गया है।
उदाहरण के लिए, यदि हमारे पास पहले से एक catalog
है डेटाबेस जिसका हम नाम बदलना चाहते हैं library
, हम पहले नई library
बनाएंगे डेटाबेस:
$ mysqladmin -u username -p"password" create library
अब mysql
. से कनेक्ट करें निम्नलिखित MySQL RENAME TABLE
को शीघ्र और जारी करें अपनी पसंद की तालिका के लिए विवरण:
mysql> RENAME TABLE catalog.books TO library.books;
हमने अभी-अभी पूरी books
को स्थानांतरित किया है catalog
. से तालिका हमारे नए library
. के लिए डेटाबेस डेटाबेस। यह आदेश सभी प्रासंगिक तालिकाओं के लिए मैन्युअल रूप से वांछित के रूप में निष्पादित किया जा सकता है, या हम नीचे दी गई शेल स्क्रिप्ट के साथ कार्य को सरल बना सकते हैं।
शैल कमांड स्क्रिप्ट का उपयोग करना
सबसे छोटे डेटाबेस को छोड़कर सभी के लिए, मैन्युअल रूप से RENAME TABLE
जारी करना प्रत्येक तालिका के लिए कमांड बहुत व्यावहारिक या कुशल नहीं होंगे, लेकिन शुक्र है कि हम mysql
का उपयोग करके एक साधारण शेल कमांड का उपयोग कर सकते हैं। हमारे पुराने डेटाबेस में सभी तालिकाओं के माध्यम से लूप करने के लिए उपयोगिता और उनका नाम बदलें, इस प्रकार उन्हें नए डेटाबेस में ले जाया जाता है।
यह कमांड की मूल संरचना है:
$ mysql -u dbUsername -p"dbPassword" oldDatabase -sNe 'show tables' | while read table; do mysql -u dbUsername -p"dbPassword" -sNe "RENAME TABLE oldDatabase.$table TO newDatabase.$table"; done
इस प्रकार, पुराने catalog
. से हमारे कदम के लिए नई library
. के लिए डेटाबेस डेटाबेस, हम कथन को इस प्रकार बदलेंगे:
$ mysql -u dbUsername -p"dbPassword" catalog -sNe 'show tables' | while read table; do mysql -u dbUsername -p"dbPassword" -sNe "RENAME TABLE catalog.$table TO library.$table"; done
हमने अपने आदेशों में कुछ झंडे भी जोड़े हैं:
-s
silent mode
. के लिए ध्वज है इसलिए शेल में आउटपुट कम है।-N
परिणामों से कॉलम नामों के आउटपुट को रोकता है।-e
उस कथन को इंगित करता है जो-e
. का अनुसरण करता है झंडा निष्पादित . होना चाहिए फिर खोल छोड़ दिया जाता है। इसका मतलब है स्टेटमेंट'show tables'
और"RENAME TABLE catalog.$table TO library.$table"
वांछित के रूप में सामान्य SQL कथन के रूप में निष्पादित किया जाता है।
यही सब है इसके लिए। आपके MySQL डेटाबेस का अब प्रभावी रूप से नाम बदल दिया गया है।