অসম্পূর্ণ মাইসক্লড্প্প


11

আমি একটি ডাটাবেস স্ন্যাপশট তৈরি করতে mysqldump চালানোর চেষ্টা করছি এবং আমি খুঁজে পাচ্ছি যে কোনও ত্রুটির খবর না দিয়ে এলোমেলোভাবে মাঝপথে থামবে। আমার ডাটাবেস তুলনামূলকভাবে ছোট (প্রায় 100MB) এবং ইনোডিবি ব্যবহার করছে।

আমি এটি চালাচ্ছি:

mysqldump --force --single-transaction --quick --user myuser --password=mypass -h mydatabasehost mydb > /tmp/snapshot.sql

প্রস্থান কোডের রিপোর্ট 0 পরীক্ষা করা হচ্ছে।

আমার সংস্করণটি হ'ল: mysqldump ভার 10.13 ডিড্রিবিউট 5.1.52, রেডহ্যাট-লিনাক্স-গনু (i386) এর জন্য

আমি কিছু অনুরূপ পোস্ট এবং এমনকি একটি অফিসিয়াল বাগ রিপোর্ট দেখেছি , তবে দুটি সমাধানই প্রয়োগ করা হবে বলে মনে হচ্ছে না।

একটি সম্পূর্ণ ডাটাবেস স্ন্যাপশট নিতে কীভাবে আমি মাইএসকিএলডাম্প পেতে পারি?

সম্পাদনা: আমার ডাটাবেস বর্তমানে অ্যামাজনের আরডিএসে রয়েছে।


পর্যাপ্ত ডিস্কস্পেস আছে কি? এবং টেবিলে কোনও ডিবি দুর্নীতি নেই তা দেখতে আপনি চেক টেবিল চালিয়েছেন?

আপনি --forceকী ত্রুটি পেয়েছেন তা দেখার জন্য আপনি কি পরম সরিয়ে দেওয়ার চেষ্টা করেছেন ? নাকি --quick?

@ অ্যাড্রিয়ান, হ্যাঁ, আমার কাছে প্রায় 10 গিগাবাইট খালি জায়গা রয়েছে, যা যথেষ্ট পরিমাণে বেশি। এবং হ্যাঁ, সমস্ত টেবিল ঠিক আছে চেক আউট।

@ ইজমির, হ্যাঁ, একই সমস্যা দেখা দেয়।

উত্তর:


5

max_allowed_packetক্লায়েন্ট (অর্থাত্ mysqldump) এবং সার্ভার (অর্থাৎ অ্যামাজন আরডিএস) উভয়কেই পর্যাপ্ত পরিমাণে স্থাপন না করাতে সমস্যা হতে পারে । আমি উভয়ই এটি 500M তে সেট করেছি এবং মনে হচ্ছে সমস্যাটি স্থির হয়েছে।

যেহেতু ইনোডিবি'র তথ্য স্কিমা সারণীগুলি কেবল সারি গণনা অনুমান করে, তাই আমার স্ন্যাপশটে সত্যিকার অর্থে আরডিএসের সমস্ত কিছু অন্তর্ভুক্ত কিনা তা বলা শক্ত। সমস্ত টেবিল আছে, তবে সারি গণনা পৃথক। আরও বিশদ বিশ্লেষণের স্ক্রিপ্ট করার আমার কিছু সময় থাকলে আমি আরও নির্দিষ্ট উত্তর দিয়ে আপডেট করব।


4

আপনি চেষ্টা করেছেন?

mysqldump --compress --add-drop-table data --routines --events  --comments --extended-insert -h {host} -u {user} -p {database} > dbdump.sql

আমি যে কোনও সমস্যা ছাড়াই সর্বদা এটি করি এটি সহজ। মূলত ডাম্পটি করা আপনি আপত্তিজনক লেনদেন উপেক্ষা করে একটি নির্দিষ্ট মুহুর্তে আপনার কাছে সমস্ত কিছু (ডেটা, অবজেক্ট এবং কখনও কখনও মূল্যবান মন্তব্য) পান get


1
এই কমান্ডটি চালানোর চেষ্টা করার সময় আমি নিম্নলিখিত ত্রুটিটি পেয়েছি:mysqldump: Got error: 1049: "Unknown database 'data'" when selecting the database
অ্যান্ডি

1
@ এবং আপনি এখন এটির সাথে কিছু ভুল করেছেন। dev.mysql.com/doc/refman/5.7/en/… । আমি মনে করি "ডেটা" মোটেই থাকা উচিত নয়।
রুই মার্কস

1

যতদূর আমি মাইএসকিএল ডক্সটি বুঝতে পারি - আপনি ডাম্প করার সময় টেবিলে কোনও পাঠ সম্পাদন করা হয়, তবে লেনদেন ব্যর্থ হবে। "--ফোর্স - একসেল-লেনদেন - কুইক" ছাড়াই চললে ফলাফল কী?


আমি একই ত্রুটি পেয়েছি।
সেরিন

এই বিবৃতিটি সমর্থন করার জন্য ডকুমেন্টেশনে আমি কিছু খুঁজে পাইনি। এএআইএফআইএকি-র টেবিলটিতে লেখা এবং লেখার জন্য সমর্থন করা হয় যখন - এসেনসেল-লেনদেন সম্পাদন করা হয়, তবে টেবিল-কাঠামোর পরিবর্তিত স্টেটমেন্টগুলি (অলটার, ক্রিয়েট, ট্রানসেট ইত্যাদি) ডাম্পকে ব্যর্থ হতে পারে বা অপ্রত্যাশিত ডেটা দিতে পারে। ( dev.mysql.com/doc/refman/5.7/en/… )
কোড কমান্ডার

1

এটি সম্পূর্ণরূপে সম্ভব যে টেবিলটি দূষিত। আমার অর্থ এই নয় যে ডেটা এবং / অথবা সূচী পৃষ্ঠাগুলি ক্ষতিগ্রস্থ হয়েছে। খুব সাধারণ কিছু হতে পারে যা ভেঙে গেছে।

আমি সম্প্রতি স্ল্যাভ সার্ভারে একটি ব্যাকআপ স্ক্রিপ্ট নিয়ে একটি সমস্যার অভিজ্ঞতা পেয়েছি যখন আমি একাধিক ডাটাবেস সমান্তরাল mysqldumped করেছি। ডেটাবেসগুলির একটিতে মাইএসকিএলডাম্প চালানোর ফলে খুব ছোট একটি মাইএসকিলডাম্প তৈরি হয়েছিল। ডিবিতে 80+ টেবিল ছিল। তবে, ডিবিতে পঞ্চম টেবিলে মাইএসকিএলডাম্প থামল stopped আমি যখন SHOW CREATE TABLE tblname\Gস্লেভের টেবিলের উপর দৌড়ালাম তখন আমি "টেবিল খুঁজে পাইনি" ত্রুটি পেয়েছি। আমি যখন SHOW CREATE TABLE tblname\Gমাস্টারের উপর দৌড়ে গেলাম , সারণির বিবরণটি প্রত্যাশিত হিসাবে প্রদর্শিত হবে।

যা ঘটেছিল তা একটু পাগল ছিল: একজন ক্লায়েন্ট টেবিলটি পুনরুদ্ধার করতে বললেন এবং একজন ইঞ্জিনিয়ার ডিস্ক ব্যাকআপ থেকে InnoDB টেবিলের .ibd ফাইলটি পুনরুদ্ধার করেছিলেন। .Ibd ফাইলের টেবিলস্পেস আইডি (যা 25 টি ছিল) ইবদাটা 1 তে নিবন্ধিত টেবিলস্পেস আইডির সাথে মেলে না (যা ছিল 28)।

আমি গোলামকে আটকানো, মাস্টার ম্যাক্কাল্ডম্পিং এবং স্ক্র্যাচ থেকে প্রতিলিপি স্থাপন করে সমস্যাটি সমাধান করেছি। ভাগ্যক্রমে, ডেটা এবং সূচক স্পাভের পরিমাণ ছিল মোট 7 জিবি। সুতরাং অস্টোর প্রক্রিয়াটি কোনও বড় কথা ছিল না।

গল্পের শিক্ষা

মূল সমস্যাটি হ'ল টেবিলস্পেস আইডিটি ভুল হলে মাইএসকিल्डম্প কোনও ইনোডিবিতে ত্রুটির খবর দেয় না। যখন কোনও মাইসকিলডাম্প শেষ হয় এবং বর্ণমালা অনুসারে প্রতিটি সারণী ডাম্প করে না, যা এটি একটি ত্রুটি দ্বারা বন্ধ হয়ে যায় এবং কোনও ত্রুটি বার্তা প্রিন্ট না করে তা করে।

নিশ্চিত করতে চেক করুন

  • আপনি টেবিলের কাঠামো ব্যবহার করে প্রদর্শন করতে পারেন SHOW CREATE TABLE
  • আপনি INFORMATION_SCHEMA.TABLES থেকে কোনও টেবিল সম্পর্কে সমস্ত কিছু জিজ্ঞাসা করতে পারেন

0

নিম্নলিখিতটি মাইসকিলডাম্প এবং ইনোডিবিতে কেবল কিছু বুদ্ধিমান:

কোনও InnoDB টেবিলের বিপরীতে mysqldump এর আচরণ সম্পর্কে চিন্তা করুন। আপনি যে টেবিলটি ডাম্প করছেন তার সাথে সম্পর্কিত InnoDB বাফার পুলে যদি কোনও নোংরা পৃষ্ঠাগুলি থাকে, তবে সেই টেবিলের নোংরা পৃষ্ঠাগুলি তার SELECT /* SQL_NO_CACHE */বিরুদ্ধে কার্যকর করার আগে ডিস্কে ফেলে দেওয়া উচিত।

যেহেতু আপনি অ্যামাজন আরডিএস ব্যবহার করছেন, আমার অন্ত্র অনুভূতিটি হ'ল যে আপনার ডাটাবেসটি বহু বহুজাতিক অবকাঠামোতে রয়েছে (যদি আমি এটির চেয়ে বেশি বিবরণ দিচ্ছি তবে এই বিবৃতিটি সংশোধন করতে নির্দ্বিধায় অনুভব করুন)। অন্যান্য ডাটাবেসগুলি একটি শেয়ারকৃত ইনোডিবি বাফার পুল, একটি শেয়ার্ড মেটাডেটা ফাইল (আইবডাটা 1) এবং একটি ভাগ করা টেবিল স্পেস (ইনডোডবি_ফাইলে_পাবলী অক্ষম থাকলে আইবডাটা 1 ) ব্যবহার করতে পারে।

ডাটাবেসটির কিছু অপ্রয়োজনীয়তাও চলতে পারে যা এমভিসিসি প্রভাব ফেলতে পারে যদিও এটি একটি ছোট ডেটাसेट is

অ্যামাজন আরডিএসে (বা অ্যামাজন এই সীমাটি বাড়িয়ে তুলবে ) এটির কোনও প্রভাব আছে কিনা তা দেখতে আপনি আপনার মাইএসকিলডাম্প সেশনে ইনোডব_লক_উইট_টাইমআউট (ডিফল্ট 50 সেকেন্ড) বাড়িয়ে নিতে চাইতে পারেন । এছাড়াও, পৃথক টেবিলগুলি ডাম্পিংয়ের সাথে পরীক্ষার চেষ্টা করুন।

আপডেট করুন 2011-11-14 17:58 ইডিটি

আপনার ডিবি সেশনের মধ্যে এটি কার্যকর করার চেষ্টা করুন (এটি দুই মিনিটের জন্য সেট করে):

SET innodb_lock_wait_timeout = 120;

ইনোডব_লক_ওয়াইট_টাইমআউট আরডিএসের একটি স্ট্যাটিক প্যারামিটার যা পরিবর্তন করা যায় না।
সেরিন

@ কেরিন: ডক্স অনুসারে, আপনি এটি আপনার সেশনে সেট করতে পারেন।
রোল্যান্ডোমাইএসকিউএলডিবিএ

"আমার সেশন" বলতে কী বোঝ? mysqldump কোনও সময়সীমা সামঞ্জস্য করার কোনও বিকল্পের তালিকা করে না।
সেরিন

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