মাইএসকিএলডাম্প ওয়াইল্ডকার্ড সহ টেবিলটিকে উপেক্ষা করুন


8

আমার 50 টি বিজোড় সারণীযুক্ত একটি ডেটাবেস ডাম্প নিতে হবে যার মধ্যে আমি 15 টি বিজোড় উপসর্গটি বাদ দিতে চাই exam_

আমি চেষ্টা করেছিলাম mysqldump --ignore-table=dbname.exam_* এমনকি চেষ্টাও করেছি --ignore-table=dbname.exam_% এটি প্রত্যাশার মতো কার্যকর হয়নি। আমাকে --ignore-tableএকাধিকবার ব্যবহার করতে হয়েছিল ।

সম্পাদনা: আমি কয়েকটি শেল স্ক্রিপ্ট দেখেছি যা tables not like tablename_%তালিকাবদ্ধ করে এটিতে প্রেরণ করে mysqldump

তবে, আমি জানতে চাই যে মাইএসকিএলডাম বা মাইএসকিএল-তে কোনও বিকল্প রয়েছে কিনা, যেমন স্ক্রিপ্ট না করেই এটি করা।

সম্পাদনা যোগ করুন: শেষ পর্যন্ত ignore-table=একাধিকবার ব্যবহার করে টেবিলগুলি বাদ দিয়ে ডিবি ডাম্প করার জন্য একটি স্ক্রিপ্ট ব্যবহৃত হয়েছিল ।


আপনি যে স্ক্রিপ্ট ব্যবহার করেছেন তা কি পোস্ট করতে পারবেন? সম্ভবত এটি gist.github.com
রুব 77

@ রুবো:।: আমার কাছে আর স্ক্রিপ্ট নেই। এটি একটি প্রাথমিক লিপি ছিল। Mysql কমান্ডটি ব্যবহার করে আমি সারণীগুলির একটি তালিকা পেয়েছিলাম যা আমি বাদ দিতে চাই। হার্ড-কোডেড তালিকায় একটি বেস স্ক্রিপ্টে ডাম উত্পাদন করতে যখনই প্রয়োজন হবে। ভাগ্যক্রমে আমার জন্য, তালিকাটি স্থির ছিল। বিকল্পভাবে, এখানে পোস্ট করা একটি সমাধান স্ক্রিপ্টিংয়ের ক্ষেত্রে কার্যকর হতে পারে।
অনুপ

আরও ভাল: TABLES=`mysql --skip-column-names [DB-NAME] -e 'show tables' | grep -v 'exam_'` mysqldump [DB-NAME] $TABLES > mysqldump.sql
আনুপ

উত্তর:


13

না, mysqldumpকমান্ডটিতে এর মতো কোনও বিকল্প নেই , যেমন ডকস বলেছেন:

--ignore-টেবিল = db_name.tbl_name

প্রদত্ত টেবিলটি ডাম্প করবেন না, যা অবশ্যই
ডাটাবেস এবং টেবিলের নাম দুটি ব্যবহার করে নির্দিষ্ট করা আবশ্যক । একাধিক সারণী উপেক্ষা করতে,
একাধিকবার এই বিকল্পটি ব্যবহার করুন । এই বিকল্পটি মতামত উপেক্ষা করার জন্যও ব্যবহার করা যেতে পারে।


অন্যদিকে, এটি কোনও মাইএসকিএল ডাম্প ব্যবহারকারী তৈরি করার উপযুক্ত হতে পারে যা এই টেবিলগুলিতে অ্যাক্সেস পায় না, তারপরে mysqldump --all-databasesএটির ত্রুটি রয়েছে কিনা তা দেখার চেষ্টা করে বা পরবর্তী ডিডিবিতে চলে যায় ..
নিক ডাব্লু

এটি চেষ্টা করে দেখেনি, তবে ভাল লাগছে। সমাধান হিসাবে, আমি টেবিলগুলি এড়ানোর জন্য একটি শেল স্ক্রিপ্ট লিখেছিলাম।
অনুপ

@ নিক ডাব্লু যে কাজ করতে পারে। তবে আপনি যদি আরও নমনীয়তা চান, আপনার সারণির নামগুলি পাওয়ার জন্য একটি পৃথক ক্যোয়ারী করতে হবে। আমার উত্তর নীচে দেখুন।
বাটাল বুট্কাস

