মাইএসকিউএলের জন্য লেনদেনের ডিডিএল কর্মপ্রবাহ


25

আমি একটু আবিষ্কার যে DDL বিবৃতি (বিস্মিত ছিল alter table, create indexইত্যাদি) পরোক্ষভাবে মাইএসকিউএল বর্তমান লেনদেনের কমিট। এমএস এসকিউএল সার্ভার থেকে আগত, স্থানীয়ভাবে একটি লেনদেনে ডাটাবেস পরিবর্তন করার ক্ষমতা (এটি তখন ফিরে এসেছিল) আমার কর্মপ্রবাহের একটি গুরুত্বপূর্ণ অংশ ছিল। অবিচ্ছিন্ন একীকরণের জন্য, রোলব্যাকটি যদি কোনও কারণে হিচাপ করা হয় তবে রোলব্যাকটি ব্যবহৃত হয়েছিল, যাতে আমরা কমপক্ষে অর্ধ-মাইগ্রেটেড অবস্থায় ডেটাবেস ত্যাগ না করি।

মাইগ্রেশন এবং অবিচ্ছিন্ন একীকরণের সাথে মাইএসকিউএল ব্যবহার করার সময় লোকেরা কীভাবে এই দুটি সমস্যার সমাধান করবেন?


ক্রস এসও থেকে পোস্ট। stackoverflow.com/q/28197013/614523 সেখানে খুব বেশি ভালবাসা পায় নি।
সনেট 13

1
অবিচ্ছিন্ন একীকরণের জন্য, LVM স্ন্যাপশটগুলি খুব দ্রুত একটি পুরোপুরি পরিবেশ তৈরি করার একটি উপায় হিসাবে বিবেচনা করুন যা একটি পরিচিত অবস্থায় রয়েছে।
রিক জেমস

5
আপনি সর্বদা পোস্টগ্র্রেসে আপগ্রেড করতে পারেন - এটি লেনদেনের ডিডিএল (এসসিএনআর) সমর্থন করে।
a_horse_with_no_name

3
আমি @a_horse_with_no_name এর সাথে একমত, যদি এটি আপনার ওয়ার্কফ্লো হয় তবে পোস্টগ্র্রেএসকিউএল-এর ব্যবহারকে গুরুত্ব সহকারে বিবেচনা করুন, এতে আরও অনেক সুন্দর বৈশিষ্ট্য সহ একসাথে লেনদেনের ডিডিএল রয়েছে।
রেনজো

উত্তর:


9

অনেক লোকের জন্য, মাইএসকিউএল অ্যাকিলিসের হিল অন্তর্নিহিত প্রতিশ্রুতিবদ্ধ।

বইয়ের পৃষ্ঠা 418 অনুচ্ছেদ অনুযায়ী 3

মাইএসকিউএল 5.0 শংসাপত্রের স্টাডি গাইড

নিম্নলিখিত কমান্ডগুলি একটি লেনদেন ভাঙ্গতে পারে এবং করবে

  • 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 এর অনেকগুলি চলন্ত অংশ রয়েছে

  • সিস্টেম টেবিলস্পেস
    • তথ্য অভিধান
    • ডাবল রাইট বাফার (ক্র্যাশ পুনরুদ্ধারের জন্য ব্যবহৃত ডেটা ধারাবাহিকতা সমর্থন করে)
    • বাফারটি সন্নিবেশ করুন (মাধ্যমিক অ-স্বতন্ত্র সূচকগুলিতে বাফার পরিবর্তনগুলি)
    • রোলব্যাক সেগমেন্টস
    • পূর্বাবস্থায় ফিরুন (যেখানে সর্বাধিক অনিয়ন্ত্রিত বৃদ্ধি ঘটতে পারে)
  • InnoDB বাফার পুল
    • নোংরা ডেটা পৃষ্ঠা
    • নোংরা সূচক পৃষ্ঠা
    • ননউইনিক সূচকগুলিতে পরিবর্তন
  • অন্যান্য গুরুত্বপূর্ণ মেমরি ক্যাশে

বাফার পুল এবং মেমোরি ক্যাশে ভাসমান অনিয়ন্ত্রিত পরিবর্তনের সাথে একটি অল-ইনোডিবি ডাটাবেসের একটি এলভিএম স্ন্যাপশট গ্রহণ করা একটি ডেটাসেট তৈরি করতে পারে যা এলইউএন পুনরুদ্ধার হওয়ার পরে এবং মাইএসকিএলডি শুরু হওয়ার পরে ইনোডিবি ক্র্যাশ পুনরুদ্ধারের প্রয়োজন হয়।

সমস্ত-ইনোডিবি-র জন্য পরামর্শ

আপনি যদি স্ন্যাপশট নেওয়ার আগে মাইএসকিউএল বন্ধ করতে পারেন

    1. চালান SET GLOBAL innodb_fast_shutdown = 0;
    1. চালান SET GLOBAL innodb_max_dirty_pages_pct = 0;
    1. চালান SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_pages_dirty';
    1. ইনোডব_বফার_পুল_পৃষ্ঠা_দেটি 0 বা যতটা সম্ভব 0 এর কাছাকাছি না হওয়া পর্যন্ত 3 ধাপ পুনরাবৃত্তি করুন
    1. service mysql stop
    1. এলভিএম স্ন্যাপশট নিন
    1. service mysql stop

আপনি যদি শাটডাউন না করতে পারেন তবে মাইএসকিউএল লাইভ সহ স্ন্যাপশট নিন

অল মাইআইএসএএম ডাটাবেস বা ইনোডিবি / মাইআইএসএএম মিক্স

মাইআইএসএএম, যখন অ্যাক্সেস করা হয় তখন এর বিরুদ্ধে খোলা ফাইল হ্যান্ডেলগুলির একটি গণনা বজায় রাখে। মাইএসকিউএল ক্রাশ হয়ে গেলে, কোনও ওপেন ফাইল হ্যান্ডেল গণনা> 0 সহ যে কোনও মাইআইএসএএম টেবিলটি ক্র্যাশ হিসাবে চিহ্নিত হবে এবং মেরামতের প্রয়োজন হবে (এমনকি ডেটাতে কোনও ভুল না থাকলেও)।

মাইআইএসএএম টেবিল ব্যবহারযোগ্য একটি ডাটাবেসের একটি এলভিএম স্ন্যাপশট গ্রহণের পরে স্ন্যাপশটটি পুনরুদ্ধার করা হবে এবং মাইএসকিএলডি শুরু হওয়ার পরে এক বা একাধিক মাইআইএসএএম টেবিলগুলি মেরামতের প্রয়োজন হবে।

অল মাইসাম বা ইনোডিবি / মাইআইএসএএম মিক্সের জন্য পরামর্শ

আপনি যদি স্ন্যাপশট নেওয়ার আগে মাইএসকিউএল বন্ধ করতে পারেন

    1. চালান SET GLOBAL innodb_fast_shutdown = 0;
    1. চালান SET GLOBAL innodb_max_dirty_pages_pct = 0;
    1. চালান SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_pages_dirty';
    1. ইনোডব_বফার_পুল_পৃষ্ঠা_দেটি 0 বা যতটা সম্ভব 0 এর কাছাকাছি না হওয়া পর্যন্ত 3 ধাপ পুনরাবৃত্তি করুন
    1. service mysql stop
    1. এলভিএম স্ন্যাপশট নিন
    1. service mysql stop

আপনি যদি শাটডাউন না করতে পারেন তবে মাইএসকিউএল লাইভ সহ স্ন্যাপশট নিন

আপনি নির্দিষ্ট কিছু InnoDB টেবিল ফ্লাশিং প্রয়োগ করতে পারেন

    1. চালান SET GLOBAL innodb_max_dirty_pages_pct = 0;
    1. চালান SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_pages_dirty';
    1. ইনোডব_বফার_পুল_পৃষ্ঠা_দেটি 0 বা যতটা সম্ভব 0 এর কাছাকাছি না হওয়া পর্যন্ত দ্বিতীয় ধাপটি পুনরাবৃত্তি করুন
    1. FLUSH TABLES innodb_tbl1,... FOR EXPORT;সমালোচিত InnoDB টেবিলগুলিতে চালান
    1. চালান FLUSH TABLES WITH READ LOCK;
    1. এলভিএম স্ন্যাপশট নিন
    1. চালান UNLOCK TABLES;
    1. চালান SET GLOBAL innodb_max_dirty_pages_pct = 75;

মাইএসকিউএল প্রতিলিপি সাহায্য করতে পারে?

যখন আপনি দুটি সার্ভারে একটি এলভিএম স্ন্যাপশট পুনরুদ্ধার করতে পারেন এবং মাইএসকিউএল মাস্টার / স্লেভ প্রতিলিপি সেটআপ করতে পারেন, স্ন্যাপশট পুনরুদ্ধার করার সময় এটি বাড়ির যত্নের অতিরিক্ত উত্স হয়ে যায়।

আপনি যদি কোনও মাস্টারের সিআই চাকরী পরিচালনা করেন এবং সেই চাকুরীগুলি ছোট হয় তবে নির্দিষ্ট পরিস্থিতিতে অনুলিপি টাইমসভার হতে পারে। আপনি কেবল STOP SLAVE;স্লেভের উপর দৌড়াতে পারতেন , মাস্টারের সিআই চাকরিগুলি সরিয়ে ফেলতে পারেন এবং START SLAVE;মাস্টারের ডেটা প্রমাণিত হয়ে গেলে স্লেভটিতে চালাতে পারেন ।

সিআই চাকরিগুলি যদি খুব বেশি ডেটা সতর্ক করে, আপনি স্ক্র্যাচ থেকে এলভিএম স্ন্যাপশট এবং সেটআপ প্রতিলিপি পুনরুদ্ধার করতে পারেন। আপনি যদি নিজেকে প্রায়শই এটি করতে দেখেন তবে আপনি সম্ভবত মাইএসকিউএল প্রতিলিপি স্থাপন করতে পারেন।

সর্বশেষ ভাবনা

  • পুনরুদ্ধার এবং রিগ্রেশন পরীক্ষা করতে একাধিক ডিবি সার্ভার (3 বা ততোধিক) ব্যবহার করা ভাল।
  • বাকী মাইআইএসএএম টেবিলগুলি ইনোডিবিতে রূপান্তর করুন যদি সেই টেবিলগুলিতে মাইআইএসএএম থাকা প্রয়োজন না।
  • যদি আপনার ডেটা বিষয়বস্তু সংবেদনশীল হয় তবে কোনও পরীক্ষা শুরুর আগে স্ন্যাপশট পুনরুদ্ধার করার পরে আপনার কোনও সিআই কাজ চালিয়ে যাওয়া উচিত ub বিকল্প হিসাবে, আপনি ইতিমধ্যে স্ক্র্যাব করা ডেটা সহ মাইএসকিউএল এর স্ন্যাপশট নিতে চাইতে পারেন।

4

আপনি যদি ক্রমাগত সংহতকরণের কথা বলেন তবে আমি ধরে নিই এটি একটি বিকাশের পরিবেশ। সেক্ষেত্রে আমি বলব যে কাঠামোগত পরিবর্তনগুলি করা ব্যক্তিটিকে অন্যের জন্য জিনিসগুলি যাতে না ভাঙতে পারে তা নিশ্চিত করার জন্য তাদের পরীক্ষা করতে হয়, যেভাবে কেউ একটি সাধারণ লাইব্রেরি আপডেট করে: যেমন পরিবর্তনগুলি করার আগে আপনার নিজের স্যান্ডবক্সে পরীক্ষা করুন।

কোনও প্রোডাক্ট ডিপ্লোয়মেন্ট প্রক্রিয়ায় আপনি সাধারণত আপনার পরিবর্তনগুলি পরীক্ষা করার জন্য দেব, কিউএ বা প্রাক-উত্পাদন পরিবেশের মধ্য দিয়ে যেতেন যে কোনও কোড পরিবর্তনের জন্য আপনি যেভাবে চান।

নোট করুন যে এটি মাইএসকিউএল নির্দিষ্ট নয়: ওরাকল ডাটাবেসগুলি 'অল্টার টেবিল' প্রদান করার সময়ও স্পষ্টতভাবে কমিট করবে etc.

এখন আপনি যদি নিজেকে রক্ষা করতে চান তবে অবশ্যই আপনি আগেই একটি ব্যাকআপ নিতে পারেন, বা যদি আপনার সিস্টেম এটি করতে পারে তবে কোনও এলভিএম বা ফাইল সিস্টেম স্ন্যাপশট। আপনার একটি দাসও থাকতে পারে যা আপনি সংবেদনশীল ক্রিয়াকলাপগুলির আগে সুরক্ষা হিসাবে বিলম্ব / বন্ধ করতে পারেন।

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