মাইএসকিউএল কোনওভাবেই বিশাল (32 গিগাবাইট) স্কয়ার ডাম্প দ্রুত আমদানি করতে চান?


67

আমার এই বিশাল 32 জিবি এসকিউএল ডাম্প রয়েছে যা আমার মাইএসকিউএল এ আমদানি করতে হবে। আমাকে এর আগে এত বড় এসকিউএল ডাম্প আমদানি করতে হয়নি। আমি যথারীতি করলাম:

mysql -uroot dbname < dbname.sql

এটি খুব বেশি সময় নিচ্ছে। প্রায় 300 মিলিয়ন সারি সহ একটি টেবিল রয়েছে, প্রায় 3 ঘন্টার মধ্যে এটি 1.5 মিলিয়ন হয়ে যায়। সুতরাং, দেখে মনে হচ্ছে পুরো জিনিসটি 600 ঘন্টা লাগবে (এটি 24 দিনের) এবং অবৈধ imp সুতরাং আমার প্রশ্নটি হল, এটি করার কোনও দ্রুত উপায় আছে?

আরও তথ্য / অনুসন্ধানসমূহ

  1. সারণীগুলি সমস্ত InnoDB এবং কোনও বিদেশী কী সংজ্ঞায়িত হয়নি। অনেকগুলি সূচক রয়েছে।
  2. মূল সার্ভার এবং ডিবিতে আমার অ্যাক্সেস নেই তাই আমি একটি নতুন ব্যাক আপ করতে বা "হট" অনুলিপি করতে পারি না etc.
  3. এখানেinnodb_flush_log_at_trx_commit = 2 প্রস্তাবিত হিসাবে সেট করা থেকে কোনও (স্পষ্টত দৃশ্যমান / তাত্পর্যপূর্ণ) উন্নতি হবে বলে মনে হচ্ছে।
  4. আমদানির সময় সার্ভারের পরিসংখ্যান (মাইএসকিউএল ওয়ার্কবেঞ্চ থেকে): https://imgflip.com/gif/ed0c8
  5. মাইএসকিউএল সংস্করণটি 5.6.20 সম্প্রদায়।
  6. ইনোডাব_বফার_পুল_সাইজ = 16 এম এবং ইনোডাব_লগ_বাফলার_সাইজ = 8 এম। আমার এগুলি বাড়ানোর দরকার আছে?

আপনি কি সার্ভারে আরও দ্রুতগতি যুক্ত করতে পারবেন, বেশি র‌্যাম এবং এসএসডি স্টোরেজ?

@ বার্ট সার্ভারে 8 জিবি র‌্যাম রয়েছে যার মধ্যে বেশিরভাগটি কেবল অব্যবহৃত। হয় না আরও স্টোরেজ যোগ করতে পারেন। কীভাবে সাহায্য করবে? এটি কি আসলেই এত ধীর রাইটিং অপারেশন?

বাধা কি? একটি সিপিইউ কোর পেগড?
ক্রিস এস

@ ক্রিসস নং, সিপিইউ ব্যবহারের পরিমাণ 3 থেকে 4%। বাধা কী তা আমি নিশ্চিত নই। আমি ভাবছি এটি সূচকগুলি। কেউ কীভাবে বাধা খুঁজে পাবে / নিশ্চিত করবে?

1
আপনার যদি স্কয়ার থাকে, আপনি কি তৈরি সূচি বিবৃতিগুলি সম্পাদনা করতে পারেন এবং দেখতে পান যে এটি দ্রুত হয় কিনা? আপনার একবার ডেটা আমদানি হয়ে গেলে, আপনাকে সেগুলি পুনরায় তৈরি করতে হবে

উত্তর:


84

পারকোনার ভাদিম টাকাচেনকো এই সূক্ষ্ম চিত্রের উপস্থাপনা করেছেন ইনোডিবি

InnoDB আর্কিটেকচার

আপনাকে অবশ্যই নিম্নলিখিতগুলি পরিবর্তন করতে হবে

innodb_buffer_pool_size = 4G
innodb_log_buffer_size = 256M
innodb_log_file_size = 1G
innodb_write_io_threads = 16
innodb_flush_log_at_trx_commit = 0

কেন এই সেটিংস?

এটির মতো মাইএসকিএল পুনরায় চালু করুন

service mysql restart --innodb-doublewrite=0

এটি InnoDB ডাবল রাইট বাফার অক্ষম করে

আপনার ডেটা আমদানি করুন। হয়ে গেলে, সাধারণত মাইএসকিএল পুনরায় চালু করুন

service mysql restart

এটি InnoDB ডাবল রাইট বাফারটিকে পুনরায় সক্ষম করে

একবার চেষ্টা করে দেখো !!!

সাইড নোট: সর্বশেষতম সুরক্ষা প্যাচগুলির জন্য আপনার 5.6.21 এ আপগ্রেড করা উচিত


আমি এটির জন্য একটি লিনাক্স বাশ স্ক্রিপ্ট তৈরি করেছি, কম মেমরি জিস্ট.github.com/OZZlE/57d550c3cc1c1ff17481e465e4f6d674
ওজজিআইই

9

আপনার কি সত্যিই পুরো ডাটাবেসটি পুনরুদ্ধার করা দরকার? আপনি যদি না করেন তবে আমার 2 সি:

"খণ্ডগুলি" এ পুনরুদ্ধার করতে আপনি নির্দিষ্ট সারণীগুলি বের করতে পারেন। এটার মতো কিছু:

zcat your-dump.gz.sql | sed -n -e '/DROP TABLE.*`TABLE_NAME`/,/UNLOCK TABLES/p' > table_name-dump.sql

আমি এটি একবার করেছিলাম এবং আমার প্রয়োজনীয় টেবিলটি বের করতে 10 মিনিটের মতো সময় লেগেছে - আমার পুরো পুনরুদ্ধারটিতে 35 গিগাবাইট (গিজিপড) ডাম্প সহ 13 ~ 14 ঘন্টা সময় লেগেছে।

/pattern/,/pattern/pসঙ্গে -nতাদের সহ - পরামিতি "নিদর্শন মধ্যে" একটি ফালি করে তোলে।

যাইহোক, 35 গিগাবাইটটি পুনরুদ্ধার করতে আমি একটি এডাব্লুএস ইসি 2 মেশিন (সি 3.8xlarge) ব্যবহার করেছি, পের (পেরকোনা) ইউম (সেন্টোস) এর মাধ্যমে ইনস্টল করেছি এবং নীচের লাইনগুলি কেবল যুক্ত / পরিবর্তন করেছি my.cnf:

max_allowed_packet=256M
wait_timeout=30000

আমি মনে করি সংখ্যাগুলি খুব বেশি, তবে আমার সেটআপের জন্য কাজ করেছে।


5

আপনার ডাটাবেসটি আমদানির দ্রুততম উপায় হ'ল মাইআস্যাম যদি (.frm, .MYD, .MYI) ফাইলগুলি অনুলিপি করে সরাসরি / var / lib / mysql / "ডাটাবেসের নাম"।

অন্যথায় আপনি চেষ্টা করতে পারেন: mysql > use database_name; \. /path/to/file.sql

আপনার ডেটা আমদানি করার অন্য উপায় ts


1

আমদানির গতিতে সহায়তা করার একটি উপায় হ'ল আমদানির সময় টেবিলটি লক করা। mysqldump এ --add-locks বিকল্পটি ব্যবহার করুন।

mysqldump --add-drop-table --add-locks --database db > db.sql

অথবা আপনি --opt দিয়ে কিছু দরকারী প্যারামিটার চালু করতে পারেন এটি ডাম্পের জন্য দরকারী জিনিসগুলির একগুচ্ছ সক্রিয় করে।

mysqldump --opt --database db > db.sql

আপনার যদি সার্ভারে অন্য কোনও স্টোরেজ ডিভাইস থাকে তবে এটি ব্যবহার করুন - একটি ডিভাইস থেকে অন্য ডিভাইসে অনুলিপি করা স্থানান্তর দ্রুত করার একটি উপায়।

আপনি --ignore-টেবিলের সাথে প্রয়োজনীয় টেবিলগুলি ফিল্টারও করতে পারেন

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