আমি কীভাবে একটি বৃহত ডাটাবেসের একটি মাইএসকিল্ডম্পটিকে অনুকূল করতে পারি?


173

আমার কাছে ইনোডিবি ডাটাবেসের সাথে একটি সিমফনি অ্যাপ্লিকেশন রয়েছে যা 57 টেবিল সহ 2 জিবি ~ ডাটাবেসের আকারের বেশিরভাগ অংশ একক টেবিল (~ 1.2 গিগাবাইট) এ থাকে। আমি বর্তমানে রাতে ডাটাবেস ব্যাকআপ করতে mysqldump ব্যবহার করছি।

আমার কাস্টকাস্ট সংযোগের কারণে, প্রায়শই যদি আমি নিজে নিজে একটি ডাম্প চালাচ্ছি তবে ডাম্পটি সম্পূর্ণ হওয়ার আগে আমার নিজের সার্ভারের সাথে আমার সংযোগের সময়সীমা শেষ হয়ে যায় causing [আমি বর্তমানে একটি ক্রোন চালাই যা রাতের বেলা ডাম্প করে, এটি হ'ল ডাম্পগুলির জন্য যা আমি নিজে হাতে চালিত]

সংযোগের সময়সীমা ইস্যুতে ডাম্পগুলি গতি বাড়ানোর কোনও উপায় আছে, তবে এই প্রক্রিয়াটির সাথে সার্ভারটি দখল করা সময়কেও সীমাবদ্ধ করতে পারে?

বিটিডাব্লু, আমি বর্তমানে এই সমস্যাটি সমাধান করার জন্য সামগ্রিক ডাটাবেসের আকার হ্রাস করার বিষয়ে কাজ করছি।


2
আপনি কী প্যারামিটারগুলি (যদি থাকে) আপনি মাইএসকিএলডাম্প কমান্ডটি দিয়ে যাচ্ছেন?
টবি

--Compact যুক্ত করা আপনার পক্ষে একটি বিকল্প হতে পারে।
টবি

কিছুই সত্যিই নেই -mysqldump [database] -u[user] -p'[password]' > db_backup.sql
প্যাট্রিক

4
screenআপনার পরিস্থিতির জন্য একটি সহজ বিকল্প ব্যবহার nohupকরা হবে, এটি আপনার কমান্ডটি সার্ভারে চলমান চালিয়ে যাওয়ার অনুমতি দেবে, এমনকি আপনার সংযোগটি বাদ পড়লেও। যেমন nohup mysqldump [options] > backup.sql 2> backup.err &। আপনি যদি কোনও আউটপুট ফাইল সরবরাহ না করেন তবে nohupএটি nohup.outডিফল্টরূপে তৈরি করবে ।
dabest1

1
একবার দেখুন atএবং screen(পরে ইনস্টল করা থাকলে তবে atএটি সব ইউনিক্সের ক্ষেত্রে স্ট্যান্ডার্ড) বা ServerAliveIntervalএসএসএইচ- এর বিকল্পগুলির জন্য ফায়ারওয়াল আপনাকে খুব দীর্ঘ নিষ্ক্রিয় সংযোগের পরে বন্ধ করার উপায়গুলি ব্যবহার করতে পারে।
ম্যাটবিয়ানকো

উত্তর:


134

এর মতো ডাম্পের প্রধান বাধা হ'ল ড্রাইভ আই / ও। আপনি প্রচুর ডেটা পড়ছেন এবং আবার লিখছেন। আপনি এটি বিভিন্ন উপায়ে গতি বাড়িয়ে তুলতে পারেন:

  • আপনার আউটপুট ডাটাবেস ফাইলগুলি সংরক্ষণ করা এক (গুলি) এর চেয়ে আলাদা ড্রাইভে চলেছে - এটি স্পিনিং ডিস্কের সাথে একটি বিরাট তাত্পর্য তৈরি করবে কারণ ড্রাইভের মাথাগুলি পড়া থেকে পড়া অবস্থানের মধ্যে ক্রমাগত ঝাঁকুনি দেয় না Make এবং অবস্থান লিখিত হচ্ছে।
  • মাইএসকিএলডাম্পের আউটপুটটি খুব সংকোচনযোগ্য হবে, সুতরাং যদি আপনি পাইপ আউটপুটটিকে পাইপ আউটপুট থেকে পৃথক না করতে পারেন তবে পাইপ আউটপুট মাধ্যমে gzipবা অনুরূপ। এটি কিছু সিপিইউ সময় ব্যয় করে (সুতরাং সামগ্রিক আইও লোড, এবং মাথা চলাচলের পরিমাণ হ্রাস করবে) রচনার পরিমাণ হ্রাস করবে (যা যাইহোক এই সময়ে আপনার অনেক অতিরিক্ত থাকতে পারে)।
  • এছাড়াও, (পাশাপাশি বা সংক্ষেপণের পরিবর্তে) পাইপ ইউটিলিটি ( পিভি এর মতো ) মাধ্যমে আউটপুটটি পাস করে যা ড্রাইভগুলিতে লিখিত গ্রুপ ব্লকে বৃহত্তর রাইফ বাফারকে আরও একসাথে সমর্থন করে, আবার মাথা-চলাচলের ক্ষতিকারক প্রভাবকে হ্রাস করতে - এটি তৈরি করবে --quickবৃহত টেবিলগুলির ব্যাক আপ করার র‌্যাম প্রভাবকে হ্রাস করতে বিকল্পটি ব্যবহার করা হলে) বেশ পার্থক্য ।
  • আইও লোড অন্যথায় কম হলে কেবল আপনার ব্যাকআপ প্রক্রিয়াটি চালান।

