#mariadb
#mariadb
Вопрос:
Только что обновил mysql 5.6 до mariadb 10.3.13 — теперь, когда сервер нажимает open_tables = 2000, мои php-запросы перестают работать — если я выполняю сброс таблиц, он снова начинает работать корректно. Этого никогда не случалось, когда я использовал mysql — теперь я не могу прожить и дня без входа в систему и выполнения очистки таблиц, чтобы все снова заработало
Я использую WHM / Cpanel для администрирования моего VPS, и в последнем выпуске WHM он начал предупреждать меня, что версия MySQL (на самом деле не помню, какая это была версия — она была загружена, когда я получил свой VPS), которую я запускал, скоро подходит к концу, и мне нужно будет обновиться до SQL 5.7 или MariaDB xxx. В любом случае, я уже некоторое время хотел перейти на MariaDB, что я и сделал — WHM рекомендовала версию 10.3.13.
После еще нескольких просмотров выясняется, что то, что заставляет мои open_tables достигать максимума в 2000, — это автоматические процедуры резервного копирования CPANEL, которые также создают резервные копии всех моих баз данных за один раз. Ничего не приводит к сбою, просто вызывает проблемы с подключениями моего приложения PHP — я не думаю, что соединения отклоняются — они просто не возвращают никаких данных…. Отключил все автоматические резервные копии WHM / CPANEL, и все немного успокоилось.
table_definition_cache 400 table_open_cache 2000
Я все еще делаю mysqldump через cron для создания резервных копий моей базы данных — только две действующие базы данных, и они по-прежнему увеличивают tables_open до 2000 max — просто не так быстро.
Теперь я запускаю скрипт, который запускается каждый час, чтобы показать мне некоторые переменные, и вот что я вижу
после выполнения команды flush tables оба open_tables и open_table_definitions начинают увеличиваться, пока open_table_definitions не достигнет 400, он перестает увеличиваться, в то время как open_tables продолжает увеличиваться в течение дня.
затем, когда рано утром происходят mysqldumps, tables_open достигает 2000 (максимальное значение), и мои php-запросы не выполняются
Я не получаю ошибку PHP.
Я выполнил следующую команду, чтобы я мог видеть, что происходит на стороне базы данных.
УСТАНОВИТЕ ГЛОБАЛЬНЫЙ general_log = ‘ВКЛЮЧЕНО’
Просматривая журнал, когда все работает нормально, я вижу, что мое приложение подключается, готовит инструкцию, выполняет инструкцию и затем отключается….
Я сделал то же самое, когда он начал барахлить (т. Е. мое php-приложение снова не начало получать результат)
Просматривая журнал, я вижу, что мое приложение подключается, затем готовит инструкцию, а затем вместо того, чтобы видеть, как оно выполняет инструкцию, оно подготавливает ту же инструкцию еще 2 раза, а затем отключается…
Я вошел в mysql и выполнил команду flush tables, и все возвращается в нормальное русло — приложение подключается, подготавливает инструкцию, выполняет ее, отключается…
Но этого никогда не случалось до того, как я перешел на MariaDB — я вообще никогда не вмешивался в работу сервера MySQL — единственный раз, когда MySQL был перезапущен, это когда я обновлял систему CENTOS 6 и должен был перезагрузить сервер — мог месяцами ничего не делать на сервере….
Комментарии:
1. Странно.
table_open_cache
это кэш. MySQL / MariaDB не «перестает работать», если превышен лимит. Пожалуйста, предоставьте больше информации. Что вы делали, когда он «перестал работать»? Какие движки вы используете?
Ответ №1:
Похоже, виновата система — я изменил open_table_cache на 400, и у моего php-приложения больше не возникает проблем с подготовкой инструкций, даже после еженощных резервных копий баз данных. Просматривая более старую документацию mysql, в mysql 5.6.7 значение table_open_cache было равно 400, поэтому, когда я обновился до mariadb 10.3.13, это значение по умолчанию было изменено на 2000, и тогда у меня начались проблемы.
Не совсем уверен, о чем мне говорит следующее, но может представлять интерес….
su — mysql
-bash-4.1$ ограничение -Hn 100 -bash-4.1$ ограничение -Sn 100 -bash-4.1$ выход из системы [~]# ограничение -Hn 4096 [~]# ограничение -Sn 4096