মাইআইএসএএম রূপান্তর করার সর্বোত্তম উপায়গুলির মধ্যে একটি সম্পূর্ণ ডাউনটাইম ছাড়াই একটি মাত্র পূর্বশর্ত রয়েছে: একটি প্রতিলিপি স্লেভ ব্যবহার করুন।
পরিকল্পনার জন্য এখানে একটি পাখির চোখের দর্শন
- প্রতিলিপি মাস্টার / স্লেভ সেটআপ তৈরি করুন
- দাসের প্রতিটি মাইআইএসএএম টেবিলকে ইনোডিবিতে রূপান্তর করুন
- আপনার অ্যাপ্লিকেশন স্লেভের দিকে নির্দেশ করুন
সহজ লাগছে? এর পিছনে প্রচুর বিবরণ রয়েছে।
প্রতিলিপি মাস্টার / স্লেভ সেটআপ তৈরি করুন
মাস্টারকে খুব ঝামেলা ছাড়াই স্লেভ তৈরির একটি চটজলদি উপায় রয়েছে। আমি দুটি পোস্ট লিখেছি:
আরএসসিএনসি কীভাবে ব্যবহার করবেন সে সম্পর্কে বিস্তারিত তথ্যের চেয়ে দয়া করে এই দুটি পোস্ট পড়ুন।
দাসের প্রতিটি মাইআইএসএএম টেবিলকে ইনোডিবিতে রূপান্তর করুন
ডিবি স্লেভ-এ আপনি নিম্নলিখিত এসকিউএল স্টেটমেন্টটি করতে পারেন:
মাইএসকিউএল 5.5 এর জন্য:
SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' ENGINE=InnoDB;')
FROM information_schema.tables
WHERE engine = 'MyISAM' AND table_schema NOT IN
('information_schema','mysql','performance_schema');
মাইএসকিউএল 5.5 এর পূর্বে মাইএসকিউএলের জন্য সংস্করণ
SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' ENGINE=InnoDB;')
FROM information_schema.tables
WHERE engine = 'MyISAM' AND table_schema NOT IN
('information_schema','mysql');
ক্যোয়ারী থেকে আউটপুট ব্যবহার করে, আপনার কাছে ক্রীতদাসের জন্য একটি রূপান্তর স্ক্রিপ্ট রয়েছে।
আপনাকে অবশ্যই এই দুটি লাইন স্ক্রিপ্টের শীর্ষে রাখতে হবে:
SET SQL_LOG_BIN = 0;
STOP SLAVE;
স্ক্রিপ্টটি প্রথমে বাইনারি লগিং অক্ষম করবে (যদি আপনি স্লেভকে বাইনারি লগ রাখার জন্য কনফিগার করেন), প্রতিলিপি বন্ধ করুন এবং প্রতিটি মাইআইএসএএম টেবিলকে ইনোডিবিতে রূপান্তর করুন।
কীভাবে স্ক্রিপ্টটি তৈরি করবেন এবং এটি কার্যকর করবেন:
SQLSTMT="SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' ENGINE=InnoDB;') FROM information_schema.tables WHERE engine = 'MyISAM' AND table_schema NOT IN ('information_schema','mysql','performance_schema')"
INNODB_CONV_SCRIPT=MassConvertMyISAMTablesToInnoDB.sql
echo "SET SQL_LOG_BIN = 0;" > ${INNODB_CONV_SCRIPT}
echo "STOP SLAVE;" >> ${INNODB_CONV_SCRIPT}
mysql -h(IP of Master) -u... -p... --skip-column-names -A -e"${SQL}" >> ${INNODB_CONV_SCRIPT}
echo "START SLAVE;" >> ${INNODB_CONV_SCRIPT}
mysql -h(IP of Slave) -u... -p... --skip-column-names -A < ${INNODB_CONV_SCRIPT}
আপনার অ্যাপ্লিকেশন স্লেভের দিকে নির্দেশ করুন
স্লেভ থেকে নির্বাচন করুন অনুসন্ধান করুন। আপনি যদি স্লেভের ডেটা সামগ্রীতে সন্তুষ্ট হন তবে আপনার অ্যাপ্লিকেশনটিকে দাসের কাছে নিচে নির্দ্বিধায় বলতে হবে:
- স্লেভ-এ, চালান
SHOW SLAVE STATUS\G
এবং সেকেন্ডস_বিহাইন্ড_মাস্টার 0 হয় তা নিশ্চিত করুন
- স্লেভ-এ, মাইসক্লড্প্প -h (স্লেভের আইপি) -আপনি ... -পি ... --সেনেল-লেনদেন - রুটিনস - ট্রিগারস - সমস্ত-ডাটাবেসগুলি> মাইএসকিউএলব্যাকআপ.এসকিএল (আরে, একটি ব্যাকআপ ভাল ডান হবে) এখনকার সম্পর্কে)
- মাস্টারটিতে, চালান
service mysql stop
(ডাউনটাইম শুরু হয়)
- পদক্ষেপ 1 পুনরাবৃত্তি করুন
- আপনার অ্যাপটিকে স্লেভের দিকে নির্দেশ করুন (অ্যাপটির প্রথম সংযোগের ডাউনটাইম শেষ হবে)
আপনি যদি এই বিন্দুটি থেকে সরানো না হন, অভিনন্দন !!!
অ্যাডেড বোনাস : আপনি যদি মাস্টার / স্লেভের পরিবর্তে মাস্টার / মাস্টার রেপ্লিকেশন (ওরফে সার্কুলার রেপ্লিকেশন) সেটআপ করেন তবে আপনি এটি পরিবর্তে এটি করতে পারেন:
- স্লেভ-এ, চালান
SHOW SLAVE STATUS\G
এবং সেকেন্ডস_বিহাইন্ড_মাস্টার 0 হয় তা নিশ্চিত করুন
- স্লেভ-এ, মাইসক্লড্প্প -h (স্লেভের আইপি) -আপনি ... -পি ... --সেনেল-লেনদেন - রুটিনস - ট্রিগারস - সমস্ত-ডাটাবেসগুলি> মাইএসকিউএলব্যাকআপ.এসকিএল (আরে, একটি ব্যাকআপ ভাল ডান হবে) এখনকার সম্পর্কে)
- আপনার অ্যাপটিকে স্লেভের দিকে নির্দেশ করুন (ডাউনটাইম শুরু হয় এবং অ্যাপ্লিকেশানের প্রথম সংযোগে শেষ হয়)
- নতুন মাস্টারের উপর, চালান
STOP SLAVE;
- নতুন মাস্টারের উপর, চালান
CHANGE MASTER TO MASTER_HOST='';
আপনার এখন যা আছে তা বিপরীতে মাস্টার / স্লেভ। নতুন মাস্টারের ইনোডিবি ডেটা রয়েছে এবং পুরাতন মাস্টার এখন মাইআইএসএএম ডেটা সহ একটি দাস। যদি আপনি পড়তে এবং লেখাকে বিভক্ত করেন তবে স্ল্যাভ থেকে পাঠাগুলি যেতে পারে (মাইআইএসএএম থেকে ইনোডিবি থেকে দ্রুত হয়) এবং মাস্টারকে লেখেন (ইনোডিবি-র জন্য ট্রানজিকাল সমর্থন)। হান্না মন্টানা যেমন গায়, তেমনি আপনি উভয় দুনিয়ার সেরাও পেয়েছেন (হ্যাঁ, আমার দুটি কন্যা রয়েছে যা শো পছন্দ করে) !!!
অন্য অ্যাডেড বোনাস : যেহেতু মাস্টার এখন ইনোডিবি, আপনি মাস্টার থেকে ডাউনটাইম ছাড়াই এবং লেনদেনে হস্তক্ষেপ না করে মাইএসকিএলডম্প করতে পারেন। কেবল অপূর্ণতা হ'ল সিপিইউ এবং ডিস্ক আই / ও বৃদ্ধি করা। আপনি কেবলমাত্র মাস্টার (ইনোডিবি) এবং কেবলমাত্র স্লেভের উপর ডেটাগুলির একটি মাইসক্ল্ড্প্পের জন্য টেবিলের কাঠামোগুলির একটি মাইসক্ল্ড্প্প করতে পারেন (যেমন ডাম্পের ইনোডিবি বা মাইআইএসএএম-তে কোনও রেফারেন্স থাকবে না। এটি কেবল তথ্য হবে) এবং এর একটি মাইএসকিल्ड্প মাইআইএসএএম লেআউটটি রাখার জন্য স্লেভের টেবিল কাঠামো
এই নতুন সেটআপের কারণে সম্ভাবনাগুলি এগিয়ে যেতে পারে ...
আপডেট ২০১১-০৮-২7 19:50 ইডিটি
আমার ক্ষমা। আমি পুরোপুরি প্রশ্নটি পড়িনি। আপনি ইতিমধ্যে রূপান্তর সম্পাদন করেছেন ।
আপনার যদি ইতিমধ্যে বাইনারি লগিং চালু থাকে এবং আপনার আগে ব্যাকআপ থাকে তবে আপনি তা করতে পারেন
- / var / lib / mysql2 হিসাবে অন্য জায়গায় পুনরুদ্ধার করুন /
- চালান
service mysql stop
- চালান
service mysql start --datadir=/var/lib/mysql2
- mysqldump সেই ব্যাকআপ থেকে /root/olddata.sql এ ডাটাবেস
- /root/changes.sql এ শেষ ব্যাকআপ থেকে পয়েন্ট-ইন-টাইম থেকে / var / lib / mysql (/ var / lib / mysql2) তে সমস্ত বাইনারি লগের বিরুদ্ধে mysqlbinlog চালান
- MySQL- এ পরিবর্তনগুলি লোড করুন (যেহেতু এটি এখনও / var / lib / mysql2 এ নির্দেশ করছে)
এটি রেকর্ডকৃত যাবতীয় জিনিসটি ধরা উচিত এবং রূপান্তরটি কিক্স করা উচিত Again আবার, শেষ ব্যাকআপের আগে বাইনারি লগইন করা আপনার পক্ষে ইতিমধ্যে এটি সমস্তই উপযুক্ত । অন্যথায়, আমার সমবেদনা