آموزش کامل کانفیگ MySQL در سرور لینوکسی

آموزش کامل کانفیگ MySQL در سرور لینوکسی

مدیریت و بهینه‌سازی تنظیمات MySQL در سرور، یکی از حیاتی‌ترین بخش‌های نگهداری و افزایش کارایی اپلیکیشن‌های مبتنی بر دیتابیس است. با کانفیگ مناسب، می‌توانید سرعت پاسخگویی، امنیت و پایداری دیتابیس خود را به ‌طور چشم‌گیری افزایش دهید. در این مقاله، به صورت جامع و عملی با مهم‌ترین تنظیمات و اصول کانفیگ MySQL آشنا خواهید شد.

۱. نصب و راه‌اندازی اولیه MySQL

نصب MySQL

در بیشتر توزیع‌های لینوکسی، می‌توانید با دستورات زیر MySQL را نصب کنید:

sudo apt update
sudo apt install mysql-server

یا روی CentOS/RHEL:

sudo yum install mysql-server

پس از نصب، سرویس را راه‌اندازی و فعال کنید:

sudo systemctl start mysqld
sudo systemctl enable mysqld

راه‌اندازی اولیه و تغییر رمز root

برای افزایش امنیت اولیه، اجرا کنید:

sudo mysql_secure_installation

این اسکریپت شما را برای تنظیم پسورد، حذف کاربران بی‌نام و… راهنمایی می‌کند.

۲. آشنایی با فایل کانفیگ MySQL

مسیر فایل کانفیگ معمولاً /etc/mysql/my.cnf یا /etc/my.cnf می‌باشد. این فایل شامل تنظیمات حیاتی مانند Bufferها، Cacheها، تنظیمات لاگ و … است.

ساختار فایل my.cnf

[mysqld]
user            = mysql
port            = 3306
datadir         = /var/lib/mysql
socket          = /var/lib/mysql/mysql.sock

در هر بخش [section] می‌توانید پارامترهای مربوط به همان سرویس (mysqld یا client و…) را پیکربندی کنید.

۳. بهینه‌سازی عملکرد (Performance Tuning)

الف) Memory و Bufferها

  • innodb_buffer_pool_size: برای دیتابیس‌های InnoDB، بهتر است در سرورهای مستقل تا ۷۰٪ کل RAM به این گزینه اختصاص یابد:
    innodb_buffer_pool_size = 4G
  • query_cache_size (برای نسخه‌های قدیمی‌تر) – در MySQL 8 به بعد حذف شده است:
    query_cache_type = 1
    query_cache_size = 128M
  • tmp_table_size و max_heap_table_size: برای جداول موقت:
    tmp_table_size = 256M
    max_heap_table_size = 256M

ب) Thread و Connection ها

  • max_connections: حداکثر تعداد اتصال همزمان به دیتابیس. مقدار زیاد ممکن است باعث فشار زیاد به سرور شود.
    max_connections = 200
  • thread_cache_size: افزایش این عدد باعث کاهش زمان ایجاد Threadهای جدید می‌شود.
    thread_cache_size = 32

ج) لاگینگ (Logs)

برای بررسی عملکرد و رفع خطاها:

slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2

این تنظیمات کوئری‌های کندتر از ۲ ثانیه را ثبت می‌کند.

۴. امنیت در سرور MySQL

الف) دسترسی کاربران

  • هرگز از user root برای اپلیکیشن‌ها استفاده نکنید.
  • دسترسی کاربران را بر اساس Principle of Least Privilege محدود کنید:
GRANT SELECT,INSERT,UPDATE,DELETE ON dbname.* TO 'user'@'localhost' IDENTIFIED BY 'strong_password';

ب) بستن دسترسی ریموت در صورت عدم نیاز

در فایل my.cnf:

bind-address = 127.0.0.1

این مورد باعث می‌شود MySQL فقط به درخواست‌های لوکال پاسخ دهد.

ج) استفاده از SSL/TLS

در متصل شدن اپلیکیشن‌ها از راه دور، حتماً SSL را فعال کنید تا دیتا رمزنگاری شود.

۵. بکاپ و بازیابی (Backup and Restore)

بکاپ‌گیری منظم، لازمه هر سرور حرفه‌ای است.

  • mysqldump (بکاپ دستی Database):
    mysqldump -u root -p dbname > backup.sql
  • برنامه‌ریزی بکاپ خودکار با cron:

    مثلاً هر شب ساعت ۲:

    0 2 * * * mysqldump -u root -p'yourpassword' dbname > /backup/backup-$(date +%F).sql
  • بازیابی بکاپ:
    mysql -u root -p dbname < backup.sql

۶. مانیتورینگ و تست سلامت MySQL

ابزارهای مهم:

  • mysqltuner: برای ارائه پیشنهاد بهینه‌سازی:
    wget http://mysqltuner.pl/ -O mysqltuner.pl
    perl mysqltuner.pl
  • Percona Toolkit: مجموعه‌ای از ابزارهای حرفه‌ای برای تحلیل عملکرد و امنیت.
  • مانیتورینگ با ابزارهایی مثل Zabbix، Prometheus، یا Grafana:
    جهت مشاهده پارامترهای حیاتی مانند Connectionها، میزان RAM مصرفی، میزان I/O و …

۷. جداسازی دیتابیس و اپلیکیشن

در پروژه‌های متوسط و بزرگ توصیه می‌شود MySQL روی یک سرور اختصاصی و مجزا از اپلیکیشن نصب شود. این موضوع در بهبود امنیت، پایداری و مقیاس‌پذیری کمک می‌کند. همچنین توصیه می‌شود دیسک دیتابیس از نوع SSD باشد تا سرعت خواندن‌/نوشتن افزایش یابد.

۸. تنظیمات پیشرفته و کاربردی دیگر

  • innodb_log_file_size تاثیر در سرعت نوشتن و ریکاوری:
    innodb_log_file_size = 512M
  • skip-name-resolve جهت بالا بردن سرعت Connection اولیه:
    skip-name-resolve
  • sql_mode تنظیم حالت عملکرد SQL مثلاً برای فعال کردن Strict Mode:
    sql_mode = STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION

۹. آپدیت منظم MySQL و Patchهای امنیتی

همیشه نسخه MySQL خود را آپدیت نگه‌دارید تا از Patchها و ویژگی‌های امنیتی جدید بهره‌مند شوید:

sudo apt update && sudo apt upgrade
sudo systemctl restart mysql

نتیجه‌گیری

کانفیگ اصولی MySQL، نه تنها موجب افزایش سرعت و پایداری سرور می‌شود، بلکه ضامن افزایش امنیت و کاهش ریسک‌های بالقوه است. بهتر است قبل از انجام تغییرات عمده، از دیتابیس بکاپ بگیرید و پس از آن عملکرد را با ابزارهای ذکرشده بررسی کنید تا بهترین نتیجه حاصل شود. این تنظیمات را متناسب با نیازهای پروژه و سخت‌افزار سرور خود شخصی‌سازی کنید.

منابع پیشنهادی برای یادگیری بیشتر:

avatar

دانلود متن مقاله

نظرات کاربران

دیدگاهی بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *