Вопрос или проблема
Я вижу множество этих предупреждений в журнале mysql_error, целую тонну, от различных сайтов на сервере и различных баз данных, в основном WordPress, и они выглядят так:
WARNING 1366: Неправильное целочисленное значение: '' для столбца...
WARNING 1292: Укороченное неправильное целочисленное значение: ''...
WARNING 1364: Поле 'attackLogTime' не имеет значения по умолчанию :...
WARNING 1292: Укороченное неправильное десятичное значение: '' ...
И они ссылаются на хорошо известные плагины WordPress, такие как Wordfence и подобные, которые, я бы предположил, имеют свой код в полном порядке и корректны, чтобы избежать очевидных mysql ошибок. Но поскольку это просто предупреждения, как я могу отключить их или игнорировать эти проблемы “неправильного целого / десятичного значения / отсутствия значения по умолчанию”, чтобы у меня был пригодный для использования журнал mysql_error и чтобы я мог находить более важные проблемы, которые требуют моего внимания?
Я на MariaDB 11.4, и вот моя конфигурация my.cnf:
[mysqld]
default_storage_engine = InnoDB
datadir = /var/lib/mysql
tmpdir = /var/lib/mysql/tmp
log-error = /var/lib/mysql/mysql_errors.log
slow_query_log_file = /var/lib/mysql/mysql_slow_queries.log
sql-mode = "NO_ENGINE_SUBSTITUTION"
pid-file = /var/lib/mysql/mysql.pid
socket = /var/lib/mysql/mysql.sock
symbolic-links = 0
max_allowed_packet = 256M
max_connections = 500
max_connect_errors = 20
open_files_limit = 50000
wait_timeout = 90
connect_timeout = 90
interactive_timeout = 90
tmp_table_size = 128M
max_heap_table_size = 128M
max_statement_time = 180
innodb_strict_mode = 0
log_warnings = 0
back_log = 512
slow_query_log = 1
long_query_time = 5
table_open_cache = 15K
table_definition_cache = 15K
table_open_cache_instances = 16
query_cache_type = 0
query_cache_size = 0
query_cache_limit = 1M #8M
thread_cache_size = 100 #256
thread_handling = pool-of-threads
key_buffer_size = 64M #256M
join_buffer_size = 20M
# [InnoDB]
innodb_buffer_pool_size = 20G
innodb_log_file_size = 5G
innodb_file_per_table = 1
# [Misc]
concurrent_insert = 1
local_infile = 1
group_concat_max_len = 102400
innodb_file_per_table = 1
innodb_monitor_enable = all
log_slow_verbosity = query_plan,explain
performance_schema = ON
# [Custom]
collation-server = utf8mb4_unicode_ci
init-connect="SET NAMES utf8mb4"
character-set-server = utf8mb4
table_open_cache_instances = 16
sql-error-log-size-limit = 50M
sql-error-log-rotate = 1
sql-error-log-filename = mysql_query_errors.log
[mysqldump]
max_allowed_packet = 256M
[myisamchk]
bind-address = 127.0.0.1
max_allowed_packet = 50M #256M
И нет, я не могу просто зайти на каждый сайт и плагин и “исправить” их код или mysql структуру… это заняло бы вечность, так как это охватывает десятки сайтов и плагинов, и даже тогда это будет перезаписано при следующем обновлении, на которое я не имею никакого контроля.
Есть какие-нибудь предложения?
Что я здесь упускаю?
Спасибо!
Ответ или решение
Понимание предупреждений "Incorrect integer value" в журнале ошибок MySQL
Доброго времени суток! Ваша проблема с частыми предупреждениями в журнале ошибок MySQL, связанными с неверными значениями для целочисленных и десятичных полей, является достаточно распространенной. В частности, такие предупреждения, как WARNING 1366 и WARNING 1292, указывают на то, что в вашу базу данных вносятся некорректные значения, которые не соответствуют типу данных полей в таблицах.
Причины возникновения предупреждений
-
Пустые строки: Одной из самых распространенных причин подобных предупреждений в WordPress и его плагинах является попытка записи пустой строки (
''
) в столбец, ожидающий целочисленное или десятичное значение. Если значения не передаются или передаются некорректно, это приводит к предупреждениям. -
Отсутствие значений по умолчанию: Предупреждение WARNING 1364 указывает на то, что у определенного поля нет значения по умолчанию, и оно не получает значение при вставке новой записи.
-
Неправильные типы данных: Если таблицы были созданы с неправильными типами данных, попытка вставить данные, которые не соответствуют этим типам, приведет к предупреждениям.
Как отключить предупреждения
Если отключение предупреждений жизненно необходимо для вас, есть несколько способов:
-
Изменение sql-mode:
В вашей конфигурации MySQL (my.cnf
) вы можете попробовать изменить значениеsql-mode
. Добавьте в секцию[mysqld]
следующие параметры:sql-mode="NO_ENGINE_SUBSTITUTION,ALLOW_INVALID_DATES"
Это может помочь игнорировать некоторые предупреждения по наличию некорректных значений.
-
Отключение логирования предупреждений:
Вы можете отключить логирование предупреждений, добавив в вашу конфигурацию:log_warnings = 0
Однако учтите, что это может скрыть важные предупреждения, которые вам стоит рассмотреть.
-
Кастомизация конфигурации плагинов:
Некоторые плагины могут позволять вам настроить способы обработки данных, в том числе разрешить пустые строки. Изучите возможность настройки этих плагинов.
Рекомендации по улучшению ситуации
-
Миграция на более стабильные версии: Убедитесь, что вы используете актуальные версии WordPress и плагинов. В более свежих версиях разработчики могут исправить проблемы с невалидными данными.
-
Мониторинг и чистка данных: Проведите аудит ваших баз данных на наличие неполных или некорректных записей. Это можно сделать с использованием SQL-запросов для выборки пустых значений и замены их корректными данными.
-
Пользовательская обработка данных: Используйте хуки WordPress для обработки данных перед их сохранением в базу данных, чтобы исключить возможность попадания некорректных значений.
Заключение
Хотя отключение предупреждений может временно облегчить ситуацию, правильным подходом будет устранение коренной причины проблемы. Обратите внимание на то, что постоянное игнорирование предупреждений может привести к накоплению проблем, которые могут потребовать большого количества ресурсов для исправления в будущем.
Важно: Изучение журналов ошибок, несмотря на появление предупреждений, остается критически важным для поддержания здоровья ваших баз данных. Успеха в решении проблемы и, если потребуется, не стесняйтесь обращаться за помощью!