Skip to content

Instantly share code, notes, and snippets.

@aKamrani
Created September 10, 2024 17:30
Show Gist options
  • Select an option

  • Save aKamrani/a1d44c23a02575e23b7ff52c6efeef9f to your computer and use it in GitHub Desktop.

Select an option

Save aKamrani/a1d44c23a02575e23b7ff52c6efeef9f to your computer and use it in GitHub Desktop.
Configure MySQL database
[mysqld]
# ------------------------------------------
# GENERAL SETTINGS
# ------------------------------------------
innodb_buffer_pool_size = 8G # بهتره 60-70 درصد از RAM رو بهش بدی، واسه سیستم‌های پرترافیک خیلی خوبه
innodb_buffer_pool_instances = 8 # به ازای هر 1GB یه instance درست کن، اگه buffer pool از 1GB بیشتره، این عددو ببر بالا
innodb_log_file_size = 2G # این لاگ تراکنش‌ها رو نگه می‌داره، واسه حجم کارای سنگین 2G خوبه
innodb_log_buffer_size = 256M # بافر لاگ تراکنش‌ها، با این مقدار تراکنش‌های نوشتنی رو راحت‌تر می‌کنه
innodb_flush_log_at_trx_commit = 1 # این مقدار رو بذار 1 تا تضمین کنه همه تراکنش‌ها امن هستن، اما اگه کارایی بیشتر می‌خوای و نگران از دست رفتن داده‌ها نیستی می‌تونی بذاری 2
# ------------------------------------------
# PERFORMANCE TUNING
# ------------------------------------------
max_connections = 500 # تعداد کانکشن‌های همزمان، بسته به نیازت می‌تونی اینو بیشتر یا کمتر کنی
thread_cache_size = 100 # سایز کش نخ‌ها برای مدیریت کانکشن‌های موقتی، هر چی بالاتر بهتره توی بار سنگین
table_open_cache = 4000 # تعداد جداولی که همزمان باز نگه می‌داره، هر چی دیتابیس بزرگتر، اینو ببر بالا
tmp_table_size = 512M # سایز جداول موقتی رو زیاد کن تا کمتر به دیسک مراجعه کنه
max_heap_table_size = 512M # مشابه tmp_table_size برای جداول حافظه‌ای که به سرعت کمک می‌کنه
# ------------------------------------------
# CACHE SETTINGS
# ------------------------------------------
query_cache_type = 0 # کش کوئری رو غیرفعال کن چون توی بار سنگین معمولاً ضرر داره
query_cache_size = 0 # سایز کش کوئری صفره تا اصلاً کش نکنه
# ------------------------------------------
# INNODB SETTINGS
# ------------------------------------------
innodb_flush_method = O_DIRECT # واسه جلوگیری از کش شدن دوباره داده‌ها توی سیستم‌عامل، مخصوصاً واسه SSDها خیلی خوبه
innodb_file_per_table = 1 # هر جدول توی یه فایل جداگانه ذخیره می‌شه که مدیریت دیسک رو راحت‌تر می‌کنه
innodb_read_io_threads = 16 # نخ‌های ورودی/خروجی برای خوندن رو بسته به دیسکت زیاد کن
innodb_write_io_threads = 16 # نخ‌های ورودی/خروجی برای نوشتن
innodb_thread_concurrency = 0 # بذار InnoDB خودش همزمانی نخ‌ها رو مدیریت کنه
innodb_io_capacity = 2000 # ظرفیت IOPS دیسک، بسته به دیسک و سخت‌افزارت این عددو تنظیم کن
innodb_io_capacity_max = 4000 # مقدار ماکسیمم IOPS برای سرعت بیشتر
# ------------------------------------------
# LOGGING & MONITORING
# ------------------------------------------
slow_query_log = 1 # لاگ کوئری‌های کند رو فعال کن که بتونی شناسایی و بهینه‌سازی کنی
slow_query_log_file = /var/log/mysql/slow.log # محل ذخیره لاگ کوئری‌های کند
long_query_time = 1 # کوئری‌هایی که بیش از 1 ثانیه طول می‌کشن لاگ می‌شن
log_queries_not_using_indexes = 1 # کوئری‌هایی که از ایندکس استفاده نمی‌کنن رو لاگ کن تا ببینی کجاها نیاز به بهینه‌سازی داری
log_error = /var/log/mysql/error.log # محل ذخیره خطاهای MySQL
log_warnings = 2 # سطح هشدارها رو زیاد کن تا راحت‌تر مشکلات رو پیدا کنی
general_log = 0 # لاگ عمومی رو خاموش کن که منابع سیستمت رو زیاد مصرف نکنه
general_log_file = /var/log/mysql/general.log # محل ذخیره لاگ عمومی در صورت فعال بودن
# ------------------------------------------
# TIMEOUT SETTINGS
# ------------------------------------------
wait_timeout = 600 # زمان انتظار برای کانکشن‌های غیرفعال، بعد این زمان قطع می‌شه
interactive_timeout = 600 # مشابه wait_timeout برای کانکشن‌های تعاملی
net_read_timeout = 30 # زمان انتظار برای خوندن داده‌ها از کانکشن
net_write_timeout = 30 # زمان انتظار برای نوشتن داده‌ها به کانکشن
lock_wait_timeout = 300 # زمان انتظار واسه قفل شدن قبل از اینکه قطع بشه
# ------------------------------------------
# CHARACTER SET
# ------------------------------------------
character-set-server = utf8mb4 # UTF-8 رو برای پشتیبانی از کاراکترهای خاص (مثل اموجی‌ها) فعال کن
collation-server = utf8mb4_unicode_ci # این collation رو بذار که مقایسه درست انجام شه
# ------------------------------------------
# CONNECTION SETTINGS
# ------------------------------------------
max_connect_errors = 100000 # تعداد خطاهای مجاز قبل از بلاک شدن کانکشن، مقدار بالاتر کمک می‌کنه که کانکشن‌ها بی‌دلیل بلاک نشن
# ------------------------------------------
# BUFFER SETTINGS
# ------------------------------------------
key_buffer_size = 256M # برای جداول MyISAM، اگه از InnoDB استفاده می‌کنی، نیاز نیست بالا باشه
sort_buffer_size = 4M # بافر مرتب‌سازی برای کوئری‌های ORDER BY
read_buffer_size = 4M # بافر خوندن برای اسکن جداول
read_rnd_buffer_size = 8M # بافر خوندن تصادفی برای اسکن‌های رندوم
join_buffer_size = 8M # بافر برای انجام JOIN های پیچیده
# ------------------------------------------
# OTHER SETTINGS
# ------------------------------------------
table_definition_cache = 2000 # تعداد تعریف جدول‌هایی که MySQL تو کش نگه می‌داره
open_files_limit = 65535 # تعداد فایل‌های باز که سیستم‌عامل می‌تونه مدیریت کنه
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment