[2017] আপডেট: মাইএসকিউএল 5.6 এর অনলাইন সূচক আপডেটগুলির জন্য সমর্থন রয়েছে
https://dev.mysql.com/doc/refman/8.0/en/innodb-online-ddl-operation.html#online-ddl-index-syntax-notes
মাইএসকিউএল ৫..6 এবং উচ্চতরতে, সারণীটি পাঠানো এবং লেখার ক্রিয়াকলাপের জন্য সূচক তৈরি করা বা ফেলে দেওয়ার সময় উপলব্ধ রয়েছে। সারণীতে অ্যাক্সেস করা সমস্ত লেনদেন শেষ হওয়ার পরে কেবল তৈরি সূচক বা ড্রপ আইএনডিএক্স স্টেটমেন্ট শেষ হয়, যাতে সূচকের প্রাথমিক অবস্থার সারণির সর্বাধিক সাম্প্রতিক বিষয়বস্তু প্রতিবিম্বিত হয়। পূর্বে, সূচি তৈরি হওয়ার সময় বা সরিয়ে ফেলা হওয়ার সময় সারণীটি সংশোধন করার ফলে একটি অচলাবস্থার ফলস্বরূপ টেবিলে INSERT, আপডেট বা ডিলেট বিবৃতি বাতিল করা হয়।
[২০১৫] আপডেট টেবিলটি মাইএসকিউএল 5.5-তে ব্লকগুলি লেখার ইঙ্গিত দেয়
উপরের উত্তর থেকে:
"ডাটাবেস অনলাইনে থাকাকালীন আপনার যদি 5.1 এর চেয়ে বেশি সংস্করণ ব্যবহার করা হয় So তাই উদ্বেগের কারণ আপনি উত্পাদন সিস্টেমের ব্যবহারকে ব্যাহত করবেন না" "
এটি **** মিথ্যা **** (কমপক্ষে মাইআইএসএএম / ইনোডিবি টেবিলগুলির জন্য, যা সেখানকার 99.999% মানুষ ব্যবহার করেন us ক্লাস্টার সংস্করণটি আলাদা))
সূচি তৈরি হওয়ার সময় কোনও টেবিলে আপডেট অপারেশন করা ব্লক হয়ে যাবে। মাইএসকিউএল এটির (এবং কয়েকটি অন্যান্য বিষয়) সম্পর্কে সত্যই মূ .়।
পরীক্ষার স্ক্রিপ্ট:
(
for n in {1..50}; do
(time mysql -uroot -e 'update website_development.users set bio="" where id = 41225\G'>/dev/null) 2>&1 | grep real;
done
) | cat -n &
PID=$!
sleep 0.05
echo "Index Update - START"
mysql -uroot website_development -e 'alter table users add index ddopsonfu (last_name, email, first_name, confirmation_token, current_sign_in_ip);'
echo "Index Update - FINISH"
sleep 0.05
kill $PID
time mysql -uroot website_development -e 'drop index ddopsonfu on users;'
আমার সার্ভার (InnoDB):
Server version: 5.5.25a Source distribution
আউটপুট (notice ষ্ঠ অপারেশন কীভাবে the 400ms এর জন্য সূচক আপডেট শেষ করতে লাগে তা লক্ষ্য করুন):
1 real 0m0.009s
2 real 0m0.009s
3 real 0m0.009s
4 real 0m0.012s
5 real 0m0.009s
Index Update - START
Index Update - FINISH
6 real 0m0.388s
7 real 0m0.009s
8 real 0m0.009s
9 real 0m0.009s
10 real 0m0.009s
11 real 0m0.009s
বনাম পড়া অপারেশন যা অবরুদ্ধ করে না (স্ক্রিপ্টে লাইন মন্তব্যটি অদলবদল করে):
1 real 0m0.010s
2 real 0m0.009s
3 real 0m0.009s
4 real 0m0.010s
5 real 0m0.009s
Index Update - START
6 real 0m0.010s
7 real 0m0.010s
8 real 0m0.011s
9 real 0m0.010s
...
41 real 0m0.009s
42 real 0m0.010s
43 real 0m0.009s
Index Update - FINISH
44 real 0m0.012s
45 real 0m0.009s
46 real 0m0.009s
47 real 0m0.010s
48 real 0m0.009s
ডাউনটাইম ছাড়াই মাইএসকিউএলের স্কিমা আপডেট করা
থিসফার, মাইএসকিএল স্কিমার আপডেট করতে এবং প্রাপ্যতা বিভ্রাট না ভোগার জন্য আমি কেবল একটি পদ্ধতি জানি। বিজ্ঞপ্তি মাস্টার্স:
- মাস্টার এ এর সাথে আপনার মাইএসকিউএল ডাটাবেস চলছে
- মাস্টার বি কে পরিষেবাতে নিয়ে আসুন এবং এটি মাস্টার এ এর লিখিত প্রতিলিপি তৈরি করুন (বি এ এর দাস)
- মাস্টার বি-তে স্কিমা আপডেট সম্পাদন করুন এটি আপগ্রেডের সময় পিছনে যাবে
- মাস্টার বি ধরুন। ইনভিআরেন্ট: আপনার স্কিমা পরিবর্তনটি একটি ডাউনভারশন স্কিমা থেকে প্রতিরূপিত কমান্ডগুলি প্রক্রিয়াকরণে সক্ষম হতে হবে। সূচক পরিবর্তনগুলি যোগ্যতা অর্জন করে। সাধারণ কলাম সংযোজন সাধারণত যোগ্যতা অর্জন করে। একটি কলাম সরানো হচ্ছে? সম্ভবত না.
- ATOMICALLY মাস্টার বি মাস্টার A থেকে সব ক্লায়েন্টদের অদলবদল আপনি (আমাকে বিশ্বাস, আপনি না), আপনি নিশ্চিত করা উচিত যে A গত লেখার বি প্রতিলিপি করা হয় নিরাপদ হতে চান আগেবি তার প্রথম লেখায় লাগে। যদি আপনি 2+ মাস্টারকে সমকালীন লেখার অনুমতি দেন তবে ... আপনি একটি ডিইইপি স্তরে মাইএসকিউএল প্রতিলিপিটি আরও ভালভাবে বুঝতে পারবেন বা আপনি ব্যথার জগতে চলে যাচ্ছেন। চরম ব্যথা। লাইক, আপনার কি কলাম আছে যা স্বতঃসীমা ??? আপনি বিভ্রান্ত হয়ে পড়েছেন (যদি না আপনি এক মাস্টার এমনকি অন্যটির পক্ষে প্রতিকূলতা ব্যবহার করেন)। "সঠিক কাজটি করার জন্য" মাইএসকিউএল প্রতিরূপে বিশ্বাস করবেন না। এটি স্মার্ট নয় এবং আপনাকে বাঁচাতে পারবে না। কমান্ড-লাইন থেকে বাইনারি লেনদেনের লগগুলি অনুলিপি করা এবং সেগুলি হাতে চালিয়ে দেওয়ার চেয়ে কিছুটা কম নিরাপদ। তবুও, পুরানো মাস্টার থেকে সমস্ত ক্লায়েন্টকে সংযোগ বিচ্ছিন্ন করে নতুন মাস্টারে ফ্লিপ করা কয়েক সেকেন্ডের মধ্যে, বহু ঘন্টা স্কিমার আপগ্রেডের জন্য অপেক্ষা করার চেয়ে দ্রুতগতিতে করা যেতে পারে।
- এখন মাস্টার বি আপনার নতুন মাস্টার। আপনার কাছে নতুন স্কিমা আছে। জীবন সুন্দর. একটি বিয়ার আছে; সবচেয়ে খারাপ শেষ।
- মাস্টার এ দিয়ে প্রক্রিয়াটি পুনরাবৃত্তি করুন, তার স্কিমাকে আপগ্রেড করুন যাতে সে আপনার নতুন গৌণ মাস্টার হয়ে যায়, আপনার প্রাথমিক মাস্টার (এখন মাস্টার বি) ক্ষমতা হারান বা সবেমাত্র আপ আপনার উপর মারা যায় এমন ঘটনাটি গ্রহণ করার জন্য প্রস্তুত।
স্কিমা আপডেট করার একটি সহজ উপায় এটি নয়। একটি গুরুতর উত্পাদন পরিবেশে কার্যক্ষম; হ্যাঁ, এটা দয়া করে, দয়া করে, দয়া করে, যদি কোনও মাইএসকিউএল টেবিলে কোনও সূচক যুক্ত করে ব্লক না করে কোনও সূচক যুক্ত করার সহজ উপায় থাকে তবে আমাকে জানান।
গুগলিং আমাকে এই নিবন্ধটিতে নিয়ে যায় যা একই ধরণের কৌশল বর্ণনা করে। আরও ভাল, তারা প্রক্রিয়াটির একই পয়েন্টে মদ্যপানের পরামর্শ দেয় (দ্রষ্টব্য যে আমি নিবন্ধটি পড়ার আগে আমার উত্তর লিখেছিলাম)!
পারকোনার পিটি-অনলাইন-স্কিমা-পরিবর্তন
নিবন্ধটি আমি একটি টুল সম্পর্কে আলোচনা উপরে লিঙ্ক করা হলে, পর্তুগীজ ভাষায়-অনলাইন-স্কিমা-পরিবর্তন , নিম্নরূপ যে কাজগুলো করেনঃ
- মূল হিসাবে একই কাঠামো সহ নতুন টেবিল তৈরি করুন।
- নতুন টেবিলে স্কিমা আপডেট করুন।
- আসল টেবিলটিতে একটি ট্রিগার যুক্ত করুন যাতে অনুলিপিগুলি অনুলিপি সহ স্থির রাখা হয়
- মূল টেবিল থেকে ব্যাচগুলিতে সারিগুলি অনুলিপি করুন।
- মূল টেবিলটিকে বাইরে সরিয়ে নিয়ে নতুন টেবিলের সাথে প্রতিস্থাপন করুন।
- পুরানো টেবিলটি ফেলে দিন।
আমি নিজে নিজে কখনই এই সরঞ্জামটি ব্যবহার করে দেখিনি। ওয়াইএমএমভি
আরডিএস
আমি বর্তমানে অ্যামাজনের আরডিএসের মাধ্যমে মাইএসকিউএল ব্যবহার করছি । এটি একটি সত্যই নিফটি পরিষেবা যা মাইএসকিউএলকে জড়িয়ে দেয় এবং পরিচালনা করে, আপনাকে একটি একক বোতামের সাহায্যে নতুন পড়ার প্রতিলিপি যুক্ত করতে দেয় এবং স্বচ্ছভাবে হার্ডওয়্যার এসকিউ-এর ডাটাবেসটিকে স্বচ্ছভাবে আপগ্রেড করতে দেয়। এটা সত্যিই সুবিধাজনক। আপনি ডাটাবেসে সুপ এক্সেস পাবেন না, সুতরাং আপনি সরাসরি প্রতিলিপি দিয়ে স্ক্রু করতে পারবেন না (এটি কি আশীর্বাদ বা অভিশাপ?) তবে, আপনি কেবলমাত্র পঠনযোগ্য দাসে আপনার স্কিমা পরিবর্তন করতে রিডির প্রতিলিপি পড়ুন , তারপরে সেই দাসকে আপনার নতুন মাস্টার হিসাবে উন্নীত করুন। আমি উপরে বর্ণিত ঠিক ঠিক একই কৌশলটি কার্যকর করা কার্যকরভাবে সহজ। কাট-ওভার নিয়ে আপনাকে সহায়তা করতে তারা এখনও বেশি কিছু করে না। আপনাকে আপনার অ্যাপ্লিকেশনটি পুনরায় কনফিগার করতে হবে এবং পুনরায় চালু করতে হবে।