আমার এইটির পুরো উত্তর আছে।
একবার ইনোডোবি_ফাইলে_পিটি টেবিল স্থাপন করা হয়ে গেলে এবং নতুন ইনোডিবি টেবিলগুলি সঙ্কুচিত করা যেতে পারে ALTER TABLE <innodb-table-name> ENGINE=InnoDB';
এটি নতুন .ibd
ফাইলগুলি সঙ্কুচিত করবে U
যদি আপনি ALTER TABLE <innodb-table-name> ENGINE=InnoDB';
ইনডোডিবি_ফাইলে_ টেবিল ব্যবহারের আগে তৈরি কোনও ইনোডিবি টেবিলটি চালনা করেন তবে এটি সেই টেবিলের জন্য ডেটা এবং সূচকগুলি ইবদাটা 1 ফাইলের বাইরে ফেলে দেবে এবং এটি একটি .ibd
ফাইলে সংরক্ষণ করবে, এটি ইবদাটা 1 এ একটি স্থায়ী কবুতর পুরো ছেড়ে যাবে যা কখনই পুনরায় ব্যবহার করা যাবে না ।
ibdata1
ফাইল স্বাভাবিকভাবে তথ্য মধ্যে চার রকমের ঘর
ইবদাটা 1 ফাইলটি চিরকাল স্থায়ীভাবে সংকুচিত করার গ্যারান্টিযুক্ত উপায় এখানে ...
পদক্ষেপ 01) মাইএসকিউএল সমস্ত ডাটাবেস একটি এসকিউএল পাঠ্য ফাইলের মধ্যে ফেলা (এটিকে এসকিউএলডাটা.এসকিউএল কল করুন)
পদক্ষেপ 02) সমস্ত ডেটাবেস (মাইএসকিএল, তথ্য_স্কেমা এবং পারফরম্যান্স_স্কিমার স্কিমা বাদে) ফেলে দিন
পদক্ষেপ 03) বন্ধ মাইএসকিএল
পদক্ষেপ 04) /etc/my.cnf এ নিম্নলিখিত লাইনগুলি যুক্ত করুন
[mysqld]
innodb_file_per_table
innodb_flush_method=O_DIRECT
innodb_log_file_size=1G
innodb_buffer_pool_size=4G
innodb_data_file_path=ibdata1:10M:autoextend
সিডিনোট: ইনোডাব_ফুফার_পুল_সাইজের জন্য আপনার সেট যাই হোক না কেন, নিশ্চিত করুন যে ইনোডাব_লগ_ফায়াল_সাইজ ইনোডাব_বফার_পুল_সাইজের 25%।
- পদক্ষেপ 05) আইবডাটা 1, ইব_লগফিলি 0 এবং আইব_লগফিল 1 মুছুন ( মোছার আগে নীচে আপডেট দেখুন! )
এই মুহুর্তে, কেবলমাত্র / var / lib / mysql তে মাইএসকিএল স্কিমা থাকা উচিত
- পদক্ষেপ 06) মাইএসকিএল পুনরায় চালু করুন
এটি আইবিডেটা 1 10 এমবিতে পুনরায় তৈরি করবে (বিকল্পটি কনফিগার করবেন না), আইবি_লগফাইল 0 এবং আইবি_লগফাইল 1 প্রতিটি 1 জি তে
- পদক্ষেপ 07) এসকিউএলডেটা.এসকিউএলকে মাইএসকিএলে পুনরায় লোড করুন
ibdata1
বৃদ্ধি পাবে তবে কেবল টেবিল মেটাডেটা এবং অন্তর্বর্তী এমভিসিসি ডেটা থাকবে।
প্রতিটি InnoDB টেবিলের বাইরে উপস্থিত থাকবে ibdata1
ধরুন আপনার কাছে একটি আইএনডিবিবি টেবিল আছে যার নাম mydb.mytable। আপনি যদি ভিতরে যান তবে আপনি /var/lib/mysql/mydb
টেবিলের প্রতিনিধিত্বকারী দুটি ফাইল দেখতে পাবেন
mytable.frm
(স্টোরেজ ইঞ্জিন শিরোনাম)
mytable.ibd
(সারণী ডেটা এবং সারণী সূচির জন্য হোম mydb.mytable
)
ibdata1
InnoDB ডেটা এবং সূচকগুলি আর কখনও ধারণ করবে না।
সঙ্গে innodb_file_per_table বিকল্প /etc/my.cnf
, আপনি চালাতে পারেন OPTIMIZE TABLE mydb.mytable
বা ALTER TABLE mydb.mytable ENGINE=InnoDB;
এবং ফাইল /var/lib/mysql/mydb/mytable.ibd
আসলে সঙ্কুচিত হবে।
আমি মাইএসকিউএল ডিবিএ হিসাবে আমার কেরিয়ারে এর পরে একক সমস্যা ছাড়া এতবার করেছি। প্রকৃতপক্ষে, আমি প্রথমবার এটি করেছি, আমি একটি 50 জিবি ইবদাতা 1 ফাইলটি 50MB তে ভেঙে ফেলেছি।
একবার চেষ্টা করে দেখো. আপনার যদি এই বিষয়ে আরও প্রশ্ন থাকে তবে আমাকে ইমেল করুন। আমাকে বিশ্বাস কর. এটি স্বল্প মেয়াদে এবং দীর্ঘ মেয়াদে কাজ করবে।
আপডেট 2013-07-02 15:08 ইডিটি
এই বিষয়ে আমার একটি সতর্কতা রয়েছে যা আমি আমার অন্যান্য পোস্টগুলিতে আপডেট করেছিলাম তবে আমি এটিকে মিস করেছি: আমি নিজের উত্তরটি ইনডোডবিফেষ্ট_শুটডাউন দিয়ে আরও কিছুটা আপডেট করছি কারণ আমি মাইএসকিএল পুনরায় চালু করার জন্য এবং মাইএসকিএল বন্ধ করার জন্য এটি ব্যবহার করতাম। এখন, এই এক-পদক্ষেপটি অত্যাবশ্যক, কারণ অনির্দিষ্ট প্রতিটি লেনদেনের InnoDB ট্রানজেকশন লগের (বাইরের দিকে ইনোডিবি ইনফ্রাস্ট্রাকচার দেখুন ) অন্যান্য চলমান অংশ থাকতে পারে ।
দয়া করে মনে রাখবেন যে ইনোডাব_ফেস_শুটডাউনটি 2 এ সেট করার ফলে লগগুলিও পরিষ্কার হয়ে যাবে তবে আরও চলন্ত অংশগুলি এখনও বিদ্যমান এবং মাইএসকিএলডি-এর প্রারম্ভের সময় ক্র্যাশ রিকভারিটি বেছে নেওয়া হয়েছে। 0 সেট করা সবচেয়ে ভাল।