এটি বন্ধ করার সত্যিই একটি উপায় আছে। আপনাকে মাইএসকিল্ডাম্পস ব্যবহার করে ডেটা রফতানি করতে হবে, সমস্ত ডাটাবেস ফেলে দিতে হবে, শাটডাউন মাইএসকিএলডি করতে হবে, আইব_লগফিলিটি মুছতে হবে, আইব_লগফাইল 1 মুছুন, আইবডাটা 1 মুছুন, শিরোনামের innodb_file_per_table
অধীনে যুক্ত করুন, মাইএসকিএল [mysqld]
শুরু করবেন।
আমি এই উত্তরটি স্ট্যাকওভারফ্লোতে অক্টোবর 2010 এ পোস্ট করেছি posted
উল্লম্বভাবে তালিকাভুক্ত পদক্ষেপগুলি এখানে:
পদক্ষেপ 01) মাইএসকিউএলএক এসকিউএল পাঠ্য ফাইলে সমস্ত ডাটাবেস ড্যাম্প করুন (এটিকে এসকিউএলডাটা.এসকিউএল কল করুন)
পদক্ষেপ 02) সমস্ত ডাটাবেস ফেলে দিন (মাইএসকিএল স্কিমা ব্যতীত)
পদক্ষেপ 03) শাটডাউন মাইএসকিএল
কায়েট : ইনোডিবি ফাইলগুলি থেকে অনির্দিষ্ট লেনদেন সম্পূর্ণরূপে সাফ করার জন্য এটি চালান
mysql -uroot -p... -Ae"SET GLOBAL innodb_fast_shutdown = 0;"
service mysql stop
পদক্ষেপ 04) /etc/my.cnf এ নিম্নলিখিত লাইনগুলি যুক্ত করুন
[mysqld]
innodb_file_per_table
innodb_flush_method=O_DIRECT
innodb_log_file_size=1G
innodb_buffer_pool_size=4G
সিডিনোট: ইনোডাব_ফুফার_পুল_সাইজের জন্য আপনার সেট যাই হোক না কেন, নিশ্চিত করুন যে ইনোডাব_লগ_ফায়াল_সাইজ ইনোডাব_বফার_পুল_সাইজের 25%।
পদক্ষেপ 05) ibdata1, ib_logfile0 এবং ib_logfile1 মুছুন
এই মুহুর্তে, কেবলমাত্র / var / lib / mysql তে মাইএসকিএল স্কিমা থাকা উচিত
পদক্ষেপ 06) মাইএসকিএল পুনরায় চালু করুন
এটি আইবিডেটা 1 10 এমবিতে, ইব_লগফাইল 0 এবং আইবি_লগফাইল 1 প্রতিটি 1 জি তে পুনরায় তৈরি করবে
পদক্ষেপ 07) এসকিউএলডেটা.এসকিউএলকে মাইএসকিএলে পুনরায় লোড করুন
আইবডাটা 1 বৃদ্ধি পাবে তবে কেবল টেবিল মেটাডেটা থাকে
প্রতিটি InnoDB টেবিল ইবদাটা 1 এর বাইরে থাকবে
ধরুন আপনার কাছে একটি আইএনডিবিবি টেবিল আছে যার নাম mydb.mytable। আপনি যদি / var / lib / mysql / mydb এ যান তবে আপনি টেবিলের প্রতিনিধিত্বকারী দুটি ফাইল দেখতে পাবেন
- mytable.frm (স্টোরেজ ইঞ্জিন শিরোনাম)
- mytable.ibd (টেবিল ডেটা এবং mydb.mytable জন্য সারণী সূচীর হোম)
আইবডাটা 1-এ আর কখনও ইনোডিবি ডেটা এবং সূচি থাকবে না।
/Etc/my.cnf- এ ইনোডাব_ফিল_পিটার_টিবল অপশনের সাহায্যে আপনি অপ্টিমিজ টেবিল mydb.mytable চালাতে পারবেন এবং /var/lib/mysql/mydb/mytable.ibd ফাইলটি সঙ্কুচিত হবে।
আমি আমার কেরিয়ারে মাইএসকিউএল ডিবিএ হিসাবে অনেকবার এটি করেছি
প্রকৃতপক্ষে, আমি প্রথমবার এটি করেছি, আমি একটি 50 জিবি ইবদাতা 1 ফাইলটি 500 এমবিতে ভেঙে ফেলেছি।
একবার চেষ্টা করে দেখো. আপনার যদি এই বিষয়ে আরও প্রশ্ন থাকে তবে আমাকে ইমেল করুন। আমাকে বিশ্বাস কর. এটি স্বল্প মেয়াদে এবং দীর্ঘ মেয়াদে কাজ করবে। !!!
এমন একটি বিকল্প রয়েছে যা ইবদাতা 1 সঙ্কুচিত না করে InnoDB টেবিলটি বের করবে।
পদক্ষেপ 01) /etc/my.cnf এ নিম্নলিখিত লাইনগুলি যুক্ত করুন
[mysqld]
innodb_file_per_table
innodb_flush_method=O_DIRECT
innodb_log_file_size=1G
innodb_buffer_pool_size=4G
পদক্ষেপ 02) service mysql restart
পদক্ষেপ 03) mydb.mytable নামক একটি একক InnoDB টেবিল বের করতে, এটি করুন:
ALTER TABLE mydb.mytable ENGINE=InnoDB;
এটি একটি ফাইল তৈরি করবে মূল কাঠামোর ফাইলটি রাখুন
- /var/lib/mysql/mydb/mytable.frm
- /var/lib/mysql/mydb/mytable.ibd
আপনি প্রতিটি InnoDB টেবিলের জন্য এটি করতে পারেন। দুর্ভাগ্যক্রমে, ইবদাটা 1 150 গিগাবাইট থাকবে।
ERROR 1071 (42000) at line 25: Specified key was too long; max key length is 1000 bytes
কোনও ধারণা?