बैकअप के लिए डेटाबेस की अनदेखी करने के लिए mysqldump के लिए कोई विकल्प?


23

हमारे सर्वर में 40 डेटाबेस हैं।

हम mysqldump का उपयोग करके 36 डेटाबेस बैकअप लेना चाहते हैं। मैं mysqldump कमांड में शेष 4 डेटाबेस को कैसे अनदेखा कर सकता हूं? क्या MySQL में बैकअप के लिए डेटाबेस को अनदेखा करने के लिए mysqldump का कोई विकल्प है?

मैं सामान्य mysqldump कमांड जानता हूं, लेकिन यह बहुत लंबा है। मैं केवल 4 डेटाबेस को अनदेखा करना चाहता हूं और शेष dbs बैकअप लेने की आवश्यकता है।

जवाबों:


16

16 दिसंबर, 2011 को वापस, मैंने इस सवाल का जवाब दिया कि आप mysqldump की विशिष्ट तालिका कैसे हैं?

मैंने सभी तालिकाएँ एकत्र कीं जिनमें तालिका नामों का एक निश्चित सेट शामिल नहीं है।

उसी सिद्धांतों का उपयोग करते हुए, आप मेटाडेटा तालिका से सभी डेटाबेस नाम एकत्र कर सकते हैं information_schema.schemataजो आप mysqldump'd चाहते हैं, उस सूची को वापस करने के लिए एक क्वेरी बनाएं, फिर डेटाबेस की उस सूची का उपयोग करके mysqldump कमांड तैयार करें।

DATABASES_TO_EXCLUDE="db1 db2 db3"
EXCLUSION_LIST="'information_schema','mysql'"
for DB in `echo "${DATABASES_TO_EXCLUDE}"`
do
    EXCLUSION_LIST="${EXCLUSION_LIST},'${DB}'"
done
SQLSTMT="SELECT schema_name FROM information_schema.schemata"
SQLSTMT="${SQLSTMT} WHERE schema_name NOT IN (${EXCLUSION_LIST})"
MYSQLDUMP_DATABASES="--databases"
for DB in `mysql -ANe"${SQLSTMT}"`
do
    MYSQLDUMP_DATABASES="${MYSQLDUMP_DATABASES} ${DB}"
done
MYSQLDUMP_OPTIONS="--routines --triggers"
mysqldump ${MYSQLDUMP_OPTIONS} ${MYSQLDUMP_DATABASES} > MySQLDatabases.sql

तुम सब करने की ज़रूरत है डेटाबेस आप mysqldump'd में नहीं चाहते डाल दिया है DATABASES_TO_EXCLUDE

कोशिश तो करो !!!


information_schemaइसे बाहर करने की कोई आवश्यकता नहीं है, इसे वैसे भी डंप नहीं किया जा रहा है। mysqldump does not dump the INFORMATION_SCHEMA or performance_schema database by default. To dump either of these, name it explicitly on the command line and also use the --skip-lock-tables option. You can also name them with the --databases option. Before MySQL 5.5 mysqldump silently ignores INFORMATION_SCHEMA even if you name it explicitly on the command line. dev.mysql.com/doc/refman/5.5/en/mysqldump.html
लुका

15

आप नहीं चाहते हैं कि डेटाबेस को बाहर करने के लिए grep का उपयोग करें:

candidates=$(echo "show databases" | mysql | grep -Ev "^(Database|mysql|performance_schema|information_schema)$")
mysqldump --databases $candidates 

पर देख से /programming/19354870/bash-command-line-and-input-limit ऐसा लगता है जैसे आप लंबी लाइनों को संभालने में सक्षम हो जाएगा। अन्यथा आप हमेशा कर सकते हैं

candidates=$(echo "show databases" | mysql | grep -Ev "^(Database|mysql|performance_schema|information_schema)$")
for candidate in $candidates[*]; do
    mysqldump $candidate 
done

एक को जोड़ना चाहिए `| पेस्ट -sd "" -` मल्टीलाइन grepआउटपुट से गुजरने के क्रम में एक स्थान से अलग किए गए प्रत्येक डेटाबेस नाम के साथ एक लाइन के लिए, जो कि आवश्यक है mysqldump। तो आज्ञा होगीcandidates=$(echo "show databases" | mysql | grep -Ev "^(Database|mysql|performance_schema|information_schema)$" | paste -sd " " -)
एंथनी ओ।

8

मुझे नहीं लगता कि यह संभव है, लेकिन आप इन समाधानों को आज़मा सकते हैं, जिन्हें आपको उन सभी डेटाबेसों के नाम टाइप करने होंगे जिन्हें आप डंप करना चाहते हैं।

mysqldump -u root -password --databases db1 db2 db3 ... db36 > mydb_dump.sql

मुझे पता है अगर समाधान में मदद करता है।


1
मुझे पता है कि यह आदेश है। लेकिन यह बहुत लंबा है। मैं 4 डेटाबेस को अनदेखा करना चाहता हूं और शेष dbs बैकअप लेने की आवश्यकता है।
आशुतोष

3

यहाँ भी इतने बेहतरीन जवाब, इसलिए यह पोस्ट सिर्फ एक और विकल्प जोड़ने के लिए है। स्क्रिप्ट में 2 लाइनों के नीचे, आप अपने सर्वर को सभी DB के बैकअप को कुछ DB की अनदेखी करते हुए ले सकते हैं।

