উত্তর:
মাইএসকিউএল-এর কোনও "অনুরোধ করা" শাটডাউন সিকোয়েন্স (সংক্ষেপে kill -9
) কিছুটা দৃষ্টিনন্দন , যেহেতু লেনদেন চলছে (লেনদেনের টেবিলগুলিতে) আবার ঘুরিয়ে দেওয়া হয়েছে, তবে এখানে পুনরায় আরম্ভ করার যতটা সম্ভব উপায় রয়েছে তার কয়েকটি উপায়।
দ্রষ্টব্য: আপনি যদি কোনও আপগ্রেডের জন্য সার্ভারটি বন্ধ করে দিচ্ছেন, তবে এই প্রক্রিয়াটি ব্যবহার করবেন না; পরিবর্তে, এই উত্তরে বিস্তারিত প্রক্রিয়া অনুসরণ করুন ।
অন্যথায়, আপনি যদি অন্যথায় স্বাস্থ্যকর সার্ভারটি পুনরায় চালু করে থাকেন যাতে আপনি কেবল পঠনযোগ্য বৈশ্বিক পরিবর্তনশীল বা এর অনুরূপ কিছু পরিবর্তন করতে পারেন, এখানে একটি করুণ পথ রয়েছে:
প্রথমত, innodb_fast_shutdown
এটি ইতিমধ্যে না থাকলে সক্ষম করুন । এটি সরাসরি শাটডাউনয়ের করুণার সাথে সম্পর্কিত নয়, তবে এটি আপনার সার্ভারটি দ্রুত ফিরিয়ে আনা উচিত।
mysql> SHOW VARIABLES LIKE 'innodb_fast_shutdown';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| innodb_fast_shutdown | 0 |
+----------------------+-------+
1 row in set (0.00 sec)
mysql> SET GLOBAL innodb_fast_shutdown = 1;
Query OK, 0 rows affected (0.01 sec)
এরপরে, বর্তমানে চলমান কোনও কোয়েরিগুলি উল্লেখ না করা মাত্র সার্ভারকে সমস্ত উন্মুক্ত টেবিলগুলি বন্ধ করার নির্দেশ দিন। এই পদক্ষেপের মনোমুগ্ধকর শাটডাউনটির সাথে কোনও সম্পর্ক নেই, তবে এটি পরবর্তী পদক্ষেপটি আরও দ্রুত এগিয়ে নিয়ে যাবে:
mysql> FLUSH LOCAL TABLES;
Query OK, 0 rows affected (41.12 sec)
FLUSH TABLES
বিবৃতি (ঐচ্ছিক সঙ্গে LOCAL
কীওয়ার্ডটি যা কোন দাস একজন অপ্রয়োজনীয় কিন্তু অন্যথায় নিরীহ ফ্লাশ এড়াতে) ব্লক হবে এবং আপনার বলবে ফিরে না হওয়া পর্যন্ত টেবিল সব বন্ধ করা যেতে পারে। একবার প্রতিটি টেবিল "ফ্লাশ" হয়ে গেলে (বন্ধ) হয়ে যায়, যদি কোনও প্রশ্নের পরে টেবিলটি উল্লেখ করা হয় তবে তা স্বয়ংক্রিয়ভাবে পুনরায় খোলা হবে, তবে এটি ঠিক আছে। আমরা এই পদক্ষেপের সাথে যা অর্জন করছি তা চূড়ান্ত পদক্ষেপের জন্য কম কাজ করছে:
mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (13.74 sec)
mysql>
এই বিবৃতিটি সমস্ত টেবিলগুলিকে ফ্লাশ করে (অতএব পূর্বের পদক্ষেপের সাথে কিছুটা বিঘ্নিতভাবে কমিয়ে আনা সুবিধা) এবং তাদের উপর একটি বৈশ্বিক (সার্ভার-ওয়াইড) পঠনযোগ্য লক অর্জন করে।
প্রতিটি চলমান "রাইটিং" ক্যোয়ারী (অর্থাত্ বেশ কিছু না কিছু SELECT
) সম্পন্ন না হওয়া পর্যন্ত আপনার গ্লোবাল রিড লক থাকতে পারে না । লক অনুরোধ জারি করা বিদ্যমান জিজ্ঞাসাগুলি শেষ করার অনুমতি দেবে কিন্তু নতুনদের শুরু করার অনুমতি দেবে না।
আপনি এই গ্লোবাল লকটি ধরে না রাখলে আপনার প্রম্পট ফিরে আসবে না , সুতরাং আপনি যখন লকটির অনুরোধ করবেন তখন প্রতিটি ক্যোয়ারী চলছে যা আপনি শেষ করতে সক্ষম হবেন এবং আপনি জানেন যে সেগুলি শেষ হয়ে গেছে, কারণ আপনি প্রম্পটটি ফিরে পেয়েছেন। পরবর্তী যেকোন প্রশ্নের যে কোনও টেবিলে কিছু লেখার চেষ্টা করা কেবল স্টল হয়ে যাবে, কোনও ডেটা পরিবর্তন না করে, লকটির জন্য অনির্দিষ্টকালের জন্য অপেক্ষা করা অবধি ...
UNLOCK TABLES;
)এটি বন্ধ করার প্রলোভন প্রতিরোধ করুন।
mysql>
এই নিষ্ক্রিয় কনসোল প্রম্পটটি হ'ল আপনার জন্য বিশ্বব্যাপী লকটি কী। এটি হারিয়ে ফেলুন, লকটি হারাবেন।
অন্য কনসোল উইন্ডো থেকে, মাইএসকিউএল পুনরায় চালু করুন আপনি সাধারণত ইনসাইটসক্রিপ্টগুলি (যেমন, আপনার স্থানীয় রূপটি service mysql.server restart
) দিয়ে বা mysqladmin shutdown
ম্যানুয়াল পুনঃসূচনা অনুসরণ করে rest
সংক্ষেপে, মাইএসকিউএল বন্ধ করার আগে বিবেচনা করা উচিত এমন কয়েকটি সেরা অনুশীলন হ'ল:
mysql> STOP SLAVE;
।mysql> SET GLOBAL innodb_max_dirty_pages_pct = 0;
।mysql> SHOW PROCESSLIST;
, তাদের হত্যা করুন mysql> kill thread_id;
বা শেষ না হওয়া পর্যন্ত অপেক্ষা করুন ।mysql> SET GLOBAL innodb_buffer_pool_dump_at_shutdown = ON;
স্টার্টআপে পুনরায় লোড করুন
# vi /etc/my.cnf
innodb_buffer_pool_load_at_startup = ON
।তারপরে পূর্ববর্তী পয়েন্টগুলি নিশ্চিত করার পরে, আপনি নিরাপদে মাইএসকিউএল পুনরায় চালু করতে পারেন shell$ service mysql restart
আরও তথ্যের জন্য, আমার পোস্টটি দেখুন মাইএসকিউএল বন্ধ করার আগে এগুলি চেক করুন!
innodb_fast_shutdown = 1
মাইএসকিউএল দ্রুত শুরু হয় তা নিশ্চিত করে ? দস্তাবেজগুলির দিকে তাকিয়ে দেখে মনে হচ্ছে এটি শাটডাউন গতির উন্নতি করে (শুরুর গতির দামে?)