অনেক লোকের জন্য, মাইএসকিউএল অ্যাকিলিসের হিল অন্তর্নিহিত প্রতিশ্রুতিবদ্ধ।
বইয়ের পৃষ্ঠা 418 অনুচ্ছেদ অনুযায়ী 3
নিম্নলিখিত কমান্ডগুলি একটি লেনদেন ভাঙ্গতে পারে এবং করবে
ALTER TABLE
BEGIN
CREATE INDEX
DROP DATABASE
DROP INDEX
DROP TABLE
RENAME TABLE
TRUNCATE TABLE
LOCK TABLES
UNLOCK TABLES
SET AUTOCOMMIT = 1
START TRANSACTION
পরামর্শ
এটি যখন মাইএসকিউএল এর কথা আসে, আপনি যে কোনও কন্টিনিউয়াস ইন্টিগ্রেগেশন (সিআই) / সেলফ সার্ভিস চাকরীর জন্য সর্বদা লেনদেনের কাজ এবং ডিডিএল স্ক্রিপ্টগুলি পারস্পরিক একচেটিয়া করা উচিত।
এটি আপনাকে এমন দৃষ্টান্ত তৈরি করার সুযোগ দেয়
- সমর্থন লেনদেনগুলি যা
START TRANSACTION/COMMIT
ব্লকগুলির সাথে সঠিকভাবে বিচ্ছিন্ন
- নিজে ডিডিএলকে স্ক্রিপ্ট করে ডিডিএল নিয়ন্ত্রণ করুন, যেমন ডিডিএল কে নির্মাণকারী বা ডেস্ট্রাক্টর হিসাবে চালনা করছেন
- নির্মাতা: একটি নতুন ডিজাইনের সাহায্যে টেবিলগুলি তৈরি করতে ডিডিএল
- ডেস্ট্রাক্টর: টেবিলগুলি পূর্ববর্তী ডিজাইনে ফিরে যেতে তৈরি করতে ডিডিএল
- এই কাজগুলি কখনই এক কাজের অধীনে সংযুক্ত করবেন না
সতর্কতা: আপনি যদি মাইআইএসএএম এর জন্য ব্যবহার করেন তবে আপনি (আন) দয়া করে মাইআইএসএএমকে এমন জিনিসগুলির তালিকায় যুক্ত করতে পারেন যা কোনও লেনদেনকে ভেঙে ফেলতে পারে, সম্ভবত অন্তর্নিহিত প্রতিশ্রুতি হিসাবে নয়, তবে অবশ্যই ডেটা ধারাবাহিকতার ক্ষেত্রে কোনও রোলব্যাক হওয়া উচিত প্রয়োজন ছিল।
কেন এলভিএম নয়?
LVM স্ন্যাপশটগুলি দুর্দান্ত এবং ভারী এসকিউএল প্রসেসিং না করেই ডাটাবেসের পুরো উদাহরণ পুনরুদ্ধার করা আদর্শ। যাইহোক, এটি যখন মাইএসকিউএল এ আসে, আপনাকে দুটি স্টোরেজ ইঞ্জিনের জন্য অ্যাকাউন্ট করতে হবে: ইনোডিবি এবং মাইআইএসএএম।
সমস্ত-ইনোডিবি ডাটাবেস
ইনোডিবি-র আর্কিটেকচারটি দেখুন (পারকোনা সিটিও ভাদিম টাকাচেনকো সৌজন্যে)
InnoDB এর অনেকগুলি চলন্ত অংশ রয়েছে
- সিস্টেম টেবিলস্পেস
- তথ্য অভিধান
- ডাবল রাইট বাফার (ক্র্যাশ পুনরুদ্ধারের জন্য ব্যবহৃত ডেটা ধারাবাহিকতা সমর্থন করে)
- বাফারটি সন্নিবেশ করুন (মাধ্যমিক অ-স্বতন্ত্র সূচকগুলিতে বাফার পরিবর্তনগুলি)
- রোলব্যাক সেগমেন্টস
- পূর্বাবস্থায় ফিরুন (যেখানে সর্বাধিক অনিয়ন্ত্রিত বৃদ্ধি ঘটতে পারে)
- InnoDB বাফার পুল
- নোংরা ডেটা পৃষ্ঠা
- নোংরা সূচক পৃষ্ঠা
- ননউইনিক সূচকগুলিতে পরিবর্তন
- অন্যান্য গুরুত্বপূর্ণ মেমরি ক্যাশে
বাফার পুল এবং মেমোরি ক্যাশে ভাসমান অনিয়ন্ত্রিত পরিবর্তনের সাথে একটি অল-ইনোডিবি ডাটাবেসের একটি এলভিএম স্ন্যাপশট গ্রহণ করা একটি ডেটাসেট তৈরি করতে পারে যা এলইউএন পুনরুদ্ধার হওয়ার পরে এবং মাইএসকিএলডি শুরু হওয়ার পরে ইনোডিবি ক্র্যাশ পুনরুদ্ধারের প্রয়োজন হয়।
সমস্ত-ইনোডিবি-র জন্য পরামর্শ
আপনি যদি স্ন্যাপশট নেওয়ার আগে মাইএসকিউএল বন্ধ করতে পারেন
- চালান
SET GLOBAL innodb_fast_shutdown = 0;
- চালান
SET GLOBAL innodb_max_dirty_pages_pct = 0;
- চালান
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_pages_dirty';
- ইনোডব_বফার_পুল_পৃষ্ঠা_দেটি 0 বা যতটা সম্ভব 0 এর কাছাকাছি না হওয়া পর্যন্ত 3 ধাপ পুনরাবৃত্তি করুন
service mysql stop
- এলভিএম স্ন্যাপশট নিন
service mysql stop
আপনি যদি শাটডাউন না করতে পারেন তবে মাইএসকিউএল লাইভ সহ স্ন্যাপশট নিন
- চালান
SET GLOBAL innodb_max_dirty_pages_pct = 0;
- চালান
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_pages_dirty';
- ইনোডব_বফার_পুল_পৃষ্ঠা_দেটি 0 বা যতটা সম্ভব 0 এর কাছাকাছি না হওয়া পর্যন্ত দ্বিতীয় ধাপটি পুনরাবৃত্তি করুন
- এলভিএম স্ন্যাপশট নিন
- চালান
SET GLOBAL innodb_max_dirty_pages_pct = 75;
অল মাইআইএসএএম ডাটাবেস বা ইনোডিবি / মাইআইএসএএম মিক্স
মাইআইএসএএম, যখন অ্যাক্সেস করা হয় তখন এর বিরুদ্ধে খোলা ফাইল হ্যান্ডেলগুলির একটি গণনা বজায় রাখে। মাইএসকিউএল ক্রাশ হয়ে গেলে, কোনও ওপেন ফাইল হ্যান্ডেল গণনা> 0 সহ যে কোনও মাইআইএসএএম টেবিলটি ক্র্যাশ হিসাবে চিহ্নিত হবে এবং মেরামতের প্রয়োজন হবে (এমনকি ডেটাতে কোনও ভুল না থাকলেও)।
মাইআইএসএএম টেবিল ব্যবহারযোগ্য একটি ডাটাবেসের একটি এলভিএম স্ন্যাপশট গ্রহণের পরে স্ন্যাপশটটি পুনরুদ্ধার করা হবে এবং মাইএসকিএলডি শুরু হওয়ার পরে এক বা একাধিক মাইআইএসএএম টেবিলগুলি মেরামতের প্রয়োজন হবে।
অল মাইসাম বা ইনোডিবি / মাইআইএসএএম মিক্সের জন্য পরামর্শ
আপনি যদি স্ন্যাপশট নেওয়ার আগে মাইএসকিউএল বন্ধ করতে পারেন
- চালান
SET GLOBAL innodb_fast_shutdown = 0;
- চালান
SET GLOBAL innodb_max_dirty_pages_pct = 0;
- চালান
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_pages_dirty';
- ইনোডব_বফার_পুল_পৃষ্ঠা_দেটি 0 বা যতটা সম্ভব 0 এর কাছাকাছি না হওয়া পর্যন্ত 3 ধাপ পুনরাবৃত্তি করুন
service mysql stop
- এলভিএম স্ন্যাপশট নিন
service mysql stop
আপনি যদি শাটডাউন না করতে পারেন তবে মাইএসকিউএল লাইভ সহ স্ন্যাপশট নিন
আপনি নির্দিষ্ট কিছু InnoDB টেবিল ফ্লাশিং প্রয়োগ করতে পারেন
- চালান
SET GLOBAL innodb_max_dirty_pages_pct = 0;
- চালান
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_pages_dirty';
- ইনোডব_বফার_পুল_পৃষ্ঠা_দেটি 0 বা যতটা সম্ভব 0 এর কাছাকাছি না হওয়া পর্যন্ত দ্বিতীয় ধাপটি পুনরাবৃত্তি করুন
FLUSH TABLES innodb_tbl1,... FOR EXPORT;
সমালোচিত InnoDB টেবিলগুলিতে চালান
- চালান
FLUSH TABLES WITH READ LOCK;
- এলভিএম স্ন্যাপশট নিন
- চালান
UNLOCK TABLES;
- চালান
SET GLOBAL innodb_max_dirty_pages_pct = 75;
মাইএসকিউএল প্রতিলিপি সাহায্য করতে পারে?
যখন আপনি দুটি সার্ভারে একটি এলভিএম স্ন্যাপশট পুনরুদ্ধার করতে পারেন এবং মাইএসকিউএল মাস্টার / স্লেভ প্রতিলিপি সেটআপ করতে পারেন, স্ন্যাপশট পুনরুদ্ধার করার সময় এটি বাড়ির যত্নের অতিরিক্ত উত্স হয়ে যায়।
আপনি যদি কোনও মাস্টারের সিআই চাকরী পরিচালনা করেন এবং সেই চাকুরীগুলি ছোট হয় তবে নির্দিষ্ট পরিস্থিতিতে অনুলিপি টাইমসভার হতে পারে। আপনি কেবল STOP SLAVE;
স্লেভের উপর দৌড়াতে পারতেন , মাস্টারের সিআই চাকরিগুলি সরিয়ে ফেলতে পারেন এবং START SLAVE;
মাস্টারের ডেটা প্রমাণিত হয়ে গেলে স্লেভটিতে চালাতে পারেন ।
সিআই চাকরিগুলি যদি খুব বেশি ডেটা সতর্ক করে, আপনি স্ক্র্যাচ থেকে এলভিএম স্ন্যাপশট এবং সেটআপ প্রতিলিপি পুনরুদ্ধার করতে পারেন। আপনি যদি নিজেকে প্রায়শই এটি করতে দেখেন তবে আপনি সম্ভবত মাইএসকিউএল প্রতিলিপি স্থাপন করতে পারেন।
সর্বশেষ ভাবনা
- পুনরুদ্ধার এবং রিগ্রেশন পরীক্ষা করতে একাধিক ডিবি সার্ভার (3 বা ততোধিক) ব্যবহার করা ভাল।
- বাকী মাইআইএসএএম টেবিলগুলি ইনোডিবিতে রূপান্তর করুন যদি সেই টেবিলগুলিতে মাইআইএসএএম থাকা প্রয়োজন না।
- যদি আপনার ডেটা বিষয়বস্তু সংবেদনশীল হয় তবে কোনও পরীক্ষা শুরুর আগে স্ন্যাপশট পুনরুদ্ধার করার পরে আপনার কোনও সিআই কাজ চালিয়ে যাওয়া উচিত ub বিকল্প হিসাবে, আপনি ইতিমধ্যে স্ক্র্যাব করা ডেটা সহ মাইএসকিউএল এর স্ন্যাপশট নিতে চাইতে পারেন।