ব্যাকআপের জন্য ডাটাবেস উপেক্ষা করার জন্য মাইএসকিলডাম্পের কোনও বিকল্প?


23

আমাদের সার্ভারে 40 টি ডাটাবেস রয়েছে।

আমরা mysqldump ব্যবহার করে 36 টি ডাটাবেস ব্যাকআপ নিতে চাই। আমি কীভাবে mysqldump কমান্ডের 4 টি ডাটাবেস উপেক্ষা করতে পারি? মাইএসকিএলডামের মাইএসকিউএল ব্যাকআপের জন্য ডাটাবেসগুলিকে উপেক্ষা করার কোনও বিকল্প নেই?

আমি জেনারেল মাইএসকিএলডাম্প কমান্ড জানি কিন্তু এটি খুব দীর্ঘ। আমি কেবল 4 টি ডাটাবেস উপেক্ষা করতে চাই এবং বাকি ডিবিএস ব্যাকআপ নেওয়া দরকার।

উত্তর:


16

১ Dec ই ডিসেম্বর, ২০১১-এ, আমি এই প্রশ্নের উত্তর দিয়েছি যে আপনি নির্দিষ্ট টেবিলগুলি কীভাবে মাইএসকিলডাম্প করবেন?

আমি টেবিলের নামগুলির একটি নির্দিষ্ট সেট না রেখে সমস্ত টেবিল সংগ্রহ করেছি।

একই নীতিগুলি ব্যবহার করে, আপনি information_schema.schemataযে মেটাডেটা টেবিলটি মাইসকিডম্প্প করতে চান তা থেকে সমস্ত ডাটাবেসের নাম সংগ্রহ করতে পারতেন, সেই তালিকাটি ফেরত দেওয়ার জন্য একটি কোয়েরি তৈরি করতে পারতেন এবং তারপরে 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

আপনাকে যা করতে হবে তা হ'ল যে ডেটাবেসগুলিতে আপনি চান না যে আপনি মাইএসকিल्डম্প'তে প্রবেশ করতে চান 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

আপনি চান না এমন ডাটাবেসগুলি বাদ দেওয়ার জন্য গ্রেপ ব্যবহার করুন:

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

Https://stackoverflow.com/questions/19354870/bash-command-line-and-input-lim এ দেখে মনে হচ্ছে আপনি লম্বা লাইন পরিচালনা করতে সক্ষম হবেন। অন্যথায় আপনি সবসময় পারেন

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

এক যোগ করা উচিত `| পেস্ট-এসডি "" -` এর পরে মাল্টিলাইন 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
আমি এই আদেশটি জানি। তবে এটি অত্যন্ত দীর্ঘ length আমি 4 টি ডাটাবেস উপেক্ষা করতে চাই এবং বাকী ডিবিএস ব্যাকআপ নেওয়ার দরকার।
আশুতোষ

3

এমনকি এখানে অনেক দুর্দান্ত উত্তর, তাই এই পোস্টটি আরও একটি পছন্দ যুক্ত করতে হয়। স্ক্রিপ্টের 2 টি লাইনের নীচে, আপনি কিছু সার্চিকে কিছু ডিবি উপেক্ষা করে আপনার ডিবির সমস্ত ব্যাকআপ নিতে পারেন।

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
sysযেটি মাইএসকিউএল 5.7 এর অংশ হিসাবে অন্তর্ভুক্ত করার জন্য আপনাকে ধন্যবাদ
RolandoMySQLDBA

ধন্যবাদ @ রোল্যান্ডোমাইএসকিউএলডিবিএ, আমি সর্বদা আপনার দুর্দান্ত পোস্ট / ব্লগের সাহায্য পাই ... আপনার অভিনন্দনের জন্য আবারও ধন্যবাদ ...
জাফর মালিক

2

1

অনেকে বরাবরই ডেটাবেসগুলিকে উপেক্ষা করার জন্য মাইএসকিএলডাম্প চেয়েছিলেন।

আপনি কি বিশ্বাস করবেন যে বিকল্পটি এখন বিদ্যমান? না, মাইএসকিल्ड্প্পে নেই।

ওরাকল (ইয়াক, টোয়ি, এখনও জিহ্বা গড়িয়ে যায় না) ওরাকল ডাটাবেসগুলিকে ডাম্প করার জন্য ডেটাপাম্প (এক্সপিডিবিআইপিডিপি ) রয়েছে । ওরাকল পরিবারে মাইএসকিউএল ৫.7 (যেহেতু ব্যথা করছে), নতুন ব্যাকআপ ইউটিলিটি প্রোগ্রামকে মাইএসক্ল্যাম্প বলা হয় , যা - এক্সক্লুড -ডাটাবেস এবং অন্যান্য ঝরঝরে বিকল্পগুলির সাথে আসে । এটির পুরানো স্টেপবথার ডেটাপাম্পের মতো , মাইএসক্লাম্পেও ডাম্পগুলিকে গতি বাড়ানোর জন্য এবং কাজের বিভাজনে সহায়তা করার জন্য সমান্তরালতার বৈশিষ্ট্য রয়েছে । এই মুহুর্তে, আমি কাজের সাথে সংযুক্ত হই নি, তবে এটি খুব আশাব্যঞ্জক দেখাচ্ছে। আমি যখন মাইএসকিল্প্পে গভীর ডুব দিই তখন আমি দেখতে পেতাম যে এটি ওরাকলের ডেটাপাম্পের মতো একই চেহারা এবং অনুভূতি নিয়ে আসে ।

মাইএসকিউএল সমান্তরাল ইউনিভার্সে এর গল্প নিয়ে যদি কেউ থাকে তবে দয়া করে এটি এখানে পোস্ট করুন।


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-databaseমাইএসকিএলডামের ভবিষ্যতের সংস্করণে একটি বিকল্প যুক্ত করা হবে)


0

মাইএসকিউএল ৫.7.৮ থেকে আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন mysqlpump(যা এর মতো নয় mysqldump):

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

db1,db2,db3,db4আপনি বাদ দিতে চান এমন চারটি ডাটাবেস দিয়ে কেবল প্রতিস্থাপন করুন ।

সূত্র: মাইএসকিউএল সার্ভার ব্লগ

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.