डेटाबेस को गिराए बिना MySQL डेटाबेस में सभी तालिकाओं को कैसे छोड़ें?


12

मुझे पहले से उनके नाम को जाने बिना एक डेटाबेस में सभी तालिकाओं को छोड़ने की आवश्यकता है। विशिष्ट प्रक्रिया को गिराना और फिर डेटाबेस को फिर से बनाना है लेकिन यह एक विकल्प नहीं है। यह करने के लिए सबसे अच्छा तरीका क्या है?


1
शायद पहले से यह पूछा जाना चाहिए था, लेकिन कभी नहीं की तुलना में बेहतर मुझे लगता है: क्या ओएस?
जेफ स्नाइडर

ओएस की तरह यूनिक्स / लिनक्स।
एंजल चियांग

जवाबों:


18

Mysqldump ( Thingy Ma Jig Blog से ) का उपयोग करके एक सरल बैश वन-लाइनर है ।

mysqldump -u[USERNAME] -p[PASSWORD] --add-drop-table --no-data [DATABASE] | grep ^DROP | mysql -u[USERNAME] -p[PASSWORD] [DATABASE]

यदि आपको यह त्रुटि मिल रही है:

ERROR 1217 (23000) at line 1: Cannot delete or update a parent row: 
    a foreign key constraint fails

निम्नलिखित का प्रयास करें:

(echo 'SET foreign_key_checks = 0;'; 
 (mysqldump -u[USERNAME] -p[PASSWORD] --add-drop-table --no-data [DATABASE] | 
     grep ^DROP); 
 echo 'SET foreign_key_checks = 1;') | \
    mysql -u[USERNAME] -p[PASSWORD] -b [DATABASE]

अब यह बाधाओं की अनदेखी करता है।


5

आपको डेटाबेस के बारे में मेटाडेटा लाने के लिए information_schema तालिकाओं का उपयोग करना चाहिए , और फिर वहाँ सूचीबद्ध तालिकाओं को छोड़ देना चाहिए।


3

आप इसे करने के लिए एक त्वरित शेल स्क्रिप्ट आज़मा सकते हैं:

#!/bin/bash

IFS=$'\n'
for table in `mysql <databaseName> -N -e 'show tables'`; do
    echo mysql <databaseName> -e "drop table $table"
done

echoआपके द्वारा जाँच के बाद निकालें कि यह वह करने जा रहा है जिसकी आप अपेक्षा करते हैं।


वैसे, आप IFS के मूल्य से पहले '$' क्यों लिखते हैं? यह "IFS = '\ n'" की तरह क्यों नहीं दिखता है?
kolypto

@o_OTync बैकल का उपयोग करके $''उन्हें शाब्दिक रूप से लेने के बजाय बैकस्लेस्ड अनुक्रमों की व्याख्या करने का कारण बनता है। '\n'वास्तव में \ n सम्‍मिलित होगा, ठीक उसी तरह, जो $IFS\ n और वर्णों में विभाजित होना समझेगा। $'\n'एक नया वर्ण, 0x0D शामिल होगा। अधिक जानकारी के लिए एक नज़र डालें: gnu.org/software/bash/manual/bashref.html#ANSI_002dC-Quoting
जेफ स्नाइडर

मुझे लगता है कि यह INFORMATION_SCHEMA का उपयोग करने से आसान है।
एंजेल चिआंग

0

Xaprb ब्लॉग पर हाल ही में एक प्रविष्टि थी जो इसे अच्छी तरह से कवर करती है।

इसमें यह शामिल है कि क्यों INFORMATION_SCHEMAहमेशा एक अच्छी बात नहीं है और Maatkit में उन प्यारे लोगों से एक उपकरण का संदर्भ लेता है

निम्नलिखित के साथ प्रयास करें mk-find:

mk-find '<database>' --printf 'DROP TABLE %D.%N'

यदि आप परिणाम से खुश हैं तो:

mk-find '<database>' --exec 'DROP TABLE %D.%N'

-2

यदि आपके पास फ़ाइल सिस्टम एक्सेस है, तो बस rm -rf databasename/*:)।

ड्रॉप डेटाबेस स्टेटमेंट वही करता है ... MySQL मैनुअल से अंश:

DROP DATABASE कथन दिए गए डेटाबेस निर्देशिका से उन फ़ाइलों और निर्देशिकाओं को हटा देता है जिन्हें MySQL स्वयं सामान्य ऑपरेशन के दौरान बना सकता है:


2
MySQL के रूप में किसी भी गैर-तुच्छ सेटअप के लिए बहुत बुरा विचार इन फ़ाइलों के अचानक गायब होने की उम्मीद नहीं कर रहा है और किसी भी संख्या में संचालन, लेनदेन, प्रतिकृति, ताले के बीच में हो सकता है ...
bot403 22

क्या आप उचित आदेश और प्रक्रिया को शामिल करने के लिए अपने उत्तर को संशोधित करने पर विचार करेंगे?
bot403
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.