DB_LIST=`mysql -Nse "SELECT GROUP_CONCAT(SCHEMA_NAME SEPARATOR ' ') FROM information_schema.SCHEMATA WHERE SCHEMA_NAME NOT IN ('mysql','information_schema','performance_schema','sys');"`

mysqldump -R -B $DB_LIST > BACKUPNAME.sql

1
sysMySQL 5.7
RolandoMySQLDBA

धन्यवाद @RolandoMySQLDBA, मुझे आपकी उत्कृष्ट पोस्ट / ब्लॉग से हमेशा मदद मिलती है ... आपकी प्रशंसा के लिए फिर से धन्यवाद ...
Zafar Malik

2

वैकल्पिक रूप से, आप निम्नलिखित लिंक देख सकते हैं;

माईसकल्डम्प ने डेटाबेस विकल्प पर ध्यान नहीं दिया

            OR

Mysqldump --ignore-database का अनुकरण करने के लिए कुछ हैक

Mysqldump –ignore-database को कार्यान्वित करना

मुझे पता है अगर समाधान में मदद करता है।

सौभाग्य!


1

कई हमेशा डेटाबेस को अनदेखा करना चाहते थे।

क्या आप विश्वास करेंगे कि विकल्प अभी मौजूद है ??? नहीं, mysqldump में नहीं।

ओरेकल डेटाबेस को डंप करने के लिए ओरेकल (Yuck, toowee, अभी भी जीभ बंद नहीं करता है) के पास DataPump (expdb impdp) है। ओरेकल परिवार में MySQL 5.7 (अभी भी दर्द हो रहा है) के बाद से, नए बैकअप उपयोगिता कार्यक्रम को mysqlpump कहा जाता है , जो --exclude-डेटाबेस और अन्य स्वच्छ विकल्पों के साथ आता है । अपने पुराने सौतेले भाई डेटापंप की तरह , mysqlpump भी डंप को गति देने और काम को विभाजित करने में मदद करने के लिए समानता की सुविधा देता है । इस समय, मैंने नौकरी में शामिल नहीं किया है, लेकिन यह बहुत आशाजनक है। जब मैं mysqlpump में गहरी डुबकी लगाता हूं तो मुझे लग सकता है कि यह Oracle के डाटापंप जैसा ही लुक और फील देता है

अगर इसके बारे में कहानियों के साथ MySQL समानांतर यूनिवर्स में कोई है, तो कृपया इसे यहां पोस्ट करें।


0

रोलैंडो का जवाब बहुत अच्छा है, लेकिन मुझे एक ऐसी स्क्रिप्ट चाहिए थी जिसे प्रोजेक्ट्स में फिर से इस्तेमाल किया जा सके। इसलिए, मैंने उसकी स्क्रिप्ट ली और इसे संशोधित किया ताकि आप इस तरह की चीजें कर सकें:

$ mysqldump-ignore-databases.sh 'myuser' 'mypwd' 'information_schema mysql performance_schema' '--skip-lock-tables' > mydbs.sql

यहाँ संशोधित स्क्रिप्ट है:

#!/usr/bin/env bash

# This is an adapted version of Rolando's awesome script at
# /dba//a/35104/94046

# Usage: mysqldump-ignore-databases.sh username password dbs-to-exclude mysqldump-options
# e.g.
#   mysqldumpIgnoreDatabases.sh 'myuser' 'mypwd' 'information_schema mysql performance_schema'
#                               '--skip-lock-tables' > dbs.sql
#
#   mysqldumpIgnoreDatabases.sh 'myuser' 'mypwd' 'mysql' '-h example.com' '-h example.com' > dbs.sql

USERNAME=$1
PASSWORD=$2
DATABASES_TO_EXCLUDE=$3
MYSQLDUMP_OPTIONS=$4
MYSQL_OPTIONS=$5

EXCLUSION_LIST=""
for DB in `echo "${DATABASES_TO_EXCLUDE}"`
do
  if [ "${EXCLUSION_LIST}" != "" ]
  then
    EXCLUSION_LIST="${EXCLUSION_LIST},"
  fi
  EXCLUSION_LIST="${EXCLUSION_LIST}'${DB}'"
done

SQLSTMT="SELECT schema_name FROM information_schema.schemata"
SQLSTMT="${SQLSTMT} WHERE schema_name NOT IN (${EXCLUSION_LIST})"

MYSQLDUMP_DATABASES="--databases"
for DB in `mysql -u${USERNAME} -p${PASSWORD} ${MYSQL_OPTIONS} -ANe"${SQLSTMT}"`
do
  MYSQLDUMP_DATABASES="${MYSQLDUMP_DATABASES} ${DB}"
done

mysqldump -u${USERNAME} -p${PASSWORD} ${MYSQLDUMP_OPTIONS} ${MYSQLDUMP_DATABASES}

(मैं अभी भी उम्मीद कर रहा हूं कि --ignore-databasemysqldump के भविष्य के संस्करण में एक विकल्प जोड़ा जाएगा)


0

MySQL 5.7.8 के बाद से, आप निम्नानुसार mysqlpump(जैसे नहीं है mysqldump) का उपयोग कर सकते हैं :

mysqlpump --user=user --password --exclude-databases=db1,db2,db3,db4 --result-file=partial_backup.sql

बस db1,db2,db3,db4उन चार डेटाबेस से बदलें जिन्हें आप बाहर करना चाहते हैं।

स्रोत: MySQL सर्वर ब्लॉग

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