বাকী ডিবি টেবিল না রেখে আমি কীভাবে একটি নির্দিষ্ট টেবিল বা টেবিলের সেট ডাম্প করতে পারি?
বাকী ডিবি টেবিল না রেখে আমি কীভাবে একটি নির্দিষ্ট টেবিল বা টেবিলের সেট ডাম্প করতে পারি?
উত্তর:
আপনি যদি mydb থেকে টেবিল টি 1, t2, এবং t3 ডাম্প করছেন
mysqldump -u... -p... mydb t1 t2 t3 > mydb_tables.sql
আপনার যদি মাইডবিতে এক টন টেবিল থাকে এবং আপনি টি 1, টি 2, এবং টি 3 ব্যতীত সমস্ত কিছু ফেলে দিতে চান তবে এটি করুন:
DBTODUMP=mydb
SQL="SET group_concat_max_len = 10240;"
SQL="${SQL} SELECT GROUP_CONCAT(table_name separator ' ')"
SQL="${SQL} FROM information_schema.tables WHERE table_schema='${DBTODUMP}'"
SQL="${SQL} AND table_name NOT IN ('t1','t2','t3')"
TBLIST=`mysql -u... -p... -AN -e"${SQL}"`
mysqldump -u... -p... ${DBTODUMP} ${TBLIST} > mydb_tables.sql
একবার চেষ্টা করে দেখো !!!
@ ররিডনোহুয়ে আমাকে উল্লেখ করেছেন যে GROUP_CONCAT ফাংশনটির সর্বোচ্চ দৈর্ঘ্য প্রসারিত হওয়া দরকার। আমি আমার উত্তরে সেশন ভেরিয়েবল গ্রুপ_কনক্যাট_ম্যাক্স_লেন সর্বোচ্চ 10 কে দৈর্ঘ্যের সাথে যুক্ত করেছি added ধন্যবাদ, @ ররিডনোহুয়ে
SQL="${SQL} AND table_name NOT IN ('t1','t2','t3')"
থেকে SQL="${SQL} AND table_name NOT LIKE 'foo\_%'"
। আমি এটি পরীক্ষা করেছি এবং এটি কাজ করে। আপনার নামে যে কোনও জায়গায় 'foo' রয়েছে এমন সমস্ত টেবিল পেতে ('খাবার', 'বোকা' ইত্যাদি) সারণিতে আপনি '% foo%' এ পরিবর্তন করতে পারেন।
--ignore-table
? এবং যদি তা হয় তবে উত্তরটি থেকে আপনার স্ক্রিপ্টটি স্ক্র্যাপ করে কেবল --ignore-table
পরিবর্তে সুপারিশ করা ভাল না?
Illegal use of option --ignore-table=<database>.<table>
যদি না আমি টেবিলটি নির্দিষ্ট না করি schemaname.tablename
।
রোল্যান্ডোমাইএসকিউএলডিবিএর উত্তরে প্রসারিত করার জন্য একটি নোট ।
তিনি যে স্ক্রিপ্টটি অন্তর্ভুক্ত করেছিলেন তা হ'ল ( and table_name in
) বা ( and table_name NOT in
) সারণীর তালিকা অন্তর্ভুক্ত করার জন্য দুর্দান্ত পদ্ধতি ।
আপনার যদি কেবল একটি বা দুটি সারণী বাদ দিতে হয় তবে আপনি --ignore-table
বিকল্পটি দিয়ে আলাদাভাবে বাদ দিতে পারেন :
mysqldump -u -p etc. --ignore-table=Database.Table1 --ignore-table=Database.Table2 > dump_file.sql
আপনার যখন কয়েকটি টেবিলের বেশি রয়েছে তখন এটির থেকে ভাল চালানো আরও ভাল:
mysql databasename -u [user] -p[password] -e 'show tables like "table_name_%"'
| grep -v Tables_in
| xargs mysqldump [databasename] -u [root] -p [password] > [target_file]
বা এই মত কিছু:
mysqldump -u [user] -p[password] databasename `echo "show tables like 'table_name_%';"
| mysql -u[user] -p[password] databasename
| sed '/Tables_in/d'` > [target_file]
মনে রাখবেন যে কমান্ডগুলি কেবল একটি লাইনে টাইপ করতে হবে।
আপনি কেবল নীচের কমান্ডটি ব্যবহার করে এটি করতে পারেন:
mysqldump -uusername -ppassword dbname \
--ignore-table=schema.tablename1 \
--ignore-table=schema.tablename2 \
--ignore-table=schema.tablename3 > mysqldump.sql