Я немного озадачен тем, какие настройки нужно изменить в моем файле my.conf, чтобы оптимизировать его для моего сервера (сервер mysql продолжает падать из-за нашего большого трафика).
Вот файл my.cnf:
[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
key_buffer = 16M
max_allowed_packet = 16M
myisam-recover = BACKUP
#max_connections = 100
#table_cache = 64
#thread_concurrency = 10
query_cache_limit = 1M
query_cache_size = 16M
И спецификации сервера:
CPU Cores 2 cores
RAM (Memory) 1GB
SSD (Disk Space) 20GB
Запуск Ubuntu 12.04 LTS
Вот мой разделы:
NAME FSTYPE SIZE MOUNTPOINT LABEL
vda 20G
├─vda1 ext4 476M /boot
├─vda2 swap 477M [SWAP]
└─vda3 ext4 19.1G /
Любая помощь будет высоко ценится.
Глядя на журналы ошибок, я вижу, что mysqld не хватает памяти:
Feb 17 11:02:06 111488 kernel: [8276839.559141] Out of memory: Kill process 20719 (mysqld) score 75 or sacrifice child
Feb 17 11:02:06 111488 kernel: [8276839.559209] Killed process 20719 (mysqld) total-vm:1347424kB, anon-rss:30524kB, file-rss:0kB
Общий ответ из серверной вики :
MySQL Tuner - это полезный инструмент, который подключается к работающему экземпляру MySQL и предлагает рекомендации по его оптимальной настройке для вашей рабочей нагрузки. Чем дольше работает сервер, тем лучше может дать совет mysqltuner. В производственной среде подождите не менее 24 часов, прежде чем запускать инструмент. Вы можете установить mysqltuner из репозиториев Ubuntu:
sudo apt-get install mysqltuner
Затем, после его установки, запустите его:
mysqltuner
и дождитесь его окончательного отчета. В верхнем разделе представлена общая информация о сервере базы данных, а в нижнем разделе приведены рекомендации по настройке для изменения в вашем my.cnf. Большинство из них могут быть изменены в режиме реального времени на сервере без перезапуска. Просмотрите официальную документацию MySQL (ссылка в разделе «Ресурсы»), чтобы найти соответствующие переменные, которые необходимо изменить в рабочей среде. Следующее является частью примера отчета из производственной базы данных, который показывает, что увеличение объема кэша запросов может принести некоторую пользу:
-------- Recommendations ----------------------------------------------------- General recommendations: Run OPTIMIZE TABLE to defragment tables for better performance Increase table_cache gradually to avoid file descriptor limits Variables to adjust: key_buffer_size (> 1.4G) query_cache_size (> 32M) table_cache (> 64) innodb_buffer_pool_size (>= 22G)
Последний комментарий по настройке баз данных: мы можем широко сказать, что определенные настройки являются лучшими, производительность может варьироваться от приложения к приложению. Например, то, что работает лучше всего для Wordpress, может быть не лучшим для Drupal, Joomla или проприетарных приложений. Производительность зависит от типов запросов, использования индексов, эффективности проектирования базы данных и так далее. Может оказаться полезным потратить некоторое время на поиск советов по настройке базы данных в зависимости от того, для каких приложений вы ее используете. Как только вы достигнете определенного уровня, любые внесенные вами изменения приведут лишь к незначительным улучшениям, и вам будет лучше либо улучшить приложение, либо рассмотреть вопрос о масштабировании среды базы данных с помощью более мощного оборудования или добавления подчиненных серверов.
tmp_table_size
, max_heap_table_size variable
: держите их равными и высокими. join_buffer_size
, увеличение в небольших количествах; оно будет умножено на max_connections
. innodb_buffer_pool_size
. Сделай это высоко. Другое возможное исправление - использовать следующее в разделе [mysqld] вашей конфигурации /etc/mysql/my.cnf.
performance_schema = off
Источник: https://serverfault.com/questions/564748/mysql-mariadb-crashes-frequently
Разрешение для docker compose
mysql:
volumes:
- ./config/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
Содержимое конфигурации ./config/mysql/my.cnf
[mysqld]
performance_schema = off