#
# The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
# 
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

#
# * IMPORTANT: Additional settings that can override those from this file!
#   The files must end with '.cnf', otherwise they'll be ignored.
#

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
!include /etc/mysql/my.cnf.fastpanel/99-fastpanel.cnf


[mysqld]
sql-mode                       = NO_ENGINE_SUBSTITUTION

# Из /etc/mysql/my.cnf.fastpanel/99-fastpanel.cnf ======================

# Уровень изоляции транзакций. Лучший баланс параллельности/консистентности
transaction_isolation = READ-COMMITTED   

# Отключает MySQL Document Store
# Экономит ~100-200МБ RAM
# Освобождает порт 33060
# Уменьшает attack surface
# Снижает overhead
# Может понадобиться, если:
# Храните полуструктурированные данные в JSON
# Используете NoSQL подходы
# Нужен REST API к базе данных
# !!!Не сможете использовать Document Store API
mysqlx = OFF                             

#Error Log
log_error  = /var/log/mysql/error.log

# Базовые настройки ======================================================

# Отключаем определение доменного имени для IP-адресов
skip-name-resolve

# Отключаем использованием symbolic-links. Это поышает безопасность. 
symbolic-links=0

max_connections = 2000
back_log = 1000

# Таймауты
interactive_timeout = 300
wait_timeout = 300
connect_timeout = 10

# Буферы
sort_buffer_size = 4M
read_buffer_size = 2M
read_rnd_buffer_size = 4M
join_buffer_size = 4M
max_allowed_packet = 64M

# Кэши таблиц
table_open_cache = 20000
table_definition_cache = 10000
thread_cache_size = 200

# InnoDB ОСНОВНЫЕ НАСТРОЙКИ ДЛЯ SSD
#innodb_buffer_pool_size = 24G              # 75% от RAM для данных+индексов
#innodb_buffer_pool_instances = 8           # 1 instance на 3-4GB RAM
#innodb_log_file_size = 4G                  # Большие логи для SSD
#innodb_log_buffer_size = 256M

# Убавляем базе аппетитов чтобы сервер не лег
innodb_buffer_pool_size = 12G              # Было 24G -> делаем 12G (хватит даже для базы в несколько миллионов записей)
innodb_buffer_pool_instances = 12          # Делим на 12 частей (1 инстанс = 1 ГБ) для быстрой параллельной работы
innodb_log_file_size = 4G                  # Большие логи для SSD
innodb_log_buffer_size = 256M

# InnoDB ДЛЯ SSD (критически важно!)
innodb_flush_method = O_DIRECT             # Прямой доступ к диску
innodb_io_capacity = 4000                  # Высокий IOPS для SSD
innodb_io_capacity_max = 8000
innodb_flush_log_at_trx_commit = 2         # Баланс скорость/надежность

# InnoDB Оптимизация производительности
innodb_read_io_threads = 16                # Много ядер - много потоков
innodb_write_io_threads = 16
innodb_purge_threads = 4
innodb_page_cleaners = 8
innodb_adaptive_hash_index = ON
innodb_adaptive_flushing = ON
innodb_change_buffering = all

# InnoDB ДЛЯ ВЫСОКОЙ НАГРУЗКИ
innodb_thread_concurrency = 0              # Автоматическое определение
innodb_concurrency_tickets = 5000
innodb_commit_concurrency = 0

# Надежность и мониторинг
innodb_doublewrite = ON
innodb_checksum_algorithm = crc32
performance_schema = ON
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
log_queries_not_using_indexes = 1

# Оптимизация под информационный портал
innodb_old_blocks_time = 1000
innodb_stats_on_metadata = OFF
innodb_random_read_ahead = OFF

binlog_cache_size = 2M

