মাইএসকিলডাম্প সহ বাক্সব্যাপী করণীয় IN
আইএমএইচও ব্যাকআপগুলি একটি শিল্প ফর্ম হয়ে উঠেছে যদি আপনি কেবল কীভাবে এটির কাছে যেতে চান
আপনার কাছে বিকল্প রয়েছে
বিকল্প 1: mysqldump একটি সম্পূর্ণ mysql উদাহরণ
এটি সবচেয়ে সহজ, নন-ব্রেইনার !!!
mysqldump -h... -u... -p... --hex-blob --routines --triggers --all-databases | gzip > MySQLData.sql.gz
এক ফাইলে লিখিত সমস্ত কিছুই: টেবিল স্ট্রাকচার, সূচী, ট্রিগার, সঞ্চিত পদ্ধতি, ব্যবহারকারী, এনক্রিপ্ট হওয়া পাসওয়ার্ড। অন্যান্য মাইএসকিলডাম্প বিকল্পগুলি বাইনারি লগ, ডাটাবেস তৈরির বিকল্পগুলি, আংশিক ডেটা (- কোথাও বিকল্প) ইত্যাদি থেকে ইনসার্ট কমান্ডের বিভিন্ন স্টাইল, লগ ফাইল এবং অবস্থানের স্থানাঙ্ক রফতানি করতে পারে।
বিকল্প 2: মাইএসকিএলডাম্প পৃথক ডেটা ফাইলগুলিতে পৃথক ডাটাবেস
ডাটাবেসগুলির একটি তালিকা তৈরি করে শুরু করুন (এটি করার জন্য 2 কৌশল)
কৌশল 1
mysql -h... -u... -p... -A --skip-column-names -e"SELECT schema_name FROM information_schema.schemata WHERE schema_name NOT IN ('information_schema','mysql')" > ListOfDatabases.txt
টেকনিক 2
mysql -h... -u... -p... -A --skip-column-names -e"SELECT DISTINCT table_schema FROM information_schema.tables WHERE table_schema NOT IN ('information_schema','mysql')" > ListOfDatabases.txt
প্রযুক্তি 1 দ্রুততম উপায় way প্রযুক্তি 2 নিশ্চিত এবং নিরাপদ। প্রযুক্তি 2 আরও ভাল কারণ, কখনও কখনও ব্যবহারকারীরা / var / lib / mysql (ডাটাডির) এ সাধারণ উদ্দেশ্যে ফোল্ডার তৈরি করেন যা ডাটাবেস সম্পর্কিত নয়। তথ্য_সেমিমা ফোল্ডারটি তথ্য_সেমি.স্কেমতা সারণিতে একটি ডাটাবেস হিসাবে নিবন্ধিত করবে। প্রযুক্তি 2 এমন ফোল্ডারগুলিকে বাইপাস করবে যেখানে মাইএসকিএল ডেটা নেই।
আপনি যখন ডাটাবেসের তালিকাটি সংকলন করেন, আপনি তালিকার মধ্য দিয়ে লুপটি চালিয়ে যেতে পারেন এবং এগুলি পছন্দসই সমান্তরালেও মাইএসকিल्ड্প্প করতে পারেন।
for DB in `cat ListOfDatabases.txt`
do
mysqldump -h... -u... -p... --hex-blob --routines --triggers ${DB} | gzip > ${DB}.sql.gz &
done
wait
যদি এক সাথে লঞ্চ করার জন্য অনেক বেশি ডাটাবেস থাকে তবে সমান্তরাল একবারে 10 টি ডাম্প করুন:
COMMIT_COUNT=0
COMMIT_LIMIT=10
for DB in `cat ListOfDatabases.txt`
do
mysqldump -h... -u... -p... --hex-blob --routines --triggers ${DB} | gzip > ${DB}.sql.gz &
(( COMMIT_COUNT++ ))
if [ ${COMMIT_COUNT} -eq ${COMMIT_LIMIT} ]
then
COMMIT_COUNT=0
wait
fi
done
if [ ${COMMIT_COUNT} -gt 0 ]
then
wait
fi
বিকল্প 3: মাইএসকিএলডাম্প পৃথক ডাটা ফাইলে আলাদা টেবিলগুলি
সারণীর তালিকা তৈরি করে শুরু করুন
mysql -h... -u... -p... -A --skip-column-names -e"SELECT CONCAT(table_schema,'.',table_name) FROM information_schema.tables WHERE table_schema NOT IN ('information_schema','mysql')" > ListOfTables.txt
তারপরে 10 টি গোষ্ঠীতে সমস্ত সারণী ফেলে দিন
COMMIT_COUNT=0
COMMIT_LIMIT=10
for DBTB in `cat ListOfTables.txt`
do
DB=`echo ${DBTB} | sed 's/\./ /g' | awk '{print $1}'`
TB=`echo ${DBTB} | sed 's/\./ /g' | awk '{print $2}'`
mysqldump -h... -u... -p... --hex-blob --triggers ${DB} ${TB} | gzip > ${DB}_${TB}.sql.gz &
(( COMMIT_COUNT++ ))
if [ ${COMMIT_COUNT} -eq ${COMMIT_LIMIT} ]
then
COMMIT_COUNT=0
wait
fi
done
if [ ${COMMIT_COUNT} -gt 0 ]
then
wait
fi
বিকল্প 4: আপনার চিত্র ব্যবহার করুন
উপরে বর্ণিত বিকল্পগুলি এবং পরিষ্কার স্ন্যাপশটের জন্য কৌশলগুলির বিভিন্নতার চেষ্টা করুন
উদাহরণ
- প্রতিটি টেবিলের আকার আরোহণ বা অবতরণ করে সারণির তালিকা অর্ডার করুন।
- পৃথক প্রক্রিয়া ব্যবহার করে, মাইএসকিএলডাম্প চালু করার আগে "লক পড়ুন; ফ্ল্যাট ট্যাবলেটগুলি চালাও; স্লিপ সিলিপ (86400)" চালান। মাইএসকিল্ডাম্পস সম্পূর্ণ হওয়ার পরে এই প্রক্রিয়াটি হত্যা করুন। এটি সহায়ক যদি কোনও ডাটাবেসে InnoDB এবং মাইআইএসএএম উভয় থাকে
- তারিখযুক্ত ফোল্ডারে মাইএসকিल्डডাম্পগুলি সংরক্ষণ করুন এবং পুরানো ব্যাকআপ ফোল্ডারগুলি ঘোরান।
- পুরো উদাহরণ মাইসকিলডাম্প স্ট্যান্ড স্টোন সার্ভারগুলিতে লোড করুন।
বিচারকার্য স্থগিত রাখার আদেশ
কেবলমাত্র বিকল্প 1 সমস্ত কিছু নিয়ে আসে। ত্রুটিটি হ'ল যেভাবে এইভাবে তৈরি করা মাইএসকিল্ডাম্পস কেবল সেই মাইএসকিএলডের একই মজোট রিলিজ সংস্করণে পুনরায় লোড করা যায় যা মাইএসকিএলডাম্প তৈরি হয়েছিল। অন্য কথায়, একটি মাইএসকিউএল 5.0 ডাটাবেস থেকে একটি মাইএসকিএলডাম্প 5.1 বা 5.5 এ লোড করা যায় না। কারন ? প্রধান রিলিজগুলির মধ্যে মাইএসকিএল স্কিমা সম্পূর্ণ আলাদা।
2 এবং 3 বিকল্পের মধ্যে ব্যবহারকারীর নাম এবং পাসওয়ার্ড সংরক্ষণ করা অন্তর্ভুক্ত নয়।
পাঠযোগ্য এবং আরও বহনযোগ্য এমন ব্যবহারকারীদের জন্য এসকিউএল অনুদানগুলি ডাম্প করার সাধারণ উপায় এখানে
mysql -h... -u... -p... --skip-column-names -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>''" | mysql -h... -u... -p... --skip-column-names -A | sed 's/$/;/g' > MySQLGrants.sql
বিকল্প 3 সঞ্চিত পদ্ধতিগুলি সংরক্ষণ করে না, সুতরাং আপনি নিম্নলিখিতটি করতে পারেন
mysqldump -h... -u... -p... --no-data --no-create-info --routines > MySQLStoredProcedures.sql &
আরেকটি বিষয় লক্ষ্য করা উচিত যা ইনোডিবি সম্পর্কিত। আপনার যদি একটি বড় ইনোডিবি বাফার পুল থাকে তবে কোনও ব্যাকআপ নেওয়ার আগে এটি যথাসম্ভব সেরাভাবে ফ্লাশ করা বুদ্ধিমান হয়ে যায়। অন্যথায়, মাইএসকিউএল বাফার পুলের বাইরে বাকী নোংরা পৃষ্ঠা সহ টেবিলগুলি ফ্লাশ করার সময় ব্যয় করে। আমি যা পরামর্শ দিচ্ছি তা এখানে:
ব্যাকআপটি সম্পাদন করার প্রায় 1 ঘন্টা আগে এই এসকিউএল কমান্ডটি চালান
SET GLOBAL innodb_max_dirty_pages_pct = 0;
মাইএসকিউএল 5.5-এ ডিফল্ট ইনোডব_ম্যাক্স_ডাটি_পেজ_প্যাক্টটি 75 My এটি কোনও ইনোডিবি টেবিলের বিরুদ্ধে কোনও মাইএসকিল্ডাম্প সম্পাদন করার আগে InnoDB ডেটার অসম্পূর্ণ দ্বি-পর্যায়ের কমিটগুলি পরিষ্কার করার প্রভাব কমিয়ে আনবে বা কমপক্ষে কমিয়ে দেবে।
মাইএসকিলডাম্পের শেষ শব্দ ORD
বেশিরভাগ লোকেরা অন্য সরঞ্জামগুলির পক্ষে মাইএসকিএলডাম্প থেকে বিরত থাকে এবং সেই সরঞ্জামগুলি সত্যই ভাল।
যেমন সরঞ্জাম অন্তর্ভুক্ত
- ম্যাটকিট (পেরকোনা থেকে সমান্তরাল ডাম্প / পুনরুদ্ধার স্ক্রিপ্টগুলি [অবনমিত তবে দুর্দান্ত]]
- এক্সট্রাব্যাকআপ ( পারকোনা থেকে টপ নট স্ন্যাপশট ব্যাকআপ)
- সিডিপি আর 1 এসফ্ট ( মাইএসকিউএল মডিউল বিকল্প যা পয়েন্ট-ইন-টাইম স্ন্যাপশট নেয়)
- মাইএসকিউএল এন্টারপ্রাইজ ব্যাকআপ (পূর্বে ইনোডিবি হট ব্যাকআপস [বাণিজ্যিক])
আপনার যদি সত্যিকারের মাইএসকিউএল ডিবিএর স্পিরিট থাকে তবে আপনি মাইএসকিএলডাম্পকে আলিঙ্গন করতে পারেন এবং এটির উপর সম্পূর্ণ দক্ষতা অর্জন করতে পারেন। আপনার সমস্ত ব্যাকআপগুলি মাইএসকিউএল ডিবিএ হিসাবে আপনার দক্ষতার প্রতিচ্ছবি হতে পারে ।