در این مستند به روش شناخت room for improvement ها و tune کردن mysql میپردازم. به این ترتیب ابتدا باید موارد قابل بهبود را شناسایی کنید و بعد برای هر کدام از راهکار متناظرش برای tunning استفاده کنید. شناخت مشکل گام مهمیست زیرا تنظیمات مناسب برای mysql شدیدا به میزان و نوع استفاده از resource سرور وابسته است و ممکن است مورد به مورد تنظیم مناسب آن فرق کند.
شناخت مشکل از طریق mysqltuner
۱. ابتدا فایل tunner را دانلود کنید:
wget 'https://raw.github.com/major/MySQLTuner-perl/master/mysqltuner.pl' --quiet --no-check-certificate --output-document='/usr/local/bin/mysqltuner'
۲. پرمیژن اجرا بدهید:
chmod +x /usr/local/bin/mysqltuner
۳. با این دستور میتوانید بخشی از بهبودهای قابل انجام را ببینید:
command mysqltuner
دستور بالا یوزرنیم، پسورد و آیپی mysql را ندارد. اگر اطلاعات فوق را به آن بدهید میتواند به mysql متصل شود و موارد بیشتری را نشان دهد. برای این منظور دستور زیر را بزنید:
command mysqltuner --host localhost --user root --password --forcemem 5800000
در دستور بالا باید root را با یوزرنیم کاربر ریشه و عدد جلوی forcemem را با مقدار ram موجود روی سرور جایگزین کنید. برای اطلاع از مقدار رم موجود رو سرور دستور زیر را وارد کنید:
free -m
بعد پسورد از شما خواسته میشود. وارد کنید. خروجی اجرای این دستور بخش قابل توجهی از ضعفهای امنیتی و پرفرمنس و … را به علاوهٔ راهکار پیشنهادی به شما نشان میدهد.
غیرفعال کردن InnoDB
در اینجا به یکی از مواردی که به من اخطار داد و راهحل آن میپردازم. برای من در بخش storage engine نوشته:
[!!] InnoDB is enabled but isn't being used
و در آخر در بخش راهحلها پیشنهاد کرده:
Add skip-innodb to MySQL configuration to disable InnoDB
برای اطمینان از صحت موضوع به mysql لاگین کنید:
mysql -u root -p
پسورد root از شما خواسته میشود. سپس در شل mysql دستور زیر را وارد کنید:
mysql> SHOW ENGINES;
من در خط آخر جدول فوق innodb را مشاهده کردم:
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
در اینجا innodb را غیرفعال میکنیم و بعد همین مسیر را تکرار کنیم تا از غیرفعال شدن آن اطمینان حاصل کنیم. برای این منظور از ورژن mysql نصب روی سرور اطمینان حاصل کنید:
mysqld -V
فایل my.cnf را باز کنید:
nano /etc/mysql/my.cnf
جایی که بلاک [mysqld] باز شده را پیدا کنید و در داخل بلاک مربوط به آن این را اضافه کنید:
skip-innodb
default-storage-engine = myisam
ریست کنید:
service mysql restart
از اعمال درست تنظیمات اطمینان حاصل کنید.