দ্রুত এবং নোংরা সংস্করণ: ডেটাবেস ডুপ করুন। আপনি দেখতে চান না এমন টেবিলগুলি সহজেই ফেলে দিতে পিএইচপিএমআইএডমিনের ওয়েব ইন্টারফেস ব্যবহার করুন। তারপরে ডাম্প এবং কোনও ওয়াইল্ডকার্ডের দরকার নেই। আপনি CLI ফাঁসি চান এবং তৃতীয় ধাপে কিছু মনে না করেন যদি sitepoint.com/community/t/drop-tables-with-wildcard/18537/4
TheSatinKnight

3

আপনি মাইএসকিএল থেকে আপনার পছন্দ মতো টেবিলের নামগুলি পেতে পারেন এবং তারপরে আপনার মাইএসকিএল ডাম্প পরামিতিগুলি তৈরি করতে তাদের ব্যবহার করুন।

নীচের উদাহরণে, কেবলমাত্র আপনার উপসর্গের সাথে "উদাহরণস্বরূপ" প্রতিস্থাপন করুন (যেমন "পরীক্ষা_")।

SHOW TABLESক্যোয়ারী টেবিল অন্যান্য সেটের এটি পরিবর্তন করা যেতে পারে। অথবা আপনি INFORMATION_SCHEMAআরও বেশি মানদণ্ড ব্যবহারের জন্য টেবিলের বিপরীতে কোনও প্রশ্ন ব্যবহার করতে পারেন ।

#/bin/bash

#this could be improved but it works
read -p "Mysql username and password" user pass

#specify your database, e.g. "mydb"
DB="mydb"

SQL_STRING='SHOW TABLES LIKE "someprefix%";'
DBS=$(echo $SQL_STRING | mysql -u $user -p$pass -Bs --database=$DB )

#next two lines untested, but intended to add a second excluded table prefix
#ANOTHER_SQL_STRING='SHOW TABLES LIKE "otherprefix%";'
#DBS="$DBS""\n"$(echo $ANOTHER_SQL_STRING | mysql -u $user -p$pass -Bs --database=$DB )

#-B is for batch - tab-separated columns, newlines between rows
#-s is for silent - produce less output
#both result in escaping special characters

#but the following might not work if you have special characters in your table names
IFS=$'\n' read -r -a TABLES <<< $DBS

IGNORE="--ignore_table="$DB"."
IGNORE_TABLES=""

for table in $TABLES; do
        IGNORE_TABLES=$IGNORE_TABLES" --ignore_table="$DB"."$table
done

#Now you have a string in $IGNORE_TABLES like this: "--ignore_table=someprefix1 --ignore_table=someprefix2 ..."

mysqldump $DB --routines -u $user -p$pass $IGNORE_TABLES > specialdump.sql

"বাশ বাদে সমস্ত টেবিল" পাওয়ার বিষয়ে এই উত্তরটির সাহায্যে এটি নির্মিত হয়েছিল: https://stackoverflow.com/a/9232076/631764

এবং কিছু ব্যাশ ব্যবহৃত টেবিলগুলি এড়িয়ে যাওয়ার বিষয়ে এই উত্তর: https://stackoverflow.com/a/425172/631764


নির্বাচিত উত্তরের ভিত্তিতে, আমি আপনার উত্তরের অনুরূপ একটি স্ক্রিপ্ট লিখেছিলাম। এটি স্থাপন করার জন্য ধন্যবাদ। সম্পাদনা: সবেমাত্র মনে আছে যে আমি পাইপ এবং গ্রেপ বাদ দেওয়া প্যাটার্ন সহ দুটি কমান্ড ব্যবহার করেছি।
অনুপ

0

আমি মনে করি এটির জন্য information_schemaএটি ব্যবহার করা ভাল রুট।

select group_concat(concat('--ignore-table=', TABLE_SCHEMA, '.', table_name) SEPARATOR ' ') 
from information_schema.tables 
where TABLE_SCHEMA = 'Actual_DB_NAME' and TABLE_NAME like 'Actual_TABLE_NAME%';
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.