উত্পাদনে আইএনটি থেকে বিগিন্টে প্রাথমিক কী কলামটি পরিবর্তন করুন (মাইএসকিউএল 5.6.19 এ)


20

আমাদের প্রোডাকশন ডাটাবেসে কিছু INNODB টেবিলগুলি 2147483647 এর INT AUTO_INCREMENT সীমাতে আঘাত করতে চলেছে এবং আমাদের সেগুলি বিগিন্টে পরিবর্তন করা দরকার অন্যথায় লেখাগুলি ব্যর্থ হতে শুরু করবে।

টেবিলগুলি অ্যামাজন আরডিএসে চলমান একটি উত্পাদন মাইএসকিউএল 5.6.19a ডাটাবেসে রয়েছে।

সার্বক্ষণিকভাবে ঘটে যাওয়া প্রোডাক্ট রিডস এবং সন্নিবেশগুলিকে ব্যাহত না করে আমরা কীভাবে এটি একটি অলটার করতে পারি?

টেবিল MYTABLEপরিবর্তন id idবিগিন্ট স্বয়ংক্রিয় নম্বর না;

টেবিলের জন্য এখানে ডিডিএল রয়েছে:

CREATE TABLE `MYTABLE` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `siteId` int(11) NOT NULL,
  `filter` varchar(10) NOT NULL DEFAULT 'ALL',
  `date` varchar(10) NOT NULL,
  `cards` varchar(250) NOT NULL,
  `apples` varchar(45) NOT NULL,
  `carrots` varchar(45) NOT NULL,
  `corn` varchar(45) NOT NULL,
  `peas` varchar(45) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `unique` (`siteId`,`filter`,`date`,`cards`),
  KEY `date_k` (`date`),
  KEY `cards_k` (`cards`),
  KEY `apples_k` (`apples`),
  KEY `siteId_k` (`siteId`)
) ENGINE=InnoDB AUTO_INCREMENT=1748961482 DEFAULT CHARSET=utf8

উত্তর:


22

আপনার যদি পর্যাপ্ত জায়গা থাকে তবে আপনি প্রকৃত টেবিলের একটি অনুলিপি তৈরি করতে পারেন এবং এতে কাজটি করতে পারেন:

CREATE TABLE new_tbl [AS] SELECT * FROM orig_tbl;

তারপরে আপনি কলামটি পছন্দ অনুযায়ী পরিবর্তন করতে পারেন:

ALTER TABLE tbl_name MODIFY COLUMN col_name BIGINT AUTO_INCREMENT;

প্রক্রিয়াটি শেষ হয়ে গেলে আপনি টেবিলগুলির নাম পরিবর্তন করতে পারেন:

RENAME TABLE tbl_name TO new_tbl_name, tbl_name2 TO new_tbl_name2;

তারপরে আসল টেবিলটি ফেলে দিন এবং আপনার উচিত ফলিত ফলাফল have


আমি এই পদ্ধতির ব্যবহার করেছি কারণ আমি অনুলিপিটি করার সময় টেবিলে লেখাগুলি (যা সমস্ত ব্যাচ মোড) বন্ধ করতে সক্ষম হয়েছিল। প্রায় 36 ঘন্টা সময় নিয়েছে।
মার্ক হানসেন

এবং আপনি এই তিনটি এক লেনদেনে রাখতে চান (লক / আনলক করুন)
সাওওমির লেনার্ট

4

পারকোনা টুলকিট যাওয়ার উপায় হ'ল, যদি আপনি সময়মতো খুব কম না হন। রূপান্তরটি আমাদের টেবিলটিতে পরিণত হয়েছিল (500 জিবি, মাস্টার-স্লেভ সেটআপ) যখন আমরা এটি 24 ঘন্টা চেয়ে কিছুটা বেশি পরীক্ষা করে দেখি, উত্পাদনে এটি প্রায় 1 মাস সময় নেয় (আরও ভাল হার্ডওয়ার সহ) প্রায় শেষ হয় (মজার মজার সিডনোট আমাদের প্রায় শেষ হয়ে যায় 30 দিন আগে) এইডস, সুতরাং আমরা ইতিমধ্যে বি এবং সি পরিকল্পনা করার পরিকল্পনা করতে শুরু করেছি, অফলাইন ব্যাকআপ নিয়ে কাজ করছি, দাসদের অপসারণ, ...)। দেরিটি মূলত দাসদের প্রতি প্রতিরূপ ঘটনার অপেক্ষার কারণে হয়েছিল (আমরা সর্বাধিক 50 সেকেন্ড সময় পিছনের অনুমতি দিয়েছিলাম)। সমবর্তী থ্রেডের সংখ্যা সীমাবদ্ধ করার বিষয়টি নিশ্চিত করুন। আমাদের কাছে 2M এর বেশি সংখ্যক / দিন এবং অনেক মিলিয়ন রিড রয়েছে।

এছাড়াও সচেতন হন যে একবার কভারেশন শুরু হয়ে গেলে আপনি এটি থামাতে পারবেন না (বা কমপক্ষে আমরা এটি পুনরায় চালু করার কোনও উপায় খুঁজে পাইনি) :-(


1

আমরা হব....

KEY TOP_QUERIES_LAST_30DAYS_fk (siteId) প্রাইমারী কী এর সাথে নিরর্থক, তাই আপনি এটিও ফেলে দিতে পারেন।

INSIGNED আপনাকে 4 বিলিয়নে পেয়ে যাবে, তা কি যথেষ্ট হবে?

filterএকটি পরিবর্তন বিবেচনা করুন ENUM

আপনার কি 1.75 বিলিয়ন সারি রয়েছে? নাকি আপনি প্রচুর আইডিকে "বার্ন" করেছিলেন? যদি তাই হয়, সম্ভবত আমরা এটি ঠিক করতে পারি? উদাহরণস্বরূপ REPLACEএবং INSERTউইল আইডির কিছু স্বাদগুলি । INSERT...ON DUPLICATE KEYসাধারণত প্রতিস্থাপন করতে পারেন REPLACE। একটি 2-পদক্ষেপ প্রক্রিয়া INSERT IGNOREআইডির জ্বলন এড়াতে পারে ।

প্রশ্নে ফিরে ...

দেখুন পিটি-অনলাইন-স্কিমা-পরিবর্তনটি কৌশলটি সম্পাদন করবে: http://www.percona.com/doc/percona-toolkit/2.2/pt-online-schema-change.html


আমি কি আমাজন আরডিএস সহ পারকোনা ব্যবহার করতে পারি? হ্যাঁ, আমরা প্রচুর আইডি "বার্ন" করেছি, টেবিলে আসলে প্রায় 330 মিলিয়ন সারি রয়েছে।
মার্ক হানসেন

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