লিনাক্স / মাইএসকিএল: সিপি কমান্ডের সাহায্যে এক ডিবি থেকে অন্য ডিবিতে মাইএসকিএল ডিবি ফাইলগুলি অনুলিপি করা নিরাপদ?


11

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

সিপি / ডিবি 1/mytable.frm /db2/mytable.frm

উত্তর:


21

মাইআইএসএএম এর জন্য অনুলিপি করা খুব সহজ এবং InnoDB এর সাথে সম্পূর্ণ 100% ঝুঁকিপূর্ণ (আত্মঘাতী কাছাকাছি)।

আপনার প্রশ্ন থেকে, আপনি উত্থাপিত হয়েছে

cp /db1/mytable.frm /db2/mytable.frm

MyISAM

এটি করা ঠিক আছে। তবে আপনি কেবল .frm স্থানান্তর করতে পারবেন না। আপনাকে অবশ্যই সমস্ত উপাদান সরিয়ে নিতে হবে। আপনার প্রশ্ন থেকে, আসুন db1.mytable নামে একটি সারণী নেওয়া যাক। একটি সাধারণ ইনস্টলেশন, টেবিলটি / var / lib / mysql / db1 এ অবস্থিত। টেবিল তৈরি করতে তিনটি ফাইল থাকবে।

  • /var/lib/mysql/db1/mytable.frm
  • /var/lib/mysql/db1/mytable.MYD (সারণী ডাটাবেস)
  • /var/lib/mysql/db1/mytable.MYI (সারণী সূচী)

এক টেবিলটি সরানোর জন্য আপনাকে অবশ্যই তিনটি ফাইল সরিয়ে নিতে হবে। যদি আপনার সমস্ত টেবিলগুলি মাইআইএসএএম স্টোরেজ ইঞ্জিন ব্যবহার করে তবে আপনি মাইএসকিএল বন্ধ করে অনুলিপি করতে পারবেন। আপনি যদি কেবল টেবিলের অনুলিপি তৈরি করে অন্য কোনও ডাটাবেসে রেখে দিচ্ছেন, আপনার এসকিউএল ব্যবহার করে তা করা উচিত।

উদাহরণস্বরূপ, আপনি যদি db1.mytable ডাটাবেস db2 অনুলিপি করতে চান, এটি করুন:

CREATE TABLE db2.mytable LIKE db1.mytable;
ALTER TABLE db2.mytable DISABLE KEYS;
INSERT INTO db2.mytable SELECT * FROM db1.mytable;
ALTER TABLE db2.mytable ENABLE KEYS;

এখন আপনি যদি সারণিটি db1 থেকে db2 তে সরিয়ে ফেলেন তবে আপনি এটি করতে পারেন:

ALTER TABLE db1.mytable RENAME db2.mytable;

InnoDB

অন্নডিবির অধীনে যে পরিকাঠামো কাজ করে সেগুলি অনুলিপি করা খুব বিপজ্জনক। দুটি বুনিয়াদি অবকাঠামো রয়েছে: 1) ইনোডাব_ফিল_পিটার_সামগ্রী অক্ষম এবং 2) ইননোডবি_ফাইলে_ টেকটিবল সক্ষম

ইনোডিবি'র অ্যাকিলিসের হিল হল সিস্টেম টেবিল স্পেস ফাইল যা ইবদাটা 1 (সাধারণত / var / lib / mysql তে থাকে) নামে পরিচিত। এই ফাইলটিতে কী রয়েছে ?

  • সারণী ডেটা পৃষ্ঠা
  • সারণী সূচী পৃষ্ঠা
  • সারণী মেটাডেটা (টেবিলস্পেস আইডি পরিচালনার তালিকা)
  • এমভিসিসি ডেটা (লেনদেনের বিচ্ছিন্নতা এবং এসিডি সম্মতি সমর্থন করার জন্য)

ইনোডিবি (ইনোডাব_ফায়াল_পার_সামগ্রী অক্ষম)

ইনোডোবি_ফাইলে_পার_সামগ্রী অক্ষম থাকায়, এই ধরণের InnoDB তথ্য আইবডাতা 1 এর মধ্যে লাইভ। আইবডাতা 1 এর বাইরে যে কোনও ইনোডিবি টেবিলের একমাত্র প্রকাশ হ'ল ইনোডিবি টেবিলের .frm ফাইল। সমস্ত InnoDB ডেটা একবারে অনুলিপি করার জন্য সমস্ত / var / lib / mysql এর অনুলিপি করতে হবে।

