हम mysqldump फ़ाइल से अलग नाम के साथ mysql डेटाबेस को कैसे पुनर्स्थापित कर सकते हैं। मैं डंप फ़ाइल खोलना और उसे संपादित नहीं करना चाहता। कोई अन्य बेहतर तरीके?
हम mysqldump फ़ाइल से अलग नाम के साथ mysql डेटाबेस को कैसे पुनर्स्थापित कर सकते हैं। मैं डंप फ़ाइल खोलना और उसे संपादित नहीं करना चाहता। कोई अन्य बेहतर तरीके?
जवाबों:
आप mysqldump को इस तरह से डंप बनाने दे सकते हैं कि वह डेटाबेस नहीं बनाता है या चयन नहीं करता है।
उदाहरण: आप डेटाबेस db1 को डंप कर रहे हैं और इसे डेटाबेस db2 में लोड कर रहे हैं
यह डंप में क्रीएट डबस्ट और यूएसई कमांड में डाल दिया जाएगा
mysqldump -u... -p... --routines --triggers --databases db1 > /root/db1.sql
यह ड्रेड में क्रीएट डबस्ट और यूएसई कमांड में नहीं डाला जाएगा ( यह वही है जो आप चाहते हैं )
mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
आप इसे चार (4) तरीकों में से किसी एक डेटाबेस (जैसे db2) में लोड कर सकते हैं:
विकल्प 1
$ mysqldump -u... -p... --routines --triggers db1 | mysql -u... -p... -A -Ddb2
विकल्प 2
$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A -Ddb2 < /root/db1.sql
विकल्प 3
$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A -Ddb2
mysql> source /root/db1.sql
विकल्प 4
$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A
mysql> use db2
mysql> source /root/db1.sql
कोशिश तो करो !!!
ALTER DATABASE ... CHARACTER SET ...
यह है जो मेरे आयात को तोड़ रहा है। संपादित करें: ओरेकल मूल रूप से बग की अनदेखी कर रहा है ।
मैं डंप, एडिट और इंसर्ट का बहुत बड़ा फैन हूं। लेकिन आपको इसे बदलने के लिए पाठ फ़ाइल (डंप फ़ाइल) को खोलने की आवश्यकता नहीं है (यह विशेष रूप से तब उपयोगी होता है जब यह कई मिलन रेखाएं लंबी हों)। यदि आप डेटाबेस को डंप करना चाहते हैं MYDATABASE
।
mysqldump MYDATABASE > mydump.sql
फिर पुराने डेटाबेस नाम को इस तरह से नए के साथ बदलने के लिए sed का उपयोग करें
sed -i 's/MYDATABASE/MYNEWDATABASE/g' mydump.sql
तब आप बस नया डेटाबेस बना सकते हैं और इसे फिर से आयात कर सकते हैं, और यह नए डेटाबाई MYNEWDABA 'के साथ सभी तालिकाओं का निर्माण करेगा।
mysqladmin create MYNEWDATABASE
mysql MYNEWDATABASE < mydump.sql
संपादित करें: जैसे टिप्पणी अनुभाग में कुछ अच्छे लोगों ने इंगित किया है, यह खतरनाक हो सकता है, यदि कुछ डेटा को इसके ऊपर भी बदल दिया जाता है, इसलिए, इससे बचने के तरीकों को बदलना है।
1) डंप में इसे बदलने के लिए, इससे पहले कि आप इसे बदल दें।
cat mydump.sql | grep "MYDATABASE"
तथा
2) हम इसे इस तरह से सुरक्षित बनाने के लिए कुछ `जोड़ सकते हैं:
sed -i 's/`MYDATABASE`/`MYNEWDATABASE`/g' mydump.sql
अगर किसी और के पास ठोस सुझाव हैं, तो मुझे अपने जवाब को एक और 4 वर्षों में संपादित करने में खुशी होगी।
sed -i 's/MYDATABASE/MYNEWDATABASE/g' mydump.sql
) MYDATABASE की सभी घटनाओं की जांच करके cat mydump.sql | grep "MYDATABASE"
सुनिश्चित करें कि केवल डेटाबेस का नाम बदला गया है, अन्य डेटा अछूता नहीं है।
sed -i 's/`MYDATABASE`/`MYNEWDATABASE`/g' mydump.sql
# संभावित सुरक्षित भाप संपादित करें। मेरे डेटाबेस डंप में कोई USE या CREAT DATABASE स्टेटमेंट नहीं है, लेकिन db नाम sql टिप्पणियों, विचारों और ट्रिगर्स (MySQL 5.7) में है। यह टिप्पणियों में डेटाबेस का नाम नहीं बदलता है, लेकिन परिणामस्वरूप डेटाबेस पर उनका कोई प्रभाव नहीं पड़ता है। इसने मेरे लिए अच्छा काम किया।
क्या आप हाथ में है, तो फ़ाइल है और आप एक खोल / कंसोल से यह जोड़ तोड़ कर रहे हैं, मैं का प्रयोग करेंगे sed
के साथ शुरू तर्ज पर स्ट्रिंग प्रतिस्थापन करने के लिए CREATE DABATASE
, CREATE TABLE
, USE
और optionnally --
(mysqldump टिप्पणियाँ)
डेटाबेस बनाएँ, तालिका बनाएँ, उपयोग करें और mysqldump टिप्पणियों से मेल खाता लाइनों पर db नाम को प्रतिस्थापित करना
dbfile="yoursqldumpfile.sql";
dbname="current_db_name";
dbnewname="new_db_name";
dbnewfile="/tmp/$dbnewname.sql";
cat $dbfile | sed "/^CREATE DATABASE/ s=$dbname=$dbnewname=" | sed "/^CREATE TABLE/ s=$dbname=$dbnewname=" | sed "/^USE / s=$dbname=$dbnewname=" | sed "/^-- / s=$dbname=$dbnewname=" > $dbnewfile
बेशक कई जवाबों की तरह यहाँ उल्लेख किया गया है, यह आसान है अगर mysqldump बैकअप में कोई सृजन तिथि और उपयोग रेखा नहीं होती। मतलब विकल्प --all-databases
, --databases
या उनके छोटे संस्करण -A
या -B
उपयोग नहीं किए गए थे।
--no-create-db
बिना भी । --database
--databases
यदि आप निम्नलिखित दो नियमों का उपयोग कर एक डंप करते हैं:
--databases
, --database
और बस सिर्फ इन विकल्पों के बिना आदेश के अंत में डेटाबेस नाम डाल दिया।--no-create-db
यदि आप निम्नलिखित करते हैं तो mysqldump डेटाबेस को संदर्भित किए बिना SQL बनाएगा, तो आप आयात के दौरान अपने mysql कमांड के अंत में नए डेटाबेस नाम का उपयोग कर सकते हैं!
mysqldump --no-create-db old_db_name --single-transaction --compress --order-by-primary --host old_db_host -u old_db_user -pOld_db_password | mysql --host new_host -u new_user -pnewpassword new_db_name
--no-create-db
बिना भी । --database
--databases
यहाँ शेल स्क्रिप्ट है जो आपको मक्खी पर सभी स्कीमा नामों में प्रत्यय / एफिक्स जोड़ने की अनुमति देगा।
-Ddb2
जूझता है, तो उसके सामने एक हाइफ़न नहीं होना चाहिए। जब मैंने इसे शामिल किया, तो कम से कम, मुझे एक MySQL सिंटैक्स त्रुटि मिली।