কীভাবে নিরাপদে মাইএসকিউএল ইন্নাডব ভেরিয়েবল 'ইনানোডব_লগ_ফিল_সাইজ' পরিবর্তন করবেন?


105

সুতরাং আমি ইনোডিবি টিউন করার ক্ষেত্রে মোটামুটি নতুন। আমি আস্তে আস্তে মাইআইসাম থেকে ইনোডিবিতে টেবিলগুলি (যেখানে প্রয়োজন সেখানে) পরিবর্তন করছি। আমি ইনোডাব-এ প্রায় 100MB পেয়েছি, তাই আমি innodb_buffer_pool_sizeভেরিয়েবলটি 128MB এ বাড়িয়েছি :

mysql> show variables like 'innodb_buffer%';
+-------------------------+-----------+
| Variable_name           | Value     |
+-------------------------+-----------+
| innodb_buffer_pool_size | 134217728 |
+-------------------------+-----------+
1 row in set (0.00 sec)

যখন আমি innodb_log_file_sizeমানটি পরিবর্তন করতে যাই ( লগ ফাইল ফাইলের আকারটি বাফরের আকারের 25% এ পরিবর্তন করতে mysql এর ইনোডাব কনফিগারেশন পৃষ্ঠা মন্তব্যে my.cnf। সুতরাং এখন আমার মাই সিএনএফ দেখতে দেখতে:

# innodb
innodb_buffer_pool_size = 128M
innodb_log_file_size = 32M

আমি যখন সার্ভারটি পুনরায় চালু করব তখন আমি এই ত্রুটিটি পেয়েছি:

110216 9:48:41 InnoDB: বাফার পুল শুরু হচ্ছে, আকার = 128.0M
110216 9:48:41 InnoDB: বাফার পুলের সম্পূর্ণ সূচনা
InnoDB: ত্রুটি: লগ ফাইল ./ib_logfile0 বিভিন্ন আকারের 0 ইনোনডিবি
: উল্লিখিত থেকে .cnf ফাইল 0 33554432 বাইট!
110216 9:48:41 [ত্রুটি] প্লাগইন 'InnoDB' ইন ফাংশন ত্রুটি ফিরে পেয়েছে returned
110216 9:48:41 [ত্রুটি] স্টোর ইঞ্জিন হিসাবে প্লাগইন 'InnoDB' নিবন্ধন ব্যর্থ হয়েছে।

সুতরাং আমার প্রশ্ন: পুরানো লগ_ফায়ালগুলি মুছে ফেলা নিরাপদ, বা innodb_log_file_sizeভেরিয়েবল পরিবর্তন করার জন্য অন্য কোনও পদ্ধতি আছে ?


1
শুধু my.ini তে ইনোডব_লগ_ফিল_সাইজটি মন্তব্য করুন .....

5
হুম, আমি যখন এটি ডিফল্ট মান থেকে পরিবর্তন করার চেষ্টা করছি তখন আমি কেন এটির জন্য ডিফল্ট মানটি ব্যবহার করতে চাই?
ডেরেক ডোনয়

হ্যাঁ মন্তব্য করে ইনোডাব_লগ_ফায়াল_ সাইজের লাইনটি এর কাজগুলি .. ধন্যবাদ।
মুহাম্মাদ উমার ফারুক

2
@ মুমহমুদুমারফারুউকফ্র্যাঙ্ক অবশ্যই কাজ করে - কারণ আপনি আর ভেরিয়েবলের মান পরিবর্তন করছেন না, তাই পুরো পয়েন্টটি মোটা করে দিচ্ছেন। আমি চাই মন্তব্যগুলিকে হ্রাস করার কোনও উপায় ছিল।
dr01

উত্তর:


83

হ্যাঁ মাইএসকিএলডি বন্ধ হয়ে গেলে লগ ফাইলটি মুছে ফেলা নিরাপদ

এর আলোকে, কেবল নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করুন:

mysql -uroot -p... -e"SET GLOBAL innodb_fast_shutdown = 0"
service mysql stop
mv /var/lib/mysql/ib_logfile[01] /tmp
service mysql start

মাইএসকিএলডি শুরু করা পুনরায় তৈরি করবে ib_logfile0এবংib_logfile1

একবার চেষ্টা করে দেখো !!!

আপডেট ২০১১-১০-২০১ 16 16:40 ইডিটি

এটি লোগো ফাইলগুলি পুনরায় করা পূর্বে InnoDB বাফার পুলের সমস্ত ডেটা পরিষ্কার করে ফেলেছে, আপনার শাটডাউন করার প্রায় 1 ঘন্টা আগে এই বিকল্পটি সেট করা উচিত:

SET GLOBAL innodb_max_dirty_pages_pct = 0;

ডিফল্টরূপে, ইনোডাব_ম্যাক্স_ডাটি_পৃষ্ঠা_পিটি 75 (মাইএসকিউএল 5.5+) বা 90 (মাইএসকিউএল 5.5 এর পূর্বে)। এটি শূন্যে সেট করা নোংরা পৃষ্ঠাগুলির সংখ্যা InnoDB বাফার পুলের 1% এর নীচে রাখে। পারফর্মিং service mysql stopযাইহোক এটি করে। এছাড়াও, একটি শাটডাউন পুনরায় লগতে থাকা কোনও অবশিষ্ট আইটেম শেষ করবে। এই বিকল্পটি ধরে রাখতে কেবল এটি /etc/my.cnf এ যুক্ত করুন:

[mysqld]
innodb_max_dirty_pages_pct = 0

আপডেট 2013-04-19 16:16 ইডিটি

আমি আমার উত্তরটি ইনোডাব_ফেষ্ট_শুটডাউন দিয়ে আরও কিছুটা আপডেট করেছি কারণ আমি মাইএসকিএল পুনরায় চালু করতে এবং এটি করার জন্য মাইএসকিএল বন্ধ করতাম। এখন, এই এক-পদক্ষেপটি অত্যাবশ্যক, কারণ অনির্দিষ্ট প্রতিটি লেনদেনের InnoDB ট্রানজেকশন লগের (বাইরের দিকে ইনোডিবি ইনফ্রাস্ট্রাকচার দেখুন ) অন্যান্য চলমান অংশ থাকতে পারে ।

দয়া করে মনে রাখবেন যে ইনোডাব_ফেস_শুটডাউনটি 2 এ সেট করার ফলে লগগুলিও পরিষ্কার হয়ে যাবে তবে আরও চলন্ত অংশগুলি এখনও বিদ্যমান এবং মাইএসকিএলডি-এর প্রারম্ভের সময় ক্র্যাশ রিকভারিটি বেছে নেওয়া হয়েছে। 0 সেট করা সবচেয়ে ভাল।


1
দুর্দান্ত উত্তর এবং আপডেট এছাড়াও দুর্দান্ত। আমার একমাত্র পরামর্শ হ'ল আইব_লগ ফাইলগুলি অন্যায় হয়ে যাওয়ার পরে অন্য কোনও স্থানে অনুলিপি করা। এটি আপনাকে ফাইলগুলি কীভাবে আকার দেবে সে সম্পর্কে ধারণা পেতে সহায়তা করবে: mysqlperformanceblog.com/2011/07/09/…
জাস্টিন নোয়েল

5
আমার জন্যও কাজ করেছেন, তবে: লিনাক্স কনসোল ইউআই বিভ্রান্তিকর হতে পারে - যদি আপনি একটি বড় লগ ফাইলের আকার সেট করেন (কয়েকশ এমবি বা আরও বেশি) মাইএসকিএলডি স্টার্টআপে অনেক সময় লাগে। কনসোল ইউআই আপনাকে বিন্দুগুলি প্রদর্শন করছে এবং তারপরে "ব্যর্থ!" দেখায়, তবে বাস্তবে মাইএসকিউএল এখনও শুরু হচ্ছে। আপনি "মাইকিকিএলডি: সংযোগের জন্য প্রস্তুত" না হওয়া পর্যন্ত অপেক্ষা করুন এবং লগ ফাইলটি পড়ুন (বা "টেল-ফ [লগ-ফাইল]" দিয়ে লগ ফাইলটি পর্যবেক্ষণ করুন)। এবং উভয় লগ ফাইল ডিস্কে বরাদ্দ।
f055

2
সতর্কতামূলক !! পদক্ষেপ 3 আমার পক্ষে কাজ করে নি এবং আমার হৃদয় প্রায় বন্ধ হয়ে যায় যখন আমি দেখি যে মাইএসকিএল ইনোডিবি ছাড়াই লোড হয়ে যাচ্ছে, মাইএসকিএল থামাতে হবে এবং সেগুলি নিজেই সরিয়ে ফেলতে হয়েছিল এবং আবার মাইএসকিউএল শুরু করতে হয়েছিল। পরামর্শের দুটি টুকরো: ১. আপনার ইতিমধ্যে বিদ্যমান লগ ফাইলগুলি ব্যাকআপ করুন, ২. ম্যানুয়ালি ফাইলগুলি মুছুন
পিয়ুষ কুশওয়াহা

2
পিয়েউশ ঠিক বলেছেন। এমনকি মাইএসকিএল ডকুমেন্টেশন কিছু ভুল হয়ে গেলে আপনার লগফিলগুলি ব্যাক আপ করার পরামর্শ দেয়
গ্রেগ

1
@ গ্রেগ এই কারণেই আমি ব্যবহার করি SET GLOBAL innodb_fast_shutdown = 0;। মাইএসকিউএল বন্ধ হয়ে গেলে, সমস্ত ট্রানজেকশনাল সমস্ত চলমান অংশগুলি থেকে রিডো লগগুলি (ib_logfile0 এবং ib_logfile1) সহ ফ্লাশ করা হয়। তাদের রাখতে পারেন। সম্পূর্ণ ফ্লাশযুক্ত লগ সহ আমার এখনও সমস্যা নেই।
RolandoMySQLDBA 21

31

পরিবর্তে আমি সরকারী পদ্ধতির সুপারিশ করব, যা আমি সুবিধার জন্য এখানে পুনরুত্পাদন করি:

মাইএসকিউএল 5.6.7 বা তার আগের ইনোইডিবি লগ ফাইলের নম্বর বা আকার পরিবর্তন করতে, নিম্নলিখিত নির্দেশাবলী ব্যবহার করুন। ব্যবহারের পদ্ধতিটি ইনডোড_ফেষ্ট_শুটডাউনয়ের মানের উপর নির্ভর করে, যা শাটডাউন অপারেশনের আগে সিস্টেমের টেবিলস্পেসকে পুরোপুরি আপ টু ডেট আনতে হবে কিনা তা নির্ধারণ করে:

  • যদি ইিনোডবি_ফেস_শুটডাউন 2 তে সেট না করা থাকে: মাইএসকিউএল সার্ভারটি বন্ধ করুন এবং এটি পুনরায় লগতে অসামান্য লেনদেনের জন্য কোনও তথ্য নেই তা নিশ্চিত করার জন্য এটি ত্রুটি ছাড়াই বন্ধ হয়ে গেছে তা নিশ্চিত করুন। পুরানো পুনরায় লগ ফাইলগুলি নিরাপদ স্থানে অনুলিপি করুন, যদি শাটডাউনের সময় কিছু ভুল হয়ে যায় এবং টেবিলস্পেসটি পুনরুদ্ধার করতে আপনার প্রয়োজন need লগ ফাইল ডিরেক্টরি থেকে পুরানো লগ ফাইলগুলি মুছুন, লগ ফাইল কনফিগারেশন পরিবর্তন করতে my.cnf সম্পাদনা করুন এবং আবার মাইএসকিউএল সার্ভার শুরু করুন। mysqld দেখতে পাচ্ছে যে কোনও InnoDB লগ ফাইল প্রারম্ভকালে উপস্থিত নেই এবং একটি নতুন তৈরি করে।

  • যদি ইনোডাব_ফেষ্ট_সুটডাউন 2 তে সেট করা থাকে: ইনোডাব_ফেষ্ট_সুটডাউন 1 তে সেট করুন:

mysql> SET GLOBAL innodb_fast_shutdown = 1;

তারপরে আগের আইটেমের নির্দেশাবলী অনুসরণ করুন।

মাইএসকিউএল ৫..6.৮ অনুসারে , ইনোডিবিবি লগ ফাইলের নম্বর বা আকার পরিবর্তন করার সময় ইনোডাব_ফায়স্ট_শুটডাউন সেটিংস আর প্রাসঙ্গিক নয়। অতিরিক্ত হিসাবে, আপনার আর পুরানো লগ ফাইলগুলি অপসারণের প্রয়োজন নেই, যদিও আপনি এখনও ব্যাকআপ হিসাবে পুরানো লগ ফাইলগুলি কোনও নিরাপদ স্থানে অনুলিপি করতে পারেন। InnoDB লগ ফাইলের নম্বর বা আকার পরিবর্তন করতে, নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করুন:

  1. মাইএসকিউএল সার্ভারটি বন্ধ করুন এবং নিশ্চিত করুন যে এটি ত্রুটি ছাড়াই বন্ধ হয়ে গেছে।

  2. লগ ফাইল কনফিগারেশন পরিবর্তন করতে my.cnf সম্পাদনা করুন। লগ ফাইলের আকার পরিবর্তন করতে, ইনোডাব_লগ_ফিল_সাইজ কনফিগার করুন। লগ ফাইলের সংখ্যা বাড়াতে, ইনোডাব_লগ_ফাইলস_ইন_গ্রুপ কনফিগার করুন।

  3. আবার মাইএসকিউএল সার্ভার শুরু করুন।

যদি ইনোডিবি সনাক্ত করে যে ইনডোডবি_লগ_ফিল_সাইজ পুনরায় লগ ফাইলের আকারের চেয়ে পৃথক, এটি একটি লগ চেকপয়েন্ট লিখবে, পুরানো লগ ফাইলগুলি বন্ধ এবং সরিয়ে ফেলবে, অনুরোধ করা আকারে নতুন লগ ফাইল তৈরি করবে এবং নতুন লগ ফাইলগুলি খুলবে।


এই প্রশ্নের আপডেট হিসাবে এটি একটি ভাল উত্তর। +1 !!!
রোল্যান্ডোমাইএসকিউএলডিবিএ

2
এটি কোনও "আপডেট" নয়। এই ম্যানুয়াল পৃষ্ঠাগুলি দীর্ঘকাল ধরে রয়েছে। আমি সর্বদা হুইলটি পুনর্নবীকরণ এবং ডুপ্লিকেট করা তথ্যের পরিবর্তে ম্যানুয়াল থেকে প্রথম হাতের তথ্যের (সেখানে অন্যতম সেরা ম্যানুয়াল) সুপারিশ করি (যা আমাদের ডিবিএ সবচেয়ে ঘৃণা করে)।
র্যান্ডমসাইড

এটি মাইএসকিউএল 5.6 হিসাবে পছন্দসই পদ্ধতি। যদি আপনি 5.6 এর পূর্বে কোনও সংস্করণে চলমান হয়ে থাকে তবে এটি কাজ করবে না।
ডেরেক

20

innodb_buffer_pool_size- কেবল পরিবর্তন করুন my.cnf( my.ini) এবং mysqld পুনরায় আরম্ভ করুন art

innodb_log_file_sizeকম সমালোচনা করা হয়। কারণ না থাকলে এটি পরিবর্তন করবেন না। রোল্যান্ড পদক্ষেপগুলি সরবরাহ করেছিল , তবে একটি দিক আমাকে চিন্তিত করেছে ... আমি জানি না প্রথম দুটি পদক্ষেপ গুরুত্বপূর্ণ কিনা; দেখে মনে হচ্ছে তারা হতে পারে:

  1. set innodb_fast_shutdown = OFF
  2. মাইএসকিএল পুনরায় আরম্ভ করুন
  3. বন্ধ করুন mysql
  4. লগফাইলগুলি সরান
  5. মাইএসকিএল শুরু করুন

লগ ফাইলগুলি অসম্পূর্ণ ব্যবসায়ের উপর নজর রাখে; " innodb_fast_shutdown" পুনরায় আরম্ভ করার পরে সেই জিনিসগুলি মোকাবেলা করতে বলে । সুতরাং ফাইলগুলি মুছে ফেলা তথ্য হারাতে পারে?

নতুন সংস্করণে জিনিসগুলির উন্নতি হয়েছে: (মন্তব্যগুলিতে আরও আলোচনা)

  • 5.6 innodb_log_file_size> 4 জিবি এর জন্য অনুমতি দেয়
  • 5.6 innodb_log_file_sizeপ্রথম আইলগ * অপসারণ ছাড়াই পরিবর্তন করা যেতে পারে
  • 5.7 গতিশীল আকার পরিবর্তন করতে অনুমতি দেয় innodb_buffer_pool_size

আমার কি লগ_ফাইলে_ সাইজ পরিবর্তন করা উচিত?

GLOBAL STATUSলগ চক্রের আগে মিনিটের সংখ্যা গণনা করতে ব্যবহার করুন ।

Uptime / 60 * innodb_log_file_size / Innodb_os_log_written`

যদি এটি (০ (মিনিট) এর থেকে অনেক কম হয় তবে এটি লগ_ফাইলে_ সাইজ বাড়াতে সহায়তা করতে পারে। যদি এটি আরও বেশি হয় তবে লগ ফাইলগুলি ডিস্কের স্থান নষ্ট করছে। এই "1 ঘন্টা" বরং স্বেচ্ছাচারী, সুতরাং আপনি যদি এটির কাছাকাছি থাকেন তবে লগ_ফাইলে_সাইজ পরিবর্তন করবেন না।

innodb_log_files_in_group2 এর ডিফল্ট এ ছেড়ে দিন ।


আপনার উদ্বেগকে +1 ডক্স
জ্যাক ডগলাস

আমি এই উত্তরটি একবার দেখেছি এবং আমি প্রথম লাইনটি পছন্দ করি। আমার সাধারণত ক্লায়েন্টরা --skip-networkingশেষ মুহুর্তের উপায়গুলি পরিবর্তনের জন্য সাবধানতা হিসাবে মাইএসকিএল নামিয়ে আনত । আপনার প্রথম লাইনটি (সেট ইনডোড_ফেষ্ট_শুটডাউন = অফ) সেটাকে সরিয়ে দেয়। +1 !!!
রোল্যান্ডোমাইএসকিউএলডিবিএ

1
Upvotes জন্য ধন্যবাদ। নতুন পাঠকদের এটির প্রয়োজন নাও হতে পারে। ইন 5.6.8 , innodb_log_file_sizeiblog ফাইল অপসারণ ছাড়া এটিকে পরিবর্তন করা অনুমতি উন্নত হয়েছে।
রিক জেমস

আপনার বোঝানো কি "আরও সমালোচক", "কম সমালোচক" নয়?
ইগোর

@ ইগোর - না যদি আপনি লগ_ফাইলে_ সাইজটি খুব ছোট করে থাকেন তবে এটির মাধ্যমে অতিরিক্ত আই / ও ছিটকে পড়বে। আমি খুব কমই এটি দেখতে। আপনার যদি এটি খুব বেশি পরিমাণে থাকে তবে আপনি কেবল ডিস্কের জায়গা নষ্ট করছেন। এটি নির্ধারণের লক্ষ্যটি এক ঘন্টার মধ্যে চক্র করা। তবে 10 মিনিট বনাম 10 ঘন্টা - খুব বেশি গুরুত্বপূর্ণ নয়। আরও ...
রিক জেমস

1

আপনি যখন mysql এ লগইন করেন তখন সেই কমান্ডগুলি টাইপ করুন:

pager grep seq;
show engine innodb status \G select sleep(60); show engine innodb status \G

আপনি দুটি নম্বর পাবেন। প্রথমে আপনি একটি পান এবং তারপরে এক মিনিট অপেক্ষা করুন। আপনি অন্য পাবেন।

বলুন প্রথমটি 3.456.718.123 এবং দ্বিতীয়টি 4.098.873.134

এখন (4.098.873.134-3.856.718.123) * 60/1024/1024

ফলাফল = 13.856 এমবি

আপনার দুটি লগ ফাইল রয়েছে। সুতরাং এটি দুটি দ্বারা ভাগ করুন এবং আপনি 7.000 এমবি কাছাকাছি একটি নম্বর পাবেন। কেবল নিশ্চিত হতে, আপনার লগ ফাইলের আকার 8GB সেট করুন


1
এটি সুস্পষ্ট নয় (আমার কাছে কমপক্ষে) যে এটি আসলে প্রশ্নের উত্তর দেয়। এটি লগ ফাইলের জন্য বিকল্প আকারের পরামর্শ বলে মনে হচ্ছে, নিরাপদে লগ ফাইলের আকার কীভাবে পরিবর্তন করা যায় তা নয় ।
আরডিফোজ ২

1
@RDFozz আপনি ঠিক বলেছেন এটি কীভাবে লগ ফাইলের আকার পরিবর্তন করতে পারে তার উত্তর দেয় না। এই প্রশ্নটির উত্তর দেয় কীভাবে ইনোডাব_লগ_ফাইলে_সাইজ সেট করার জন্য সংখ্যা নির্ধারণ করা যায়। আমি ইতিমধ্যে যেমন একটি প্রশ্ন পাঁচ বছর আগে এর উত্তরে (অনুশীর্ষ দেখুন Log File Sizeমধ্যে dba.stackexchange.com/questions/23189/... )
RolandoMySQLDBA

আমি কেবল সহায়তা করতে চেয়েছিলাম: / যদিও আমি এর সঠিক উত্তরটি জানি না।
লিনাক্স নবাবী

-4

ক্লাউন মাইএসকিএল: মাইএসকিএল -আর / ইত্যাদি / মাইএসকিএল / ভার / লিবিব / মাইএসকিএল এবং& সিডি / ভার / লিবিব / মাইএসকিএল &&mmf ইব_লগফাইল * & পরিষেবা মাইএসকিএল পুনঃসূচনা || পরিষেবা mysql পুনঃসূচনা

এটি চেষ্টা করে দেখুন, কাজ করার গ্যারান্টিযুক্ত [দেবিয়ান 6 তে পরীক্ষা করা হয়েছে]


2
এটি একটি পরিষ্কার শাটডাউন গ্যারান্টি দেয় না। এটি কেবলমাত্র হালকা লোড সহ কোনও সার্ভারে গড় ক্ষেত্রে কাজ করতে পারে তবে আপনি যদি আপনার ডাটাবেসের সততা সম্পর্কে যত্নবান হন তবে এটির প্রস্তাব দেওয়া হয় না।
এমিল বিক্রষ্টম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.