آموزش تغییر engine دیتابیس mysql

امروزه با توجه به افزایش چشم گیر ابزار ها و فریم ورک ها در دنیای ظاحی وب سایت و برنامه نویسی ، انواعی از دیتابیس با ویژگی های منحصر به فرد خود توسعه داده شده اند. از دیتابیس های محبوب و پر استفاده می توان به MySql ، PostgreSql و MongoDB اشاره کرد. یکی از پرکاربرد ترین دیتابیس ها ، MySQL می باشد که در پروژه های گوناگونی ، به خصوص سایت های وردپرسی مورد استفاده قرار می گیرد. در دنیای پایگاهدادههای MySQL، هر جدول میتواند از یک storage engine متفاوت استفاده کند. دو Engine پرکاربرد MySQL شامل InnoDB و MyISAM هستند. گاهی ممکن است بخواهید برای بهبود عملکرد، فعالسازی ویژگیهایی خاص (مانند پشتیبانی از تراکنشها)، یا سازگاری بیشتر با ابزارهای دیگر، Engine جداول خود را تغییر دهید. برای بررسی دقیق تر و مقایسه این دو engine ، می توانید از این مقاله استفاده بفرمایید و اطلاعات بیشتری در این رابطه کسب کنید.
در این آموزش، یاد میگیرید که چگونه Engine جداول دیتابیس را از طریق phpMyAdmin (ابزار مدیریتی گرافیکی رایج در هاستهای اشتراکی) تغییر دهید.
ورود به phpMyAdmin
مدیریت و بررسی دیتابیس MySQL که توسط شما در هاست بنا به این آموزش ایجاد شده است ، عموما توسط ابزار phpMyAdmin صورت می گیرد. به همین علت در این آموزش ما تغییر engine را در این ابزار مدیریتی بررسی می کنیم. برای ورود به phpMyAdmin ، باید ابتدا وارد سی پنل شویم (آموزش ورود به سی پنل). سپس از بخش Databases می توانید گزینه phpMyAdmin را مشاهده بفرمایید. بر روی این گزینه کلیک کنید تا وارد فضای گرافیکی phpMyAdmin شوید.
در این صفحه ، قسمت چپ این پنل می توانید لیست تمامی دیتابیس های MySQL که در هاست خود ایجاد کرده اید را مشاهده بفرمایید.
از بین این موارد ، دیتابیس مد نظر خود که می خواهیم اقدام به تغییر engine جداول آن کنیم را انتخاب کرده و بر روی آن کلیک می کنیم. در این صورت اطلاعات table ها را برای ما نمایش می دهد. نمونه ای از این مورد را در تصویر زیر می توانید مشاهده بفرمایید :
تا این مرحله دیتابیس مد نظر خود را انتخاب کردیم. از این به بعد می خواهیم برای تغییر engine اقدام کنیم. روش های متفاوتی برای این مورد وجود دارد که به آنها در ادامه می پردازیم.
تغییر Engine در phpMyAdmin
برای تغییر دادن Engine در این بخش ، می توانیم به روش های متعددی اقدام کنیم. تا حد ممکن در این آموزش از روش های ساده تر برای این تغییر استفاده شده است که در ادامه آنها را با یکدیگر بررسی خواهیم کرد :
1) تغییر دستی Engine هر کدام از table ها :
ساده ترین روش برای تغییر Engine در هر دیتابیس و برای هر کدام از table ها ، اعمال این مورد به صورت دستی و manual می باشد. در این روش ،ابتدا باید روی table مد نظر خود کلیک کنیم.
با کلیک کردن بر روی این table ، در صفحه جدیدی که باز می شود ، اطلاعات table نمایش داده می شود. همچنین بالای این صفحه و در نواری که مشاهده می کنید ، دسترسی برای انجام عملیات و موارد مختلفی دارید. بنا به نیاز خود می توانید از هر کدام از این بخش استفاده بفرمایید. بر روی گزینه Operations کلیک می کنیم.
در این tab ، کمی اکرول داون می کنیم. بخش تخت عنوان Table Options مشاهده می کنیم. در این بخش یک گزینه تحت عنوان Storage Engine وجود دارد. در مقابل این بخش ، engine این جدول نوشته شده است. بر روی آن کلیک می کنیم.
پس از کلیک بر روی MyISAM ، لیستی از موارد مختلف مشاهده می فرمایید. در بین این گزینه ها ، InnoDB را هم مشاهده می کنید. بر روی InnoDB کلیک کرده و سپس در سمت راست همین بخش ، گزینه Go را میزنیم تا این تغییر اعمال شود.
پس از این مورد ، پیام ( .Your SQL query has been executed successfully ) را مشاهده می کنید که به منزله تغییر موفق engine این جدول می باشد.
این روش تغییر به صورت دستی و تک به تک برای دیتابیس هایی که table های زیادی دارند ، زمان بر و وقت گیر می باشد. به همین علت در ادامه به روش های دیگری می پردازیم که این میزان زمان بر نمی باشد و با اجرای کوئری می توانیم این تغییرات را صورت دهیم.
2) تغییر engine ها به صورت همزمان با استفاده از کد های دستوری :
در این روش دیگر نیازی نیست که تک به تک بخواهیم جدول ها را انتخاب کنیم و برای هر کدام یک بار نسبت به تغییر ، اقدام کنیم. پس از انتخاب دیتابیس مد نظر ، در صفحه ای که قرار داریم از نوار بالای صفحه گزینه SQL را انتخاب می کنیم.
در این بخش ما می توانیم کوئری های مختلفی را بر روی دیتابیس خود اعمال کرده و اجرا کنیم. باید مواردی که مد نظر ماست را در قسمتی که pointer به صورت چشمک زن قرار دارد وارد کنیم و سپس برای اعمال این موارد ، در پایین این بخش گزینه Go را بزنیم.
برای اینکه بتوانیم تغییرات مد نظر خود را اعمال کنیم ، قطعه کد زیر را در این بخش قرار دهید و سپس بر روی گزینه Go کلیک بفرمایید. در نظر داشته باشید که در این کد باید به جای مقدار (database_name) ، نام دیتابیس خود را قرار دهیم.
DELIMITER $$ CREATE PROCEDURE convert_engine() BEGIN DECLARE done INT DEFAULT FALSE; DECLARE tablename VARCHAR(255); DECLARE cur CURSOR FOR SELECT table_name FROM information_schema.tables WHERE table_schema = 'database_name' AND engine = 'MyISAM'; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; OPEN cur; read_loop: LOOP FETCH cur INTO tablename; IF done THEN LEAVE read_loop; END IF; SET @s = CONCAT('ALTER TABLE `', tablename, '` ENGINE=InnoDB'); PREPARE stmt FROM @s; EXECUTE stmt; DEALLOCATE PREPARE stmt; END LOOP; CLOSE cur; END$$ DELIMITER ; CALL convert_engine(); DROP PROCEDURE convert_engine;
نکته: پیش فرض این آموزش بدین صورت در نظر گرفته شده است که engine ها MyISAM هستند و ما می خواهیم آنرا به InnoDB تغییر دهیم. در صورتی که می خواهید به صورت عکس عمل کنید، در این کد باید محل قرار گیری MyISAM و InnoDB را با یکدیگر عوض کنید.
پس از کلیک بر روی گزینه Go ، ممکن است کمی زمان ببرد ، اما در نهایت با پیامی به صورت عکس زیر مواجه می شوید که نشان دهنده موفق بودن پروسه تغییر engine می باشد.
در صورتی که این روش برای شما پاسخگو نبود ، می توانید از روشی که در ادامه خدمت شما معرفی می کنیم استفاده بفرمایید. در این روش اگر جدول خاصی با این تغییر engine منجر به ارور شود ، می توانید به صورت دقیق و با جزئیات کامل ، مشاهده بفرمایید.
3) تغییر موردی engine جدول ها با استفاده از خروجی کد ها:
به مانند روش قبل ، بر روی دیتابیس مد نظر خود کلیک کنید. سپس از نوار بالای صفحه جدید ، گزینه SQl را انتخاب می کنیم. به جای کد قبلی ، رشته کد زیر را در باکس مربوطه وارد کرده و بر روی گزینه Go کلیک بفرمایید.
قطعه کدی که باید در این بخش وارد کنیم را در پایین این بخش مشاهده می فرمایید. در نظر داشته باشید که در این کد باید به جای مقدار (database_name) ، نام دیتابیس خود را قرار دهیم.
قطعه کد مذکور:
SELECT CONCAT('ALTER TABLE `', table_name, '` ENGINE=InnoDB;') FROM information_schema.tables WHERE table_schema = 'datbase_name' AND engine = 'MyISAM';
نکته: پیش فرض این آموزش بدین صورت در نظر گرفته شده است که engine ها MyISAM هستند و ما می خواهیم آنرا به InnoDB تغییر دهیم. در صورتی که می خواهید به صورت عکس عمل کنید، در این کد باید محل قرار گیری MyISAM و InnoDB را با یکدیگر عوض کنید.
پس از اینکه این کد را وارد کردید ، گزینه Go را بزنید. خروجی ای مانند تصویر زیر مشاهده میفرمایید.
تمامی خطوطی که با ALTER TABLE شروع می شود را کپی می کنیم . سپس مجدد تب SQL را باز می کنیم و این موارد را paste می کنیم. پس از آن بر روی Go کلیک می کنیم.
پس از این مورد ، کمی صبر بفرمایید تا پیغامی مشابه تصویر زیر نمایش دهد.
در این صورت تغییر engine های جداول به موفقیت صورت گرفته است و کار ما به اتمام رسیده است.
نکته : این مورد عموما برای تمامی جدول ها اعمال می شود ، اما در مواردی ممکن است که برای یک یا چند مورد از Table ها با ارور همراه باشد که این مورد وابسته به کانفیگ این دیتابیس و اطلاعات موجود در این جدول است.
در موارد بالا ، روش ها و شیوه های مختلف تغییر engine را باهم بررسی کردیم. امیدواریم که این آموزش برای شما کارآمد و مفید واقع شده باشد. بسته به نیاز خود می توانید یکی از این موارد را انخاب کرده و از آن استفاده بفرمایید. در صورتی که در موارد بالا با هر گونه اروری مواجه شدید و قادر به رفع آن نبودید ، می توانید با همکاران ما از طریق ارسال تیکت پشتیبانی در ارتباط باشید.
همچنین در رابطه با پایگاه های داده ، پست های دیگری وجود دارد که می تواند برای شما مفید باشد: