আমি কীভাবে মাইআইএসএএম থেকে ইনোডিবিতে একটি ডাটাবেস রূপান্তর করব?


9

আমি মাইআইএসএএম থেকে 500 এমবি ডাটাবেসের সমস্ত টেবিলগুলিকে ইনোডিবিতে রূপান্তর করতে যাচ্ছি এটি দেখার জন্য এটি কোনও ব্যস্ত ড্রুপাল 6 সাইটের সামগ্রিক কর্মক্ষমতা উন্নত করবে কিনা। আমি ভাবছি যে রূপান্তরটি করার সবচেয়ে ভাল উপায় (অর্থাত্ নিরাপদ / সবচেয়ে সহজ / দ্রুততম) কোনটি?


এটি কোনও দ্রুপাল সম্পর্কিত প্রশ্ন বলে মনে হয় না?
তোস্তিনি

2
সরাসরি নয়, তবে এটি এমন একটি বিষয় যা উপলক্ষ্যে দ্রুপাল প্রশাসকদের করা দরকার।
এমপিডোনাদিও

আমি মাইআইএসএএম টেবিলগুলিকে ফিল্ট আউট করার জন্য একটি নতুন এসকিউএল কমান্ড ব্যবহার করার জন্য আমার উত্তরটি আপডেট করেছি যার সাথে ফুলটেক্স সূচী রয়েছে। আমার আপডেট হওয়া উত্তরটি ব্যবহার করে স্ক্র্যাচ থেকে সমস্ত পদক্ষেপ পুনরায় চালু করুন।
রোল্যান্ডোমাইএসকিউএলডিবিএ

আপনার ড্রুপাল সাইটটি যদি ফুলটেক্সট ইনডেক্স ব্যবহার করে অনুসন্ধানের জন্য কনফিগার করা না থাকে তবে আপনি ফুল টেক্সট সূচী সহ সমস্ত টেবিলগুলিতে যেতে পারেন এবং সেই সূচিগুলি সেই টেবিলের বাইরে রেখে দিতে পারেন। ফুল টেক্সট ইনডেক্সযুক্ত সমস্ত সারণী সন্ধান করতে, নির্বাচন করুন টেবিল_সেমিমা, টেবিল FROM থেকে তথ্য_চেমি.স্ট্যাটিস্টিক্স যেখানে সূচক_প্রকার = 'ফুলটেক্সট';
রোল্যান্ডোমাইএসকিউএলডিবিএ

উত্তর:


7

মাইএসকিউএল ডিবিএ হিসাবে, আমি মাইএসকিউএলকে আমার জন্য স্ক্রিপ্টটি লেখার মাধ্যমে রূপান্তরটি করতে মাইএসকিউএলকে বিশ্বাস করি।

লিনাক্স কমান্ডটি তৈরি করুন এই ক্যোয়ারীটি চালান

mysql -h... -u... -p... -A --skip-column-names -e"SELECT CONCAT('ALTER TABLE ',db,'.',tb,' ENGINE=InnoDB;') FROM (SELECT A.db,A.tb,A.tbsize FROM (SELECT table_schema db,table_name tb,(data_length+index_length) tbsize FROM information_schema.tables WHERE engine='MyISAM' AND table_schema NOT IN ('information_schema','mysql')) A LEFT JOIN (SELECT table_schema db,table_name tb FROM information_schema.statistics WHERE index_type='FULLTEXT') B USING (db,tb) WHERE B.db IS NULL) AA ORDER BY tbsize" > /root/ConvertMyISAM2InnoDB.sql

স্ক্রিপ্টটি প্রথমে ক্ষুদ্রতম টেবিলগুলিকে রূপান্তর করবে। এই স্ক্রিপ্টটিতে মাইআইএসএএম সারণীগুলিকেও বাইপাস করা হয়েছিল যাতে ফুলটেক্সট সূচী রয়েছে।

স্ক্রিপ্টটি সন্ধানের পরে আপনি কেবল মাইএসকিউএল-এ চালাতে পারবেন:

mysql -h... -u... -p... -A < /root/ConvertMyISAM2InnoDB.sql

অথবা আপনি যদি প্রতিটি রূপান্তরটির সময় দেখতে চান তবে মাইএসকিএল এ লগইন করুন এবং এটি চালান:

mysql> source /root/ConvertMyISAM2InnoDB.sql

এটি বিশৃঙ্খল হওয়া উচিত নয় কারণ রূপান্তরটি কার্যকর হওয়ার সময় একটি পূর্ণ টেবিল লক হয় happens

সমস্ত টেবিল রূপান্তরিত হয়ে গেলে আপনাকে InnoDB ব্যবহারের জন্য মাইএসকিউএল সেটিংস টিউন করতে হবে এবং কী_বফারটি স্কেল করতে হবে।

ইনোডিবি বাফার পুলটি সেট করার জন্য দয়া করে এটি পড়ুন: /dba/1/ কি-are-the-main-differences-between-innodb-and-myisam/2194#2194

দয়া করে এগুলিও পড়ুন: /drupal/1715/ কি- ওয়াল্ড- ইপটিমাল-mysql-configration-for-a-drupal-7-site-be / 2367#2367

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


রোল্যান্ড, আমি আপনার সমাধানটি চেষ্টা করেছি কিন্তু কনভার্টমাইআইএসএএম 2 আইএনএনডিবি.এসকিউএলটি ডাটাবেসে আমদানি করার পরে, আমি এই ত্রুটিটি পেয়েছি: "585 লাইনে ERROR 1214 (HY000): ব্যবহৃত টেবিলের ধরণটি ফুলটেক্স ইনডেক্সগুলি সমর্থন করে না"। তাহলে কি আমার জানা উচিত যে কোনও রূপান্তরটি কিছু টেবিলগুলিতে সংঘটিত হয়েছিল এবং আমি কীভাবে এই ত্রুটিটি সমাধান করব? ধন্যবাদ
আলফিশ

আমি ভয় পেয়েছিলাম যে ঘটবে। এর সহজ অর্থ হ'ল একটি মাইআইএসএএম টেবিলটিতে একটি ফুল টেক্সট সূচক ছিল। মাইএসকিএল এ লগইন করুন এবং এমনভাবে চালান যেন আপনি সময়টি দেখতে চান। অন্য কথায়, উত্সটি চালান
রুট

আমি FQLLxt ইনডেক্স থাকা সারণীগুলি এড়িয়ে যেতে এসকিউএল জেনারেশন স্ক্রিপ্ট আপডেট করার চেষ্টা করব।
RolandoMySQLDBA

ইতিমধ্যে, স্ক্র্যাচ থেকে এই সমস্ত পদক্ষেপ পুনরাবৃত্তি করুন। পুনরায় সংযুক্ত ফাইলের প্রথম লাইনে মাইআইএসএএম ফাইলটি ফুলটেক্সট সূচী সহ রয়েছে। কেবল সেই প্রথম লাইনটি মুছুন এবং স্ক্রিপ্টটি পুনরায় চালু করুন।
রোল্যান্ডোমাইএসকিউএলডিবিএ

ঠিক আছে, এই শীতল রূপান্তর ব্যাশ স্ক্রিপ্টটি চালিয়ে ( yoodey.com/… ), আমি বুঝতে পেরেছিলাম যে স্পষ্টতই আমার ডাটাবেসের একমাত্র সারণী যা সম্পূর্ণ পাঠ্য ব্যবহার করে তা 'অনুসন্ধান_আইডেক্স'। এটি রূপান্তরটি থামিয়ে দেয় কিন্তু এতে রূপান্তর বাতিল করার পরে, বাকীগুলি সহজেই চলেছিল went সোর্স কনভার্ট মাইআইএসএএম 2 আইএনএনডিবি.এসকিএল চালিয়ে আমি অপরাধীকে চিহ্নিত করতে পারি না। যাইহোক আমি আপনার সাহায্যের প্রশংসা করি।
আলফিশ

4

আমি এর জন্য কিছুক্ষণ আগে একটি ড্রশ কমান্ড লিখেছি।

<?php
/**
 * Implements hook_drush_command().
 */
function convert_drush_command() {
  $items = array();

  // the key in the $items array is the name of the command.
  $items['convert-engine'] = array(
    // a short description of your command
    'description' => "Convert MYSQL Table Type",
  );
  return $items;
}

function drush_convert_engine() {
  $args = func_get_args();
  $engine = $args[0];

  $result = db_query("SHOW TABLES");
  while ($row = db_fetch_array($result)) {
    $table = array_shift($row);
    drush_log(dt('Converting @table to @engine', array('@table' => $table, '@engine' => $engine)), 'success');
    db_query("ALTER TABLE $table ENGINE = $engine");
  }
}

এক বছর বা তার আগে আমার জন্য পরিশ্রম করেছেন, নিশ্চিত হন না যে ততক্ষণে ড্রাশ এপিআই বদলেছে কিনা।

আপনি এটি একটি রূপান্তর.ড্রুশ.ইঙ্কে স্থাপন করতে পারেন উদাহরণস্বরূপ .drush ফোল্ডারে বা এটি কোনও কোনওরূপে আপনার সাইটে চালিত করতে পারেন, উদাহরণস্বরূপ ডেভেল এক্সিকিউট পিএইচপি ব্লক সহ। ড্রশ স্ক্রিপ্ট হিসাবে, আপনি এটিকে এটি কল করতে পারেন:

drush convert-engine InnoDB

সতর্কতা : এই কমান্ডগুলি চলাকালীন কেউ যদি ডাটাবেসগুলির সাথে কিছু করে, আপনার ডাটাবেসটি পুরোপুরি মিশে যাবে। Unrecoverably। সুতরাং, আপনার সাইটটিকে রক্ষণাবেক্ষণ মোডে রাখুন এবং এটি চেষ্টা করার আগে একটি ব্যাকআপ করুন! এবং অবশ্যই, প্রথমে একটি উন্নয়ন / পরীক্ষার সাইটে চেষ্টা করুন :)


5
বারদিরের সাথে সম্মত হন, আপনার সাইটের ব্যাকআপ দিন। এই অপারেশনটি চলাকালীন আপনার ডাটাবেসটি লকড হবে। আপনি যদি এমন কোনও মডিউল চান যা এটি করতে পারে তবে ডিবি টুনারকে একটি শট দিন।
মাইকাইটাউন 2

@ মাইকাইটাউন 2: এটি একটি দুর্দান্ত শীতল মডিউল :)
বার্ডির

1
দুর্দান্ত স্ক্রিপ্ট তবে এটি সরাসরি অ মাইএসকিউএল ক্লায়েন্টটি করার বিপরীতে যথেষ্ট ওভারকিল মনে হচ্ছে।
তোস্তিনি

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