আপনি যদিও ভুল সমস্যার সমাধান করছেন এটির পরিবর্তে: সংযোগের ড্রপগুলি সমাধান করা সহজ হতে পারে (যদিও আপনার ব্যাকআপগুলি দ্বারা আরোপিত I / O বোঝা হ্রাস করা আপনার অন্যান্য ব্যবহারকারীর উপর প্রভাব ফেলতে সাহায্য করবে তাই যাইহোক চেষ্টা করার মতো মূল্য)। আপনি কি স্ক্রিনের মাধ্যমে নিজের ম্যানুয়াল ব্যাকআপগুলি চালাতে পারবেন (বা অনুরূপ সরঞ্জাম যেমন টেমাক্স )? যদি সার্ভারের সাথে আপনার সংযোগটি ড্রপ হয় তবে আপনি screenকোনও প্রক্রিয়া ব্যাহত না হয়ে সবে পুনরায় সংযোগ করতে এবং পুনরায় সংযোগ করতে পারবেন ।

আপনি যদি সরাসরি সংযোগের মাধ্যমে ডেটা প্রেরণ করছেন (যেমন আপনি আপনার স্থানীয় মেশিনে রিমোট ডাটাবেসের বিরুদ্ধে মাইএসকিल्डম্প চালাচ্ছেন, সুতরাং ডাম্প স্থানীয়ভাবে উপস্থিত হয়) আপনি প্রথমে সার্ভারে ডাম্প চালানো, প্রয়োজন অনুসারে সংকোচনের পরে আরও ভাল হতে পারেন then কোনও সরঞ্জাম (যেমন rsync) ব্যবহার করে নেটওয়ার্কের উপরে থাকা ডেটাগুলি যা আংশিক স্থানান্তরকে সমর্থন করে যাতে কোনও সংযোগ ড্রপ বিঘ্ন ঘটলে আপনি স্থানান্তর পুনরায় চালু করতে পারেন (পুনরায় আরম্ভের পরিবর্তে)।

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

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


আমি আশা করি আমি আমার সার্ভারগুলিতে বাদ পড়া এসএসএস সংযোগের সংখ্যা কমিয়ে আনতে পারি। যদি আমি টার্মিনালটি ~ 60 সেকেন্ডের বেশি সময় না ব্যবহার করার প্রত্যাশা করি topতবে সংযোগটি যাতে না ঘটে তা নিশ্চিত হয়ে আমি দৌড়ে । (এবং আমি দৃ sure়ভাবে নিশ্চিত যে এটি কমকাস্ট সংযোগ হিসাবে আমরা কেবলমাত্র কাজের জন্য একটি স্ট্যান্ডার্ড ডাব্লুআরটি রাউটার এবং ফায়ারওয়াল ব্যবহার করি এবং আমার বাড়ির কমকাস্ট সংযোগটি কখনই কমে না)
প্যাট্রিক

আমি এসএসএইচ সংযোগগুলির জন্য নির্দিষ্ট একটি সংক্ষিপ্ত নোট যুক্ত করেছি।
ডেভিড স্পিললেট

2
এই উত্তর গভীরতা এবং অন্তর্দৃষ্টি। এর জন্য আপনার একটি +3 পাওয়া উচিত। দুঃখিত, আমি আপনাকে কেবল +1 দিতে পারি।
রোল্যান্ডোমাইএসকিউএলডিবিএ

116

মাইএসকিলডাম্প সহ বাক্সব্যাপী করণীয় IN

আইএমএইচও ব্যাকআপগুলি একটি শিল্প ফর্ম হয়ে উঠেছে যদি আপনি কেবল কীভাবে এটির কাছে যেতে চান

আপনার কাছে বিকল্প রয়েছে

বিকল্প 1: mysqldump একটি সম্পূর্ণ mysql উদাহরণ

এটি সবচেয়ে সহজ, নন-ব্রেইনার !!!

mysqldump -h... -u... -p... --hex-blob --routines --triggers --all-databases | gzip > MySQLData.sql.gz

এক ফাইলে লিখিত সমস্ত কিছুই: টেবিল স্ট্রাকচার, সূচী, ট্রিগার, সঞ্চিত পদ্ধতি, ব্যবহারকারী, এনক্রিপ্ট হওয়া পাসওয়ার্ড। অন্যান্য মাইএসকিলডাম্প বিকল্পগুলি বাইনারি লগ, ডাটাবেস তৈরির বিকল্পগুলি, আংশিক ডেটা (- কোথাও বিকল্প) ইত্যাদি থেকে ইনসার্ট কমান্ডের বিভিন্ন স্টাইল, লগ ফাইল এবং অবস্থানের স্থানাঙ্ক রফতানি করতে পারে।

বিকল্প 2: মাইএসকিএলডাম্প পৃথক ডেটা ফাইলগুলিতে পৃথক ডাটাবেস

ডাটাবেসগুলির একটি তালিকা তৈরি করে শুরু করুন (এটি করার জন্য 2 কৌশল)

কৌশল 1

mysql -h... -u... -p... -A --skip-column-names -e"SELECT schema_name FROM information_schema.schemata WHERE schema_name NOT IN ('information_schema','mysql')" > ListOfDatabases.txt

টেকনিক 2

mysql -h... -u... -p... -A --skip-column-names -e"SELECT DISTINCT table_schema FROM information_schema.tables WHERE table_schema NOT IN ('information_schema','mysql')" > ListOfDatabases.txt

প্রযুক্তি 1 দ্রুততম উপায় way প্রযুক্তি 2 নিশ্চিত এবং নিরাপদ। প্রযুক্তি 2 আরও ভাল কারণ, কখনও কখনও ব্যবহারকারীরা / var / lib / mysql (ডাটাডির) এ সাধারণ উদ্দেশ্যে ফোল্ডার তৈরি করেন যা ডাটাবেস সম্পর্কিত নয়। তথ্য_সেমিমা ফোল্ডারটি তথ্য_সেমি.স্কেমতা সারণিতে একটি ডাটাবেস হিসাবে নিবন্ধিত করবে। প্রযুক্তি 2 এমন ফোল্ডারগুলিকে বাইপাস করবে যেখানে মাইএসকিএল ডেটা নেই।

আপনি যখন ডাটাবেসের তালিকাটি সংকলন করেন, আপনি তালিকার মধ্য দিয়ে লুপটি চালিয়ে যেতে পারেন এবং এগুলি পছন্দসই সমান্তরালেও মাইএসকিल्ड্প্প করতে পারেন।

for DB in `cat ListOfDatabases.txt`
do
    mysqldump -h... -u... -p... --hex-blob --routines --triggers ${DB} | gzip > ${DB}.sql.gz &
done
wait

যদি এক সাথে লঞ্চ করার জন্য অনেক বেশি ডাটাবেস থাকে তবে সমান্তরাল একবারে 10 টি ডাম্প করুন:

COMMIT_COUNT=0
COMMIT_LIMIT=10
for DB in `cat ListOfDatabases.txt`
do
    mysqldump -h... -u... -p... --hex-blob --routines --triggers ${DB} | gzip > ${DB}.sql.gz &
    (( COMMIT_COUNT++ ))
    if [ ${COMMIT_COUNT} -eq ${COMMIT_LIMIT} ]
    then
        COMMIT_COUNT=0
        wait
    fi
done
if [ ${COMMIT_COUNT} -gt 0 ]
then
    wait
fi

বিকল্প 3: মাইএসকিএলডাম্প পৃথক ডাটা ফাইলে আলাদা টেবিলগুলি

সারণীর তালিকা তৈরি করে শুরু করুন

mysql -h... -u... -p... -A --skip-column-names -e"SELECT CONCAT(table_schema,'.',table_name) FROM information_schema.tables WHERE table_schema NOT IN ('information_schema','mysql')" > ListOfTables.txt

তারপরে 10 টি গোষ্ঠীতে সমস্ত সারণী ফেলে দিন

COMMIT_COUNT=0
COMMIT_LIMIT=10
for DBTB in `cat ListOfTables.txt`
do
    DB=`echo ${DBTB} | sed 's/\./ /g' | awk '{print $1}'`
    TB=`echo ${DBTB} | sed 's/\./ /g' | awk '{print $2}'`
    mysqldump -h... -u... -p... --hex-blob --triggers ${DB} ${TB} | gzip > ${DB}_${TB}.sql.gz &
    (( COMMIT_COUNT++ ))
    if [ ${COMMIT_COUNT} -eq ${COMMIT_LIMIT} ]
    then
        COMMIT_COUNT=0
        wait
    fi
done
if [ ${COMMIT_COUNT} -gt 0 ]
then
    wait
fi

বিকল্প 4: আপনার চিত্র ব্যবহার করুন

উপরে বর্ণিত বিকল্পগুলি এবং পরিষ্কার স্ন্যাপশটের জন্য কৌশলগুলির বিভিন্নতার চেষ্টা করুন

উদাহরণ

  1. প্রতিটি টেবিলের আকার আরোহণ বা অবতরণ করে সারণির তালিকা অর্ডার করুন।
  2. পৃথক প্রক্রিয়া ব্যবহার করে, মাইএসকিএলডাম্প চালু করার আগে "লক পড়ুন; ফ্ল্যাট ট্যাবলেটগুলি চালাও; স্লিপ সিলিপ (86400)" চালান। মাইএসকিল্ডাম্পস সম্পূর্ণ হওয়ার পরে এই প্রক্রিয়াটি হত্যা করুন। এটি সহায়ক যদি কোনও ডাটাবেসে InnoDB এবং মাইআইএসএএম উভয় থাকে
  3. তারিখযুক্ত ফোল্ডারে মাইএসকিल्डডাম্পগুলি সংরক্ষণ করুন এবং পুরানো ব্যাকআপ ফোল্ডারগুলি ঘোরান।
  4. পুরো উদাহরণ মাইসকিলডাম্প স্ট্যান্ড স্টোন সার্ভারগুলিতে লোড করুন।

বিচারকার্য স্থগিত রাখার আদেশ

কেবলমাত্র বিকল্প 1 সমস্ত কিছু নিয়ে আসে। ত্রুটিটি হ'ল যেভাবে এইভাবে তৈরি করা মাইএসকিল্ডাম্পস কেবল সেই মাইএসকিএলডের একই মজোট রিলিজ সংস্করণে পুনরায় লোড করা যায় যা মাইএসকিএলডাম্প তৈরি হয়েছিল। অন্য কথায়, একটি মাইএসকিউএল 5.0 ডাটাবেস থেকে একটি মাইএসকিএলডাম্প 5.1 বা 5.5 এ লোড করা যায় না। কারন ? প্রধান রিলিজগুলির মধ্যে মাইএসকিএল স্কিমা সম্পূর্ণ আলাদা।

2 এবং 3 বিকল্পের মধ্যে ব্যবহারকারীর নাম এবং পাসওয়ার্ড সংরক্ষণ করা অন্তর্ভুক্ত নয়।

পাঠযোগ্য এবং আরও বহনযোগ্য এমন ব্যবহারকারীদের জন্য এসকিউএল অনুদানগুলি ডাম্প করার সাধারণ উপায় এখানে

mysql -h... -u... -p... --skip-column-names -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>''" | mysql -h... -u... -p... --skip-column-names -A | sed 's/$/;/g' > MySQLGrants.sql

বিকল্প 3 সঞ্চিত পদ্ধতিগুলি সংরক্ষণ করে না, সুতরাং আপনি নিম্নলিখিতটি করতে পারেন

mysqldump -h... -u... -p... --no-data --no-create-info --routines > MySQLStoredProcedures.sql &

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

ব্যাকআপটি সম্পাদন করার প্রায় 1 ঘন্টা আগে এই এসকিউএল কমান্ডটি চালান

SET GLOBAL innodb_max_dirty_pages_pct = 0;

মাইএসকিউএল 5.5-এ ডিফল্ট ইনোডব_ম্যাক্স_ডাটি_পেজ_প্যাক্টটি 75 My এটি কোনও ইনোডিবি টেবিলের বিরুদ্ধে কোনও মাইএসকিল্ডাম্প সম্পাদন করার আগে InnoDB ডেটার অসম্পূর্ণ দ্বি-পর্যায়ের কমিটগুলি পরিষ্কার করার প্রভাব কমিয়ে আনবে বা কমপক্ষে কমিয়ে দেবে।

মাইএসকিলডাম্পের শেষ শব্দ ORD

বেশিরভাগ লোকেরা অন্য সরঞ্জামগুলির পক্ষে মাইএসকিএলডাম্প থেকে বিরত থাকে এবং সেই সরঞ্জামগুলি সত্যই ভাল।

যেমন সরঞ্জাম অন্তর্ভুক্ত

  1. ম্যাটকিট (পেরকোনা থেকে সমান্তরাল ডাম্প / পুনরুদ্ধার স্ক্রিপ্টগুলি [অবনমিত তবে দুর্দান্ত]]
  2. এক্সট্রাব্যাকআপ ( পারকোনা থেকে টপ নট স্ন্যাপশট ব্যাকআপ)
  3. সিডিপি আর 1 এসফ্ট ( মাইএসকিউএল মডিউল বিকল্প যা পয়েন্ট-ইন-টাইম স্ন্যাপশট নেয়)
  4. মাইএসকিউএল এন্টারপ্রাইজ ব্যাকআপ (পূর্বে ইনোডিবি হট ব্যাকআপস [বাণিজ্যিক])

আপনার যদি সত্যিকারের মাইএসকিউএল ডিবিএর স্পিরিট থাকে তবে আপনি মাইএসকিএলডাম্পকে আলিঙ্গন করতে পারেন এবং এটির উপর সম্পূর্ণ দক্ষতা অর্জন করতে পারেন। আপনার সমস্ত ব্যাকআপগুলি মাইএসকিউএল ডিবিএ হিসাবে আপনার দক্ষতার প্রতিচ্ছবি হতে পারে


2
মাইএসকিলডাম্পের দুর্দান্ত ব্যবহারের জন্য +1: আপনার যদি সত্যিকারের মাইএসকিউএল ডিবিএর স্পিরিট থাকে তবে আপনি মাইএসকিএলডাম্পকে আলিঙ্গন করতে পারেন এবং এটি অর্জন করতে পারে তার উপর সম্পূর্ণ দক্ষতা অর্জন করতে পারেন। আপনার সমস্ত ব্যাকআপগুলি মাইএসকিউএল ডিবিএ হিসাবে আপনার দক্ষতার প্রতিচ্ছবি হতে পারে .... দুর্দান্ত লাইনগুলি !!!
আব্দুল মানাফ

4
InnoDB এ, পৃথকভাবে ডাম্পিং টেবিলগুলি আপনাকে একটি বেমানান ব্যাকআপ দেবে।
আলাইন কলিন্স

5
@ অ্যালাইনক্লিনস এই কারণেই আমি কেবল একটি পঠন দাসের উপরে মাইএসকিএলডাম্প চালাচ্ছি। সেকেন্ডস_বিহাইন্ড_মাস্টারটি 0 হয়ে গেলে আপনি স্টপ স্ল্যাভ চালান। পূর্বোক্ত শৈলীর যে কোনওটিতে মাইএসকিলডাম্প করার জন্য আপনার কাছে সময়মতো ধারাবাহিক পয়েন্ট রয়েছে। আমি অনলাইনে ট্রেডিং সংস্থাগুলির জন্য এটি আমার বা আমার সংস্থার মালিকদের কাছে একক অভিযোগ না করে গত 5 বছরে করেছি। এই মুহুর্ত হিসাবে, আমি এই ক্লায়েন্টের জন্য প্রতি 10 মিনিটে সমান্তরাল মাইএসকিल्डম্প করি। অন্যান্য ক্লায়েন্টদের দ্রুত ব্যাকআপ সময় দেওয়ার জন্য আমি এটিও করি।
রোল্যান্ডোমাইএসকিউএলডিবিএ

আমার কাছে একটি 32 গিগাবাইট ডিবি রয়েছে তাই 3 বিকল্পটি আমার মনে যা ছিল তা হ'ল! ধন্যবাদ!
রেমন্ড

অত্যন্ত বড় সঙ্কুচিত করতে আমাকে 1TB ডেটা ব্যাকআপ করতে এবং পুনরায় আমদানি করতে হবে ibdata1। হার্ডওয়্যার RAID দ্বারা সমর্থিত এসএসডিগুলির সময়ে 3 বিকল্পটিই আমার একমাত্র সমাধান।
রাবুদে

18

দাস থেকে মাইএসকিউএল প্রতিলিপি মাস্টার দেখুন। এটি আপনাকে একই ডাটাবেস সহ অন্য একটি ডাটাবেস সার্ভারে মাস্টারের ডেটাবেস ক্লোন করতে দেয়। এর মধ্যে মাস্টার এবং দাসের পরিচয় রয়েছে। স্লেভ নিজেকে মাস্টার ডাটাবেস সার্ভার এবং বা এটির ডাটাবেসের সঠিক কপি করে তোলে। মাস্টার (গুলি) এবং ক্রীতদাস (দের) এর মধ্যে এক-এক, একাধিক, একাধিক সম্পর্ক থাকতে পারে।

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

সুসংবাদটি হ'ল এটি আপনার মাইএসকিউএল সার্ভারকে খুব বেশি প্রভাবিত করবে না কারণ আপনি কোনও ডাউনটাইম বা ধীর অনুসন্ধানের প্রতিক্রিয়া লক্ষ্য করবেন না। আমরা এটি 10 ​​জিবি ডাটাবেসের জন্য ব্যবহার করি এবং এটি কোনও ডাউনটাইম ছাড়াই কবজির মতো কাজ করে।

একই মেশিনে মাইএসকিউএল প্রতিলিপি


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

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

1
ডেভিড স্পেল্টের মন্তব্যে ডিট্টো। আমি আমার ওয়েব হোস্টিং নিয়োগকারীর জন্য দাসগুলিতে মাইএসকিএলডাম ব্যাকআপ সহ কয়েক ডজন মাস্টার / স্লেভ সেটআপ এবং রক্ষণ করি। আমার কাছ থেকেও +1।
রোল্যান্ডোমাইএসকিউএলডিবিএ

16

পরিকল্পনা একটি: পারকোনা থেকে এক্সট্রাব্যাকআপও দেখুন। এটি কোনও উল্লেখযোগ্য লকিং ছাড়াই ইনোডিবি'র অনলাইন ব্যাকআপের অনুমতি দেয়।

পরিকল্পনা বি: একটি স্লেভ বন্ধ করা যেতে পারে এবং আপনি বেশ কয়েকটি মাধ্যমে যে কোনও একটি দ্বারা নিয়মিত ব্যাকআপ নিতে পারেন (ফাইলগুলি, মাইএসকিल्डম্প্প, অ্যাক্সট্রাব্যাকআপ ইত্যাদি)

পরিকল্পনা সি: এলভিএম স্ন্যাপশট। কিছু ক্রিপ্টিক সেটআপের পরে, ডাটাবেসের আকার নির্বিশেষে ব্যাকআপের জন্য ডাউনটাইম এক মিনিটেরও কম হয়। আপনি মাইএসকিএলড বন্ধ করুন, স্ন্যাপশটটি করুন, মাইএসকিএলডি পুনরায় চালু করুন, তারপরে স্ন্যাপশটটি অনুলিপি করুন। শেষ পদক্ষেপটি দীর্ঘ সময় নিতে পারে তবে মাইএসকিউএল ডাউন হয় না।

পরিকল্পনা ডি: একটি স্লেভের স্ন্যাপশট - শূন্য ডাউনটাইম।


2
চারটি পরিকল্পনার জন্য হুরাহ আমি কেবল উত্তর প্রতি +0.25 দিতে পারি !!! +1 (4 x 0.25)
RolandoMySQLDBA

15

প্রথমে কয়েকটি অ্যাডমিন পয়েন্ট: আপনি কি কোনও এফটিপি করতে সংযুক্ত হচ্ছেন বা আপনার মধ্যে ঝাঁকুনি পড়েছে এবং মারা যাচ্ছে? যদি ssh, তবে অবশ্যই পর্দাটি ব্যবহার করা নিশ্চিত করুন যাতে আপনি কাস্টকাস্ট ক্রাশের পরে পুনরায় শুরু করতে পারেন। যদি ftp হয়, তবে নিশ্চিত হোন যে আপনি প্রেরণের আগে এটি / ট্যারে সংকোচিত করছেন।

--Opt প্যারামিটার বা --quick ব্যবহার করে দেখুন

--opt এই বিকল্পটি ডাম্প এবং পুনরায় লোড অপারেশনগুলিকে আরও দক্ষ করতে অতিরিক্ত বিকল্পগুলির একটি সেট চালু করে on বিশেষত, এটি - অ্যাড-ড্রপ-টেবিল, - অ্যাড-লকস, - সমস্ত, - কুইক, - এক্সটেন্ডেড-সন্নিবেশ, - লক-টেবিল এবং - ডিসাইজে-কী বিকল্পগুলি একসাথে ব্যবহার করার সমতুল্য। নোট করুন যে এই বিকল্পটি আউটপুটটিকে কম পোর্টেবল এবং অন্যান্য ডাটাবেস সিস্টেমগুলি দ্বারা বোঝার সম্ভাবনা কম করে।

--quick এই বিকল্পটি mysqldump কে সার্ভার থেকে প্রতিটি সারি পড়ার কারণে ডাম্প আউটপুট লিখতে বলেছে, এটি বড় টেবিলের জন্য দরকারী হতে পারে। ডিফল্টরূপে, mysqldump আউটপুট লেখার আগে একটি সারণী থেকে সমস্ত সারি মেমরিতে পাঠ করে; বড় টেবিলগুলির জন্য, এটির জন্য প্রচুর পরিমাণে মেমরির প্রয়োজন হয়, সম্ভবত ডাম্পটি ব্যর্থ হয়।


1
--Opt ফাইলের আকার বাড়বে না যা শেষ পর্যন্ত আউটপুট পাবে?
টবি

এটি কিছু যুক্ত করবে - আমি বলতে চাইছিলাম - কুইক যোগ করা যা তার সমস্যার উত্তর বেশি .... এখন সম্পাদনা করা। ধন্যবাদ!
ডেভিড হল

স্ক্রিনের জন্য +1, যা পুরোপুরি এই সমস্যাটি এড়িয়ে চলে
গাইউস

মাইসকিলডাম্পের - ওপট এবং - স্পষ্ট ব্যাখ্যাগুলির জন্য খুব সুন্দর এবং সংক্ষিপ্ত উত্তরের জন্য +1।
রোল্যান্ডোমাইএসকিউএলডিবিএ

1
ডিফল্টরূপে --opt চালু আছে।
জর্দান

5

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

TABLES=`mysql -u $USER -p$PWD -Bse 'show tables' $DB`
for TABLE in $TABLES
do
    mysqldump -u $USER -p$PWD $DB $TABLE >> dump.sql
done

4
এটিকে একটি "বেমানান" ব্যাকআপ হিসাবে বিবেচনা করা হয়, এটি পুনরুদ্ধার করার পরে আপনার এক টেবিলের মধ্যে এমন ডেটা থাকতে পারে যা অন্যকে মানচিত্র করে তবে অস্তিত্বহীন।
মরগান টকার

3

আমি মনে করি যে প্রশ্নটি কীভাবে মাইএসকিএলডামের তৈরি ডাম্প ফাইলগুলি থেকে দ্রুত পুনরুদ্ধার করা যায়, কোনও ব্যাকআপ সমাধান নয়।

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

এটি একটি প্রমাণিত, দ্রুত, প্রায় সমান্তরাল কৌশল তবে 100% নিশ্চিত নয়, 500 জি বা এর মতো বড় আকারের ডাম্পগুলি থেকে পুনরুদ্ধার করতে কত সময় লাগবে। তবে আমার বিনীত মতে আপনার সমান্তরাল কিছু দরকার। উদাহরণের জন্য নীচের লিঙ্কটি চেকআউট করুন।

[মাইএসকিউএল এর জন্য এসকিউএল ডাম্পগুলি (মাইএসকিএলডাম্প) থেকে দ্রুত, সমান্তরাল পুনরুদ্ধার] [1]

http://geeksww.com/tutorials/database_management_systems/mysql/tips_and_tricks/fast_parallel_restore_from_sql_dumps_mysqldump_for_mysql.php

"মাইএসকিউএলের জন্য এসকিউএল ডাম্পগুলি (মাইএসকিএলডাম্প) থেকে দ্রুত, সমান্তরাল পুনরুদ্ধার"


2
এটি আপনার অন্য প্রশ্নের উত্তরের হুবহু অনুলিপি । আপনি এই নির্দিষ্ট প্রশ্নের জন্য এটি আরও কিছুটা কাস্টমাইজ করতে চাইতে পারেন।
পল হোয়াইট

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