মাইএসকিউএল ইনোডিবি - ইনোডাব_ফিল_পি_ টেবিল কনস?


32

ডিফল্টরূপে মাইএসকিউএল ইনোডিবি সমস্ত গ্লোবাল ফাইলে সমস্ত ডিবি'র সমস্ত টেবিল সঞ্চয় করে। আপনি এটি কনফিগারেশনে ইনোডোবি_ফিল_পিটার_সামগ্রী স্থাপন করে এটি পরিবর্তন করতে পারবেন, যা প্রতিটি টেবিলে একটি ডেটা ফাইল তৈরি করে।

আমি ভাবছি কেন innodb_file_per_tableডিফল্টরূপে সক্ষম হয় না। এটি ব্যবহার করার কি ডাউনসাইড আছে?

উত্তর:


32

আমার এইটির পুরো উত্তর আছে।

একবার ইনোডোবি_ফাইলে_পিটি টেবিল স্থাপন করা হয়ে গেলে এবং নতুন ইনোডিবি টেবিলগুলি সঙ্কুচিত করা যেতে পারে 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 সেট করা সবচেয়ে ভাল।


দুর্দান্ত তথ্য - ধন্যবাদ! 50 জিবি >> 50 এমবি - এটি বেশ চিত্তাকর্ষক!
আপক্রিক

হাই, আপনি এখানে যেমন লিখেছেন ঠিক তেমন চেষ্টা করার চেষ্টা করেছি, 'কেবল' সমস্যাটি হ'ল সার্ভারটি পরে শুরু হয় না। যদি আমি সার্ভিসটি মাইএসকিএল শুরু করি তবে এটি কেবল সেখানে স্তব্ধ। আমি যদি আমার পুরানো সিএনএফ ফাইলটি ফিরিয়ে ফেলি তবে সবকিছু ঠিক আছে। আপনি কি এই সম্পর্কে কোন ক্লু আছে?
নিকোলা পেলুচেটি

এই প্রশ্নটি নিকোলার জন্য: আপনি কি পদক্ষেপ 5 করেছেন ???
RolandoMySQLDBA

@ নিকোলার জন্য আরেকটি প্রশ্ন: আপনার সিস্টেমে আপনার র‌্যাম কত আছে ???
RolandoMySQLDBA

2
সাবধান হও! innodb_fast_shutdown=0লগ ফাইলগুলি মুছে ফেলার জন্য বিকল্পটি মাইএসকিউএল এ সেট করা আবশ্যক! ( ib_logfile0এবং ib_logfile1) অন্যথায়, আপনি ডেটা হারাতে পারেন!
টোটার

12

বাগ দেখুন ।

এটি ব্যবহার করার কি ডাউনসাইড আছে?

  • আরও খোলা ফাইল
  • ওভারহেড খুলুন / আবার খুলুন
  • .ibd ফাইল সঙ্কুচিত হয় না (দেখুন 1 , 2 )

আমি সর্বদা বড় ডেটাবেজে ইনোডাব_ফিল_পিটার_ টেবিল ব্যবহার করি।


এমনকি যদি আপনি এটি ব্যবহার না করেন তবে ইবদাটা ফাইলগুলি সঙ্কুচিত হবে না :(
মিনায়েভ

1
ধন্যবাদ। আমি আরও ভাবছি যে প্রতি-ডিবি-র ফাইল-ফাইল করার বিকল্প নেই কেন?
আপক্রিক

1
@ ইউপিকেক্রিক, টেবিলগুলি সত্তা। ডাটাবেসগুলি সত্ত্বার নিজস্ব ডানদিকে প্রতিষ্ঠানের চেয়ে লজিক্যাল গোষ্ঠী। এটি মাইআইএসএএম এর সাথে আরও সুস্পষ্ট, যেখানে ডাটাবেসগুলি ডিরেক্টরি এবং টেবিলগুলি ফাইল are
জন গার্ডেনিয়ার্স

কেবল এটি চিহ্নিত করতে চেয়েছিলাম যে .আইবিডি ফাইলগুলি স্বয়ংক্রিয়ভাবে সঙ্কুচিত হয় না ibdata1, প্রতি টেবিলে ফাইলের বিকল্পও হয় না। কমপক্ষে একটি .ibd ব্যবহার করে সঙ্কুচিত করা সম্ভব optimize tableযা ইবদাতা সংকুচিত হওয়ার তুলনায় তুচ্ছ।
রোমানস্টে

8

ইনোডাব_ফায়াল_পার_সামগ্রী মারিয়াডিবিতে ডিফল্টরূপে সক্ষম হয়।


1
খনিতে নেই (সেন্টোস 7-এ ডিফল্ট সংস্করণ)। আপনার মাইএসকিউএল 5.6.6 বা আরও নতুন সমতুল্য দরকার। অন্যথায় ডিফল্ট বন্ধ আছে
মনিকা 3'18

2

যে কারণটি আমি ব্যবহার না করা বেছে নিয়েছি তা innodb_file_per_tableহ'ল কারণ প্রতিটি টেবিলটি তার নিজস্ব ফাইলে রাখা হয়েছে যার অর্থ প্রতিটি টেবিলের নিজস্ব প্রাপ্ত হয়, পৃথক ওভারহেড (ফাইল-স্বাক্ষর, ইত্যাদি) যার ফলে MySQLডিরেক্টরিটির মোট, সামগ্রিক আকার হয় যদি ভাগ করা টেবিল স্পেস ব্যবহার করা হয় তার চেয়ে বড়। এছাড়াও, একক, বৃহতটির পরিবর্তে একাধিক, ছোট ফাইল রাখলে ক্লাস্টার-স্ল্যাকের কারণে আরও অপচয় হওয়া স্থান থাকে।

মঞ্জুর, অতিরিক্ত ওভারহেড জিনিসগুলির বিশাল স্কিমের জন্য একটি বিশাল পরিমাণ নয় , বিশেষত আপনি যদি একটি বড় ড্রাইভ ব্যবহার করছেন বা একটি বিশাল ডাটাবেস রাখেন তবে নিজের জন্য (এবং সম্ভবত অনেকগুলি "হোম-ব্যবহারকারী"), এটি সব যোগ হয়েছে এবং আমি যেখানে আমার মাইএসকিউএল স্টোরটি রাখছিলাম সেখানে বড় ক্লাস্টার সহ ছোট ড্রাইভের জন্য এখনও খুব বেশি ছিল।

উদাহরণস্বরূপ, আমার ওয়ার্ডপ্রেস ডেটাবেস এবং কয়েকটি অন্যান্য ছোট ডাটাবেস (পিএইচপিবিবি, দেব, কিছু এএমপি পরীক্ষা ইত্যাদি) সহ আমার ডাটাবেস স্টোরটি প্রতি টেবিলে রূপান্তরিত করে এটিকে 32 এমবি থেকে 50 এমবিতে রূপান্তরিত করেছে, এবং এটি ibdata1এখনও অন্তর্ভুক্ত করে না প্রয়োজন একটি 10MB ন্যূনতম মোট জন্য, অন্তত 60MB।

আমি যেমন বলেছি, এটি কিছু লোকের, বিশেষত উদ্যোগের ক্ষেত্রে খুব বেশি সমস্যা নাও হতে পারে, তবে আপনি যদি এমন কোনও ঘরের ব্যবহারকারী হন যা কেবলমাত্র আপনার সাইট, ব্লগ ইত্যাদির হোস্টিং করে থাকেন তবে তা অবশ্যই পছন্দ করার মতো বিষয়গুলির একটি কারণ হতে পারে can একটি হোস্ট প্রদানকারী কারণ অনেক হোস্ট মোট ডিস্ক-ব্যবহারের পাশাপাশি আপনার ডাটাবেসের আকার সীমাবদ্ধ করে।


1
আমি ভাবছিলাম আপনি বাদাম (দশ মেগাবাইট সম্পর্কে কে যত্নশীল ???) আপনি হোস্টিং সরবরাহকারীদের আঁটসাঁট কোটার বিষয়ে পয়েন্টটি না পাওয়া পর্যন্ত। এটা কখনই ভাবিনি।
ড্যান প্রীটস

@ ডানপ্রিটস, বিশেষত ফ্রি হোস্ট। এছাড়াও, আপনার একটি বিশাল ড্রাইভ থাকতে পারে তবে সবাই তা করে না। আমি আমার মূল ডেটা পার্টিশনটি গত বছরে 1 জিবি থেকে 2 গিগাবাইটে প্রসারিত করেছি কারণ এটি খুব শক্ত ছিল, তবে এমনকি এখানে 10MB এবং সেখানে 10MB (বিশেষত লগ ফাইল সহ) এটি দ্রুত খেয়ে ফেলতে পারে। এছাড়াও, ভুলে যাবেন না ক্লাস্টার-বর্জ্য এছাড়াও যোগ করে। শেষ পর্যন্ত, এটি অগত্যা হার্ড ড্রাইভও নয় । উদাহরণস্বরূপ, আমি বর্তমানে আমার ওয়েবসাইটটি "পোর্টাবলাইজিং" করছি যাতে আমি যে কোনও সিস্টেম থেকে এটি হোস্ট করতে পারি, তাই 2 জিবি ফ্ল্যাশ-ড্রাইভ ইতিমধ্যে সীমাবদ্ধ। সুতরাং, আকার ছোট রাখতে এবং লেখাকে এড়িয়ে চলা গুরুত্বপূর্ণ। এবং তারপর এম্বেড সিস্টেম আছে!
Synetech

এছাড়াও, এটি 10 ​​এমবি নয় (এটি সর্বনিম্ন ন্যূনতম আকার IBDATA1)। এটি 30MB থেকে 85MB ডলারে গিয়েছে। পুরো জিনিসটি মুছতে এবং স্ক্র্যাচ থেকে একটি ডাম্প আমদানি করে, আমি আগের 30MB এর পরিবর্তে একটি 69MB দিয়ে শেষ করেছি (একটি অনুমান যা কোন ডাটাবেসটির অর্ধেকেরও বেশি গ্রহণ করেছে)। কোনও কারণে, প্রতি টেবিল ব্যবহার করা সত্ত্বেও, আমার ibdata1এখনও 18 এমবি। ☹
সিনিটেক

32M বনাম 50M ফাইলের আকার থেকে বিচার করে আমার কাছে কোনও সেলিনাক্স সক্ষম না করে বনাম একটি সিএমএস ইনস্টল করার মতো কিছু মনে হচ্ছে S আমি সংখ্যাগুলিতে সত্যই বিশ্বাস করতে পারি না, আপনার কাছে কতগুলি ডাটাবেস আছে এমনকি কিছু ফাইলের মেটাডেটা অন্যথায় অভিন্ন সিস্টেমগুলিতে আকারে মেগাবাইটস যুক্ত করতে পারে?
sjas

2

কেবল আরও কিছু তথ্য যুক্ত করতে

যেহেতু মাইএসকিএল 5.6.6 এটি ডিফল্টরূপে সক্ষম করেছে


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