একটি পৃথক InnoDB টেবিল অনুলিপি করা সম্পূর্ণ অসম্ভব। ডাটা এবং এর সাথে সম্পর্কিত সূচক সংজ্ঞাগুলির যৌক্তিক উপস্থাপনা হিসাবে আপনাকে অবশ্যই টেবিলের একটি ডাম্পটি বের করতে মাইএসকিএলডাম্প করতে হবে। আপনি সেই ডাম্পটিকে একই সার্ভার বা অন্য সার্ভারের অন্য একটি ডাটাবেসে লোড করতে পারেন।

ইনোডিবি (ইনোডাব_ফায়াল_পার_সামগ্রী সক্ষম)

ইনোডোবি_ফাইলে_পার_সামগ্রী সক্ষম করে, টেবিল ডেটা এবং এর সূচীগুলি .frm ফাইলের পাশের ডাটাবেস ফোল্ডারে লাইভ করে। উদাহরণস্বরূপ, db1.mytable টেবিলের জন্য, ইবদাটা 1 এর বাইরের সেই InnoDB টেবিলের প্রকাশটি হবে:

  • /var/lib/mysql/db1/mytable.frm
  • /var/lib/mysql/db1/mytable.ibd

Db1.mytable এর জন্য সমস্ত মেটাডেটা এখনও ইবদাটা 1 তে থাকে এবং এর আশেপাশে কোনও উপায় নেই । পুনরায় লগগুলি এবং এমভিসিসি ডেটা এখনও ইবদাটা 1 দিয়ে লাইভ করে।

সতর্কতা (বা রোবট হিসাবে বিপদটি লোস্ট ইন স্পেসে বলবে )

যদি আপনি কেবল .frm এবং .ibd ফাইলটি অনুলিপি করার কথা ভাবছেন, তবে আপনি আঘাতের জগতের পক্ষে রয়েছেন। InnoDB টেবিলের .frm এবং .ibd ফাইলটি অনুলিপি করা কেবলমাত্র ভাল যদি আপনি গ্যারান্টি দিতে পারেন যে আইবিডিটা 1 ফাইলের মেটাডেটার মধ্যে টেবিলস্পেস আইডি প্রবেশের সাথে .ibd ফাইলের টেবিলস্পেস আইডি ঠিক মেলে।

আমি এই টেবিলস্পেস আইডি ধারণাটি সম্পর্কে ডিবিএ স্ট্যাকএক্সচেঞ্জে দুটি পোস্ট লিখেছি

: এখানে মেলেনি tablespace- র আইডি ঘটনা কিভাবে সংযুক্ত করতে উপর চমৎকার লিঙ্ক এবং ibdata1 করার .ibd ফাইল http://www.chriscalender.com/?tag=innodb-error-tablespace-id-in-file । এটি পড়ার পরে, আপনি কেন আত্মহত্যার কাছাকাছি বলেছিলেন তা দেখতে সক্ষম হওয়া উচিত।

InnoDB এর জন্য আপনার কেবল এটি করা দরকার

CREATE TABLE db2.mytable LIKE db1.mytable;
INSERT INTO db2.mytable SELECT * FROM db1.mytable;

একটি InnoDB টেবিলের একটি অনুলিপি তৈরি করতে। আপনি যদি এটি অন্য ডিবি সার্ভারে স্থানান্তর করে থাকেন তবে মাইএসকিএলডাম্প ব্যবহার করুন।


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

1
বরাবরের মতো দুর্দান্ত উত্তর, @ রোল্যান্ডো! আমার কাছে একমাত্র বড় প্রশ্ন: কেন কেউ সরাসরি মাইএসকিউএল ডাম্প এবং আমদানির বিপরীতে এটি করতে চাইবে? আমি নিখুঁত ডাটাবেস আকার ধরে নিচ্ছি, তবে মনে হয় এটি উত্থাপিত হওয়া উচিত।
জ্যাকগল্ড

1
@ জ্যাকগল্ড মাইএসকিএলডে স্ক্রিপ্ট লোড করার জন্য এসকিউএল প্রচুর প্রসেসিং করা প্রয়োজন, একসাথে কয়েক হাজার সারি সন্নিবেশ করা, সিপিইউ চক্র ব্যবহার করা, পরিকল্পনাগুলি পুনর্নির্মাণের ক্র্যাঙ্কিং করা (বিটি ট্রি সন্নিবেশ, লিফ নোড স্প্লিটস, পুনরায় ব্যালান্সিং কীগুলি, প্রতিটি ননীর জন্য একটি টেবিল স্ক্যান দরকার -উইনিক বিল্ড) কেবল একই টেবিল উত্পাদন করতে। মাইআইএসএএম এর ক্ষেত্রে, চাকাটি পুনরায় উদ্ভাবন কেন? শুধু কপি .frm, .MYDএবং .MYI
রোল্যান্ডোমাইএসকিউএলডিবিএ

@ জ্যাকগল্ড ইনোডিবি-র ক্ষেত্রে, আমি একটি লাইভ ডাটাবেস অনুলিপি করেছিলাম যা সমস্ত ইনোডিবি আরএসসিএন দিয়ে ব্যবহার করে। আরএসসিএনসি ব্যবহার করে অনুলিপি করার পরে, আমি মাইএসকিএল বন্ধ করেছিলাম, একটি চূড়ান্ত আরএসসিএনকি করেছি, এবং সমস্যা ছাড়াই মাইএসকিএল পুনরায় চালু করেছি। আমি আগের মতো একটি পোস্ট লিখেছি: serverfault.com/questions/288140/…
RolandoMySQLDBA

8

সম্পূর্ণ মাইএসকিউএল ডেটাডির অনুলিপি করা একটি ব্যবহারিক কৌশল, মাইএসকিউএল পরিষেবা বন্ধ হয়ে গেছে এবং আপনি সম্পূর্ণ ডাটাবেস সার্ভার অনুলিপি করতে চান।

এটি বৃহত সূচকের সাথে ডেটাবেস স্থানান্তরিত করার জন্য একটি দরকারী কৌশল, এবং একটি মাইএসকিএল ডাম্প সূচকগুলি অন্তর্ভুক্ত করবে না, যা আমদানির সময় পুনরায় তৈরি করা প্রয়োজন। মাইএসকিউএল ক্রীতদাসগুলি সেট আপ করার সময় আমি এই কৌশলটি দরকারী পেয়েছি।

একটি পৃথক ফাইল অনুলিপি ব্যবহৃত টেবিল স্কিমা উপর নির্ভর করবে, কিন্তু বেশিরভাগ ক্ষেত্রে একটি উপযুক্ত সমাধান না।


2
ব্যাখ্যা করার জন্য: আপনাকে প্রতি সেবার পরিষেবা বন্ধ করতে হবে না, যদি আপনার ফাইল সিস্টেমটি সক্ষম হয়, আপনি হয় একটি এলভিএম স্ন্যাপশট সঞ্চালন করতে পারেন এবং এর ব্যাক আপ নিতে পারেন; বা ফাইল সিস্টেম নিজেই হিমায়িত করুন।
দু'বার লিখে দিন

যতক্ষণ না কোনও ব্যক্তি ডাউনটাইম খেতে পারে ততক্ষণ এটি সহজতম উপায়। +1 !!!
রোল্যান্ডোমাইএসকিউএলডিবিএ 16

2

ব্যবহার করুন xtrabackup W / Ow W / O innobackupex মোড়কের এবং আপনি উভয় myisam এবং InnoDB ডাটাবেস উপর ঠিক থাকবে। দ্রষ্টব্য, পুনরুদ্ধার করা ইনডোডাব ডাটাবেসগুলি আপনি xtrabackup ব্যবহার করলেও কেবল ফাইলগুলি অনুলিপি করে না। আপনার আরও তথ্যের প্রয়োজন আছে তা বলুন


1

না, আপনার মাইএসকিড্যাম্পের সাথে ব্যাকআপ নেওয়া উচিত এবং মাইএসকিএল ক্লাইপ ইউটিলিটি সহ পুনরুদ্ধার করা উচিত, আপনি কেবল টেবিলের কাঠামোটি অনুলিপি করছেন এমন ফ্রিএম ফাইলটি অনুলিপি করতে পারেন এবং ভিতরে থাকা ডেটাটি নয়, এবং যদি আপনি ইনডোডব অনুলিপি করেন তবে ফাইলটি সরাসরি সম্ভব নয়।

সেরা উপায় হ'ল ডাম্প এবং টেবিলটি পুনরুদ্ধার করা।

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