আমার পূর্বের নামগুলি না জেনে আমার সমস্ত টেবিলগুলি একটি ডাটাবেসে ফেলে দিতে হবে। সাধারণ পদ্ধতি হ'ল ড্রপ এবং তারপরে ডাটাবেসটি পুনরায় তৈরি করা তবে এটি কোনও বিকল্প নয়। এটা করার সবচেয়ে ভালো উপায় কি?
আমার পূর্বের নামগুলি না জেনে আমার সমস্ত টেবিলগুলি একটি ডাটাবেসে ফেলে দিতে হবে। সাধারণ পদ্ধতি হ'ল ড্রপ এবং তারপরে ডাটাবেসটি পুনরায় তৈরি করা তবে এটি কোনও বিকল্প নয়। এটা করার সবচেয়ে ভালো উপায় কি?
উত্তর:
মাইএসকিএলডাম্প (থিংগি মা জিগ ব্লগ থেকে ) ব্যবহার করে একটি সহজ বাশ ওয়ান-লাইনার রয়েছে ।
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]
এখন এটি সীমাবদ্ধতা উপেক্ষা করে।
আপনি ব্যবহার করা উচিত information_schema ডাটাবেসের সম্পর্কে মেটাডেটা আনতে টেবিল, এবং তারপর সেখান তালিকাবদ্ধ টেবিল ছেড়ে দিন।
এটি করার জন্য আপনি একটি দ্রুত শেল স্ক্রিপ্ট চেষ্টা করতে পারেন:
#!/bin/bash
IFS=$'\n'
for table in `mysql <databaseName> -N -e 'show tables'`; do
echo mysql <databaseName> -e "drop table $table"
done
echo
এটি যা যা আপনি প্রত্যাশা করছেন তা যাচাই করার পরে সরান ।
$''
ব্যাশ ব্যবহারের কারণে আক্ষরিকভাবে পরিবর্তে ব্যাকস্ল্যাশ সিক্যুয়েন্সকে ব্যাখ্যা করতে পারে। '\n'
ঠিক ঠিক এর মতোই \ n, যা which $IFS
এবং n অক্ষরগুলিতে বিভক্ত হতে বুঝতে পারে contain $'\n'
একটি নতুনলাইন অক্ষর, 0x0D থাকবে। আরও তথ্যের জন্য এখানে দেখে নিন: gnu.org/software/bash/manual/bashref.html#ANSI_002dC-Quoting ।
সাম্প্র্প ব্লগে সম্প্রতি একটি এন্ট্রি ছিল যা এটি দুর্দান্তভাবে কভার করে।
এটা তোলে অন্তর্ভুক্ত কেন ব্যবহার INFORMATION_SCHEMA
সবসময় একটি ভাল জিনিস এবং তথ্যসূত্র যাদের সুদৃশ্য মানুষের কাছ থেকে একটি হাতিয়ার নয় Maatkit ।
এর সাথে নিম্নলিখিতটি ব্যবহার করে দেখুন mk-find
:
mk-find '<database>' --printf 'DROP TABLE %D.%N'
আপনি যদি ফলাফলগুলি নিয়ে খুশি হন তবে:
mk-find '<database>' --exec 'DROP TABLE %D.%N'
আপনার যদি ফাইল সিস্টেম অ্যাক্সেস থাকে তবে কেবল rm -rf databasename/*
:)।
ড্রপ ডাটাবেস বিবৃতি একই কাজ করে ... মাইএসকিউএল ম্যানুয়াল থেকে অংশ:
DROP DATABASE বিবৃতি প্রদত্ত ডাটাবেস ডিরেক্টরি থেকে মাইএসকিউএল নিজেই তৈরি করতে পারে এমন ফাইল এবং ডিরেক্টরিগুলি অপসারণ করে: