امروز : ۳۰ اردیبهشت ۱۴۰۴ (2025/05/20)

آموزش تغییر 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 شوید.

 

databases in cpanel

 

در این صفحه ، قسمت چپ این پنل می توانید لیست تمامی دیتابیس های MySQL که در هاست خود ایجاد کرده اید را مشاهده بفرمایید.

 

phphMyAdmin panel

 

از بین این موارد ، دیتابیس مد نظر خود که می خواهیم اقدام به تغییر engine جداول آن کنیم را انتخاب کرده و بر روی آن کلیک می کنیم. در این صورت اطلاعات table ها را برای ما نمایش می دهد. نمونه ای از این  مورد را در تصویر زیر می توانید مشاهده بفرمایید :

database tables

 

تا این مرحله دیتابیس مد نظر خود را انتخاب کردیم. از این به بعد می خواهیم برای تغییر engine اقدام کنیم. روش های متفاوتی برای این مورد وجود دارد که به آنها در ادامه می پردازیم.

 

تغییر Engine در phpMyAdmin

برای تغییر دادن Engine در این بخش ، می توانیم به روش های متعددی اقدام کنیم. تا حد ممکن در این آموزش از روش های ساده تر برای این تغییر استفاده شده است که در ادامه آنها را با یکدیگر بررسی خواهیم کرد :

 

1) تغییر دستی Engine هر کدام از table ها :

ساده ترین روش برای تغییر Engine در هر دیتابیس و برای هر کدام از table ها ، اعمال این مورد به صورت دستی و manual می باشد. در این روش ،ابتدا باید روی table مد نظر خود کلیک کنیم.

 

database table

 

با کلیک کردن بر روی این table ، در صفحه جدیدی که باز می شود ، اطلاعات table نمایش داده می شود. همچنین بالای این صفحه و در نواری که مشاهده می کنید ، دسترسی برای انجام عملیات و موارد مختلفی دارید. بنا به نیاز خود می توانید از هر کدام از این بخش استفاده بفرمایید. بر روی گزینه Operations کلیک می کنیم.

 

operations tab

 

در این tab ، کمی اکرول داون می کنیم. بخش تخت عنوان Table Options مشاهده می کنیم. در این بخش یک گزینه تحت عنوان Storage Engine وجود دارد. در مقابل این بخش ، engine این جدول نوشته شده است. بر روی آن کلیک می کنیم.

 

Operation tab for table

 

پس از کلیک بر روی MyISAM ، لیستی از موارد مختلف مشاهده می فرمایید. در بین این گزینه ها ، InnoDB را هم مشاهده می کنید. بر روی InnoDB کلیک کرده و سپس در سمت راست همین بخش ، گزینه Go را میزنیم تا این تغییر اعمال شود.

 

change engine

 

پس از این مورد ، پیام ( .Your SQL query has been executed successfully  ) را مشاهده می کنید که به منزله تغییر موفق engine این جدول می باشد.

این روش تغییر به صورت دستی و تک به تک برای دیتابیس هایی که table های زیادی دارند ، زمان بر و وقت گیر می باشد. به همین علت در ادامه به روش های دیگری می پردازیم که این میزان زمان بر نمی باشد و با اجرای کوئری می توانیم این تغییرات را صورت دهیم.

 

2) تغییر engine ها به صورت همزمان با استفاده از کد های دستوری :

در این روش دیگر نیازی نیست که تک به تک بخواهیم جدول ها را انتخاب کنیم و برای هر کدام یک بار نسبت به تغییر ، اقدام کنیم. پس از انتخاب دیتابیس مد نظر ، در صفحه ای که قرار داریم از نوار بالای صفحه گزینه SQL را انتخاب می کنیم.

 

SQL tab

 

در این بخش ما می توانیم کوئری های مختلفی را بر روی دیتابیس خود اعمال کرده و اجرا کنیم. باید مواردی که مد نظر ماست را در قسمتی که pointer به صورت چشمک زن قرار دارد وارد کنیم و سپس برای اعمال این موارد ، در پایین این بخش گزینه Go را بزنیم.

 

writing Query in SQl tab

 

برای اینکه بتوانیم تغییرات مد نظر خود را اعمال کنیم ، قطعه کد زیر را در این بخش قرار دهید و سپس بر روی گزینه 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 changed

 

در صورتی که این روش برای شما پاسخگو نبود ، می توانید از روشی که در ادامه خدمت شما معرفی می کنیم استفاده بفرمایید. در این روش اگر جدول خاصی با این تغییر engine منجر به ارور شود ، می توانید به صورت دقیق و با جزئیات کامل ، مشاهده بفرمایید.

 

 

3) تغییر موردی engine جدول ها با استفاده از خروجی کد ها:

به مانند روش قبل ، بر روی دیتابیس مد نظر خود کلیک کنید. سپس از نوار بالای صفحه جدید ، گزینه SQl را انتخاب می کنیم. به جای کد قبلی ، رشته کد زیر را در باکس مربوطه وارد کرده و بر روی گزینه Go کلیک بفرمایید.

 

new sql

 

قطعه کدی که باید در این بخش وارد کنیم را در پایین این بخش مشاهده می فرمایید. در نظر داشته باشید که در این کد باید به جای مقدار (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 را بزنید. خروجی ای مانند تصویر زیر مشاهده میفرمایید.

query output

 

تمامی خطوطی که با ALTER TABLE شروع می شود را کپی می کنیم . سپس مجدد تب SQL را باز می کنیم و این موارد را paste می کنیم. پس از آن بر روی Go کلیک می کنیم.

 

query finish

 

پس از این مورد ، کمی صبر بفرمایید تا پیغامی مشابه تصویر زیر نمایش دهد.

 

 

در این صورت تغییر engine های جداول به موفقیت صورت گرفته است و کار ما به اتمام رسیده است.

نکته : این مورد عموما برای تمامی جدول ها اعمال می شود ، اما در مواردی ممکن است که برای یک یا چند مورد از Table ها با ارور همراه باشد که این مورد وابسته به کانفیگ این دیتابیس و اطلاعات موجود در این جدول است.

در موارد بالا ، روش ها و شیوه های مختلف تغییر engine را باهم بررسی کردیم. امیدواریم که این آموزش برای شما کارآمد و مفید واقع شده باشد. بسته به نیاز خود می توانید یکی از این موارد را انخاب کرده و از آن استفاده بفرمایید. در صورتی که در موارد بالا با هر گونه اروری مواجه شدید و قادر به رفع آن نبودید ، می توانید با همکاران ما از طریق ارسال تیکت پشتیبانی در ارتباط باشید.

همچنین در رابطه با پایگاه های داده ، پست های دیگری وجود دارد که می تواند برای شما مفید باشد:

Rate this post