এটি কোনও মুছে ফেলা টেবিলগুলি থেকে ডেটা সংরক্ষণ না করে কোনও মাইএসকিএল ইনোডাব স্টোরেজ ইঞ্জিন পরিষ্কার করা সম্ভব?
বা প্রতিবারই কি আমার একটি নতুন ডেটাবেস পুনরায় তৈরি করতে হবে?
এটি কোনও মুছে ফেলা টেবিলগুলি থেকে ডেটা সংরক্ষণ না করে কোনও মাইএসকিএল ইনোডাব স্টোরেজ ইঞ্জিন পরিষ্কার করা সম্ভব?
বা প্রতিবারই কি আমার একটি নতুন ডেটাবেস পুনরায় তৈরি করতে হবে?
উত্তর:
ইনোডিবি সম্পর্কিত আরও একটি সম্পূর্ণ উত্তর এখানে। এটি একটি দীর্ঘ প্রক্রিয়া একটি বিট, কিন্তু প্রচেষ্টা মূল্যবান হতে পারে।
মনে রাখবেন যে /var/lib/mysql/ibdata1
InnoDB অবকাঠামোর ব্যস্ততম ফাইল। এটিতে সাধারণত ছয় ধরণের তথ্য থাকে:
Pictorial Representation of ibdata1
অনেক লোক ibdata
আরও ভাল ডিস্ক-স্পেস ম্যানেজমেন্ট এবং পারফরম্যান্সের আশায় একাধিক ফাইল তৈরি করে তবে বিশ্বাসটি ভুল হয়ে যায়।
OPTIMIZE TABLE
?দুর্ভাগ্যক্রমে, OPTIMIZE TABLE
ভাগ করা টেবিল-স্পেস ফাইলে থাকা ibdata1
কোনও InnoDB টেবিলের বিরুদ্ধে দৌড়ানো দুটি জিনিস করে:
ibdata1
ibdata1
ডেটা এবং সূচী পৃষ্ঠাগুলিতে সংযোজন করা হওয়ায় বাড়ায়ibdata1
তবে আপনি সারণী ডেটা এবং সারণী সূচীগুলি পৃথক করে ibdata1
এগুলি স্বাধীনভাবে পরিচালনা করতে পারেন।
OPTIMIZE TABLE
সাথে চালাতে পারি innodb_file_per_table
?মনে করুন আপনি যোগ innodb_file_per_table
করতে হবে /etc/my.cnf (my.ini)
। আপনি কি কেবলমাত্র OPTIMIZE TABLE
সমস্ত InnoDB টেবিলগুলিতে চালাতে পারবেন ?
সুসংবাদ : আপনি যখন সক্ষম OPTIMIZE TABLE
হয়ে innodb_file_per_table
চলেছেন তখন .ibd
এটি সেই টেবিলের জন্য একটি ফাইল তৈরি করবে । উদাহরণস্বরূপ, আপনার যদি টেবিল mydb.mytable
উইথ ড্যাটাডির থাকে তবে /var/lib/mysql
এটি নিম্নলিখিত উত্পাদন করে:
/var/lib/mysql/mydb/mytable.frm
/var/lib/mysql/mydb/mytable.ibd
এই .ibd
টেবিলের জন্য ডেটা পৃষ্ঠাগুলি এবং সূচি পৃষ্ঠা থাকবে will গ্রেট।
খারাপ সংবাদ : আপনারা যা কিছু করেছেন তা হ'ল mydb.mytable
জীবন যাপনের থেকে ডেটা পৃষ্ঠাগুলি এবং সূচী পৃষ্ঠাগুলি নিষ্কাশন করা ibdata
। প্রতিটি সারণীর জন্য ডেটা ডিকশনারি এন্ট্রি সহ mydb.mytable
এখনও তথ্য অভিধানে রয়ে গেছে ( আইবডাটা 1 এর চিত্রের উপস্থাপনা দেখুন )। আপনি কেবল ibdata1
এই পয়েন্টটি মুছে ফেলতে পারবেন না !!! দয়া করে মনে রাখবেন যে ibdata1
এটি মোটেই সঙ্কুচিত হয়নি।
ibdata1
একবার সঙ্কোচন করার জন্য আপনাকে নিম্নলিখিতগুলি করতে হবে:
পাঠ্য ফাইলে mysqldump
সমস্ত ডাটাবেস ডাম্প (উদাহরণস্বরূপ ) .sql
( SQLData.sql
নীচে ব্যবহৃত হয়)
সমস্ত ডেটাবেস ফেলে দিন ( mysql
এবং ব্যতীত information_schema
) ক্যাভিট : একটি সতর্কতা হিসাবে, দয়া করে আপনার সমস্ত ব্যবহারকারীর অনুদানের জায়গায় রয়েছে তা নিশ্চিত করতে এই স্ক্রিপ্টটি চালান:
mkdir /var/lib/mysql_grants
cp /var/lib/mysql/mysql/* /var/lib/mysql_grants/.
chown -R mysql:mysql /var/lib/mysql_grants
Mysql এ লগইন করুন এবং চালান SET GLOBAL innodb_fast_shutdown = 0;
(এটি সম্পূর্ণরূপে ib_logfile0
এবং এর থেকে সমস্ত লেনদেনমূলক পরিবর্তনগুলি ফ্লাশ করে দেবে ib_logfile1
)
শাটডাউন মাইএসকিউএল
/etc/my.cnf
(বা my.ini
উইন্ডোজ) এ নিম্নলিখিত লাইনগুলি যুক্ত করুন
[mysqld]
innodb_file_per_table
innodb_flush_method=O_DIRECT
innodb_log_file_size=1G
innodb_buffer_pool_size=4G
(Sidenote জন্য আপনার সেট যাই হোক না কেন innodb_buffer_pool_size
, তা নিশ্চিত করতে innodb_log_file_size
25% হল innodb_buffer_pool_size
।
এছাড়াও: innodb_flush_method=O_DIRECT
উইন্ডোজ উপলভ্য নয়)
মুছুন ibdata*
এবং ib_logfile*
, ptionচ্ছিকভাবে, আপনি /var/lib/mysql
বাদে সমস্ত ফোল্ডার মুছে ফেলতে পারেন /var/lib/mysql/mysql
।
স্টার্ট মাইএসকিউএল (এই পুনঃ হবে ibdata1
[ডিফল্টরূপে 10MB] এবং ib_logfile0
এবং ib_logfile1
1G প্রতিটি)।
আমদানি SQLData.sql
এখন, ibdata1
বাড়বে তবে কেবল টেবিল মেটাডেটা থাকবে কারণ প্রতিটি ইনোডিবি টেবিলের বাইরে উপস্থিত থাকবে ibdata1
। ibdata1
অন্য টেবিলের জন্য আর InnoDB ডেটা এবং সূচি থাকবে না।
উদাহরণস্বরূপ, ধরুন আপনার নামের একটি InnoDB টেবিল রয়েছে mydb.mytable
। আপনি যদি সন্ধান করেন /var/lib/mysql/mydb
তবে টেবিলের প্রতিনিধিত্বকারী দুটি ফাইল দেখতে পাবেন:
mytable.frm
(স্টোরেজ ইঞ্জিন শিরোনাম)mytable.ibd
(সারণী ডেটা এবং সূচি)সঙ্গে innodb_file_per_table
বিকল্প /etc/my.cnf
, আপনি চালাতে পারেন OPTIMIZE TABLE mydb.mytable
এবং ফাইল /var/lib/mysql/mydb/mytable.ibd
আসলে সঙ্কুচিত হবে।
আমি আমার কেরিয়ারে মাইএসকিউএল ডিবিএ হিসাবে অনেকবার এটি করেছি। প্রকৃতপক্ষে, আমি প্রথমবার এটি করেছি, আমি একটি 50 গিগাবাইট ibdata1
ফাইলটি কেবল 500 এমবিতে নামিয়ে দিয়েছি !
একবার চেষ্টা করে দেখো. যদি আপনার এই বিষয়ে আরও প্রশ্ন থাকে তবে কেবল জিজ্ঞাসা করুন। আমাকে বিশ্বাস কর; এটি স্বল্প মেয়াদে পাশাপাশি দীর্ঘ পথের কাজ করবে।
ধাপ 6 এ, যদি মাইএসকিউএল কারণে পুনরায় চালু করতে পারবেন না mysql
স্কিমা বাদ শুরু পদক্ষেপ 2. এ বর্ণন আপনাকে ফেরত শারীরিক কপি তৈরি mysql
স্কিমা। আপনি নিম্নলিখিত হিসাবে এটি পুনরুদ্ধার করতে পারেন:
mkdir /var/lib/mysql/mysql
cp /var/lib/mysql_grants/* /var/lib/mysql/mysql
chown -R mysql:mysql /var/lib/mysql/mysql
Step ধাপে ফিরে যান এবং চালিয়ে যান
ধাপ ৫-এ ইনোডাব_বফলার_পুল_সাইজের 25% এ ইনোডাব_লগ_ফাইল_সাইজ স্থাপনের ক্ষেত্রে , এটি কম্বল নিয়মটি বরং পুরানো স্কুল।
পিছনে July 03, 2006
, কেন সঠিক ইনডোড_ব্লগ_ফাইলে_সাইজ চয়ন করতে হবে তা পারকোনার একটি সুন্দর নিবন্ধ ছিল । পরবর্তীতে, Nov 21, 2008
পারকোনা আরও একটি নিবন্ধটি অনুসরণ করেছিলেন যাতে কীভাবে এক ঘন্টা মূল্য পরিবর্তনের জন্য শীর্ষের কাজের চাপের উপর ভিত্তি করে সঠিক আকারটি গণনা করা যায় ।
লগের আকার নির্ণয়ের বিষয়ে এবং যেখানে আমি এই দুটি পারকোনার নিবন্ধটি উল্লেখ করেছি সে সম্পর্কে আমি ডিবিএ স্ট্যাকএক্সচেঞ্জে পোস্ট লিখেছি।
Aug 27, 2012
: 48 জিবি র্যাম সহ সার্ভারে 30 জিবি ইনোডিবি টেবিলের জন্য উপযুক্ত টিউনিংJan 17, 2013
: মাইএসকিউএল 5.5 - ইনোডব - ইনোডাব_লগ_ফিল_সাইজ 4 জিবি এর চেয়ে বেশি সংযুক্ত?ব্যক্তিগতভাবে, আমি এখনও প্রাথমিক সেটআপের 25% নিয়ম নিয়ে যেতে পারি। তারপরে, কাজের সময় কাজের চাপ আরও সঠিকভাবে নির্ধারণ করা যেতে পারে , আপনি ঠিক কয়েক মিনিটের মধ্যে কোনও রক্ষণাবেক্ষণ চক্রের সময় লগগুলিকে পুনরায় আকার দিতে পারেন ।
innodb_open_tables
হবে। ডিফল্টটি 300.
InnoDB ইঞ্জিন মুছে ফেলা ডেটা সংরক্ষণ করে না। আপনি সারিগুলি andোকান এবং মুছে ফেলার সাথে সাথে অব্যবহৃত স্থান InnoDB স্টোরেজ ফাইলের মধ্যে বরাদ্দ দেওয়া হয়। সময়ের সাথে সাথে সামগ্রিক স্থান হ্রাস পাবে না, তবে সময়ের সাথে সাথে 'মুছে ফেলা এবং খালি করা' স্থানটি ডিবি সার্ভার দ্বারা স্বয়ংক্রিয়ভাবে পুনরায় ব্যবহৃত হবে।
আপনি টেবিলগুলির ম্যানুয়াল পুনরায় সংগঠনের মাধ্যমে ইঞ্জিনের ব্যবহৃত স্পেস টিউন ও পরিচালনা করতে পারেন। এটি করার জন্য, মাইএসকিএলড্প ব্যবহার করে প্রভাবিত টেবিলগুলিতে ডেটা ফেলে দিন, টেবিলগুলি ফেলে দিন, মাইএসকিএল পরিষেবাটি পুনরায় চালু করুন এবং তারপরে ডাম্প ফাইলগুলি থেকে টেবিলগুলি পুনরায় তৈরি